
Ai-Thinker Rd-01
Ai-Thinker · Rd-01
24-ГГц радар присутствия с BL602, UART, Wi-Fi и BLE; питание модуля 3,3 В.
Автор: SLDV LAB
Опубликовано · Обновлено
О МОДУЛЕ
Что делает Rd-01
Rd-01 — компактный модуль Ai-Thinker с FMCW-радаром S3KM111L и микроконтроллером BL602. Анализ отражённого 24-ГГц сигнала позволяет различать движение и слабые движения человека. Поэтому он подходит для освещения и комнатной автоматизации, где одного события движения недостаточно. «Неподвижная цель» в протоколе — результат радарной классификации, а не гарантия обнаружения абсолютно неподвижного человека при любых условиях.
Модуль выдаёт радарные данные по UART и допускает собственную разработку прошивки BL602. Wi-Fi и BLE аппаратно предусмотрены, но доступные сетевые функции, приложение и формат UART зависят от установленной прошивки. Это самостоятельная модель Rd-01: настройки похожих Rd-01H, Rd-03, LD2410 и плат ESP32 не следует переносить автоматически.
У радара собственные печатные антенны на плате. Wi-Fi/BLE используют отдельный IPEX-разъём для подходящей внешней антенны 2,4 ГГц. Наличие антенны в комплекте по снимку не подтверждено. Неизвестная прошивка может начать радиопередачу сразу после включения: подходящую внешнюю антенну 2,4 ГГц нужно подключить к IPEX до подачи питания. Частота радара 24 ГГц и частота сетевого радио 2,4 ГГц относятся к разным трактам.
Результат зависит от установки, чувствительности зон и задержки исчезновения цели. Вентиляторы, шторы, растения, животные, вибрация и отражающие поверхности могут влиять на срабатывания. Не закрывайте радарную часть металлом; материал корпуса и размещение проверяйте по руководству производителя. Модуль не является медицинским прибором, счётчиком людей или единственным каналом системы безопасности.
На фото пользователя читается Rd-01. Ревизия PCB, прошивка и наличие заднего разъёма у конкретного экземпляра не установлены; производитель показывает варианты монтажа с площадками, штырями и шестиконтактным разъёмом. Иллюстрация распиновки взята из спецификации V1.1.1 без изменения обозначений. Обложка — вырезанный модуль из исходного изображения пользователя, без дорисовки деталей.
Характеристики
- Принцип
- FMCW-радар, обнаружение движения и микродвижений
- Радарный чип
- S3KM111L
- Контроллер связи
- Bouffalo Lab BL602, 32-bit RISC; 276 КБ RAM, 2 МБ Flash по спецификации модуля
- Диапазон радара
- 24–24.25 ГГц
- Дальность по V1.1.1
- Настенная установка: типично 5 м; потолочная: типично 3,5 м; зависит от условий и настройки
- Заявленный угол покрытия
- До ±60°; реальная зона зависит от монтажа
- Питание
- 3–3.6 В
- Требование к источнику
- Не менее 500 мА при 3,3 В; не номинальное постоянное потребление
- Уровни интерфейса
- UART TTL относительно питания 3,3 В; не RS-232 и не 5-В логика
- Радиосвязь
- Wi-Fi IEEE 802.11 b/g/n и BLE 5.0 в BL602; программная доступность зависит от прошивки
- Антенны
- Радар: PCB; Wi-Fi/BLE: внешняя 2,4 ГГц через IPEX
- Размер
- 35 × 18 мм; SMD-12
- Рабочая температура
- -40–85 °C
- UART: расхождение документов
- V1.1.1: 115200 baud по умолчанию; протокол/руководство V1.0.0: 256000, 8N1. Проверять фактическую прошивку.
- Дистанция в отчёте
- Поля UART в сантиметрах; шаг зон и формат целого числа не являются точностью дальномера
- Исполнение
- Ревизия и задний разъём конкретного экземпляра не подтверждены
- Интерфейс
- UART, Wi-Fi, Bluetooth
- Питание модуля
- 3,0–3,6 В, номинально 3,3 В; источник должен обеспечивать не менее 500 мА. Это требование к источнику, а не постоянное потребление 500 мА. На 3V3 и GPIO нельзя подавать 5 В. Использовать отдельный стабилизированный источник 3,3 В с общей землёй USB–UART. Не считать маломощный выход 3V3 адаптера подходящим без проверки. Не соединять два источника 3,3 В параллельно. При неизвестной прошивке до подачи питания подключить подходящую внешнюю антенну 2,4 ГГц к IPEX: прошивка может начать передачу автоматически.
ПРАКТИКА
Подключение

| Контакт модуля | Контакт платы | Назначение |
|---|---|---|
| 3V3, физический вывод 12 | Отдельный стабилизированный источник +3,3 В | Источник ≥500 мА. Подключать при выключенном питании; проверить Top/Bottom View, не считать выводы слева направо по фото. |
| GND, физические выводы 1 и 11 | GND источника и GND USB–UART-адаптера | Общая земля обязательна; не соединять два плюсовых выхода питания. |
| GPIO16 / TXD, физический вывод 9 | RX адаптера USB–UART с логикой 3,3 В | В примере: ПК с Python 3 и pyserial 3.5. Это GPIO16 самого BL602, а не GPIO16 компьютера или ESP32. |
| GPIO7 / RXD, физический вывод 10 | Не подключать в приёмном диагностическом примере | TX адаптера остаётся свободным: команды настройки и прошивка не передаются. |
| CHIP_EN, физический вывод 7 | Не подключать к RTS/DTR адаптера | Активный высокий уровень; в нормальном режиме не удерживать в сбросе. Открытие COM-порта может переключать линии RTS/DTR, поэтому физически оставить их свободными. |
| GPIO8 / Bootstrap, физический вывод 8 | Не подключать к адаптеру в этом примере | При подаче питания высокий уровень включает программирование, низкий — обычную загрузку. Не менять штатные цепи загрузки; надпись GPIO8_NC на рисунке не отменяет boot-функцию. |
| GPIO17 / GPIO1 / GPIO2 / GPIO4 / GPIO5 | Физические выводы 2 / 3 / 4 / 5 / 6 | Не используются в примере. Их альтернативные функции требуют собственной прошивки; универсальный дискретный OUT присутствия здесь не предполагается. |
| IPEX Wi-Fi/BLE | Совместимая антенна 2,4 ГГц | Не радарная антенна. При неизвестной прошивке подключить подходящую антенну до подачи питания: радио может передавать сразу после старта. Снимок не подтверждает её наличие в комплекте. |
ВАШ ПРОЕКТ · ВАШ ДАТЧИК
Интегрируйте модуль с ChatGPT
Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.
Помоги интегрировать Ai-Thinker Rd-01, 24-ГГц модуль на S3KM111L и BL602. Сначала уточни задачу, маркировку и ревизию модуля, текущую прошивку, плату/компьютер-хост, среду и питание. Категория — датчик расстояния/присутствия. Не подменяй его Rd-01H, Rd-03 или LD2410 и не обещай готовую совместимость ESPHome по похожему протоколу. Начни с безопасного приёма UART без изменения настроек: питание 3,3 В от источника ≥500 мА, общая земля, TX Rd-01 (GPIO16, pin9) → RX 3,3-В адаптера; TX/RTS/DTR адаптера отключены. В V1.1.1 указан default 115200, а руководство и протокол V1.0.0 используют 256000 8N1. Установи фактическую скорость и формат по валидным кадрам, не по случайным байтам. Нет поддерживаемых кадров не означает отсутствие человека. После уточнения хоста предложи точные GPIO, питание, зависимости, полный минимальный пример, ошибки и проверку. Отдельно проверь boot GPIO8 и EN, если модуль не запускается. Различай состояния движения/стационарной цели и расстояние; не называй шаг зон точностью. Настройку чувствительности и задержек делай только после подтверждения версии протокола. Проверь прошивку и подходящую внешнюю антенну 2,4 ГГц на IPEX. При неизвестной прошивке подключи её до подачи питания: автоматическую радиопередачу при старте исключить нельзя. Не прошивай модуль ради первого теста и не утверждай проверку на устройстве без реального запуска.
Библиотеки
Установите библиотеку для своей среды и откройте пример из её документации.
Что именно прописать
- Точная конфигурация примера
Rd-01 → USB–UART TTL 3.3 V → PC; Python 3 + pyserial 3.5Приём без команд. Адаптер должен поддерживать фактическую скорость, включая нестандартную 256000; поддержку проверить в документации своего адаптера/драйвера.
- Питание
3.3 V regulated; supply capacity >= 500 mAОтдельное питание и общая земля; 5 В запрещены. Наличие 3V3 на адаптере не доказывает достаточный ток.
- UART module TX / RX
GPIO16 pin9 / GPIO7 pin10В примере подключён только TX модуля к RX адаптера. Не путать физические выводы с GPIO.
- Параметры линии
8 data bits; no parity; 1 stop bit; no flow control8N1 подтверждено протоколом V1.0.0. Смена скорости порта ПК не меняет конфигурацию модуля.
- Скорости пассивной проверки
115200, 256000По 8 секунд на каждую. Документы расходятся; ни одна скорость не объявлена универсальной для всех прошивок.
- Формат поддерживаемого отчёта
F4 F3 F2 F1 + uint16_le length + payload + F8 F7 F6 F5Парсер принимает только правильное обрамление. Разбирает обычный payload type 0x02 длиной 13 байт, marker 0xAA, tail 55 00.
- Состояния цели
0 none; 1 moving; 2 stationary; 3 moving_and_stationaryТолько значения из валидного базового отчёта. Отсутствие отчётов не заменяет state=0.
- Дистанция / энергия
uint16 little-endian cm / uint8 0..100Дистанции показаны как сырые поля отчёта, включая нули; это не гарантированная точность и не список отдельных людей.
- Управляющие линии
Adapter TX, RTS and DTR physically disconnectedДрайвер может переключать RTS/DTR при открытии порта даже без flow control. Не соединять их с EN/Bootstrap.
- Прошивка и беспроводная связь
Keep installed firmware; confirm antenna and firmware featuresДо подачи питания при неизвестной прошивке подключить подходящую антенну 2,4 ГГц к IPEX. Тест не посылает команд включения Wi-Fi/BLE, не записывает Flash и не меняет чувствительность, но уже установленная прошивка может автоматически включать радио.
Подготовка ПК: отдельное окружение Python
textpython -m venv .venv
# Активируйте .venv способом своей ОС, затем:
python -m pip install pyserial==3.5
Команды подготовки, а не выполненный тест. Python 3 и pyserial 3.5; драйвер USB–UART должен быть установлен из официального источника. Уточнить реальное имя порта через ОС.
Полный rd01_receive_only.py: пассивная проверка UART
python"""Rd-01 receive-only UART diagnostic. Python 3 + pyserial 3.5.
Wire sensor TX (GPIO16, module pin 9) to adapter RX and share GND.
Leave adapter TX/RTS/DTR disconnected. Supply sensor separately at 3.3 V.
"""
import argparse
import time
HEADER = bytes.fromhex("F4 F3 F2 F1")
FOOTER = bytes.fromhex("F8 F7 F6 F5")
STATES = {0: "none", 1: "moving", 2: "stationary", 3: "moving_and_stationary"}
def extract_frames(buf):
"""Consume complete report frames; preserve partial input for the next read."""
frames = []
while True:
start = buf.find(HEADER)
if start < 0:
if len(buf) > 3:
del buf[:-3]
break
if start:
del buf[:start]
if len(buf) < 6:
break
size = int.from_bytes(buf[4:6], "little")
if not 13 <= size <= 1024:
del buf[0]
continue
total = 6 + size + 4
if len(buf) < total:
break
if bytes(buf[6 + size:total]) != FOOTER:
del buf[0]
continue
payload = bytes(buf[6:6 + size])
del buf[:total]
if payload[1] == 0xAA and payload[-2:] == b"\x55\x00":
frames.append(payload)
return frames
def decode_basic(payload):
if len(payload) != 13 or payload[0] != 0x02:
return None
if payload[2] not in STATES or payload[5] > 100 or payload[8] > 100:
return None
return {
"state": STATES[payload[2]],
"moving_cm": int.from_bytes(payload[3:5], "little"),
"moving_energy": payload[5],
"stationary_cm": int.from_bytes(payload[6:8], "little"),
"stationary_energy": payload[8],
"detection_cm": int.from_bytes(payload[9:11], "little"),
}
def main():
import serial
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("port", help="Actual adapter port, e.g. COM4 or /dev/ttyUSB0")
args = ap.parse_args()
for baud in (115200, 256000):
framed = decoded = received = 0
buf = bytearray()
print("Trying", baud, "8N1, receive only")
try:
with serial.Serial(args.port, baudrate=baud,
bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE, timeout=0.2,
xonxoff=False, rtscts=False, dsrdtr=False) as port:
deadline = time.monotonic() + 8.0
while time.monotonic() < deadline:
chunk = port.read(512)
received += len(chunk)
buf.extend(chunk)
if len(buf) > 8192:
del buf[:-8192]
for payload in extract_frames(buf):
framed += 1
data = decode_basic(payload)
if data is not None:
decoded += 1
print(data)
print("Bytes:", received, "report frames:", framed,
"supported basic reports:", decoded)
except (serial.SerialException, ValueError) as err:
print("Port/rate error:", err)
if decoded == 0:
print("No supported basic reports. This does NOT mean no person.")
print("Check power, common GND, TX-to-RX, baud, firmware and output mode.")
if __name__ == "__main__":
main()
Полный пример для Rd-01 + ПК + 3,3-В USB–UART, не для конкретной платы ESP32. Проверены синтаксис и разбор контрольного кадра из официального протокола; физического модуля и COM-порта для проверки не было. Серийные данные только читаются. Инженерный/другой payload может иметь валидное обрамление, но не декодируется как обычный отчёт.
Запуск и интерпретация
textpython rd01_receive_only.py COM4
# Альтернатива Linux, если это фактический порт:
python rd01_receive_only.py /dev/ttyUSB0
Выбрать одну команду и заменить порт своим. Ожидаются валидные базовые отчёты с state и полями сантиметров/энергии, если установленная прошивка их выдаёт. Восемь секунд без отчётов не доказывают неисправность или пустую комнату: проверить проводку, питание, скорость, режим и прошивку. Для сравнения состояния пройти в зоне, затем спокойно посидеть и покинуть её, учитывая задержку исчезновения цели. Это план проверки, не подтверждённый результат.
Проекты с этим компонентом
Все проектыСвязанные проекты пока не опубликованы.


