Датчик присутствия для Home Assistant с использованием Zigbee

Для своего умного дома решил собрать датчик присутствия на доплеровском датчике rcwl-0516 и микроконтроллере Zigbee — cc2530, работающий на протоколе Zigbee, отличающийся низким энергопотреблением.

Для своего умного дома, для включения света в коридоре решил сделать сам датчик присутствия, все рыночные решения показались мне громоздкими (обычно работают в инфракрасном диапазоне), плюс, я не хотел чтобы его было видно и поэтому хотел установить за картину.

Все элементы были куплены на AliExpress и стояли очень дешево.

50fabbc5547a448627dc0274e8fd5194.png

Доплеровский датчик движения RCWL-0516 — способен определять движение объектов, которые полностью или частично отражают радиоволны (люди, животные, металл и т.д.), в том числе когда движущиеся объекты находятся за тонкой перегородкой. На определение движения не влияет освещение, в отличии от инфракрасных датчиков.

Характеристики датчика

  • Входное напряжение питания (VIN): 4… 28 В постоянного тока.

  • Потребляемый ток: до 3 мА (номинально 2,8 мА).

  • Дальность обнаружения: до 9 м (номинально до 5 м).

  • Мощность передатчика: до 30 мВт (номинально до 20 мВт).

  • Частота передатчика: 5,8 ГГц.

  • Время задержки до сброса триггера: 2 сек ±30%.

  • Выходное напряжение питания (3V3): 3,2… 3,4 В (номинально 3,3 В).

  • Максимальный ток на выходе »3V3»: до 100 мА.

  • Рабочая температура: -20… +80 °С.

  • Температура хранения: -40… +100 °С.

  • Габариты: 17,3×35,9 мм

  • Вес: 4 гр.

5c7ccb8516c85d558607db0c0fdd6bd9.png

CC2530 — модуль поддерживает стандарт IEEE 802.15.4, предназначен для организации сетей стандарта ZigBee, а также средств дистанционного управления на базе ZigBee RF4CE и оборудования стандарта Smart Energy. ИС CC2530 объединяет в одном кристалле РЧ-трансивер и микроконтроллер. ИС выпускается в четырех исполнениях CC2530F32/64/128/256, различающиеся объемом флэш-памяти — 32/64/128/256 Кбайт, соответственно. В остальном все ИС идентичны: они поставляются в миниатюрном RoHS-совместимом корпусе QFN40 размерами 6×6 мм и обладают одинаковыми рабочими характеристиками.

Характеристики чипа

  • Размеры: 17×28 мм

  • Рабочая частота: 2394–2507 МГц

  • Напряжение: 2–3.6 В

  • Мощность передатчика: 4 (2.5 мВт)

  • Расстояние: до 150 м

  • Скорость: 250 кбит/с

  • Чувствительность приемника: -97dBm

  • Рабочая температура: -45…+85 С

Прошивка

Для начала необходимо прошить сам Zigbee модуль универсальной прошивкой от @ptvo

Закачать прошивку на него можно тремя способами:

Так как у меня был в наличии ESP, решил делать через него, но не все так быстро, сначала сам ESP8266 нужно прошить специальной прошивкой. Готовая прошивка находится тут (там же можно скачать исходники и собрать свою прошивку с нужными вам пинами). Ее нужно прошить на ESP8266, например, через Tasmotizer.

После прошивки 8266 нужно припаять модули в соответствии со схемой:

Не повторять это у себя дома (делал навесу)

f1475fad5348040c81fa694f0279921d.jpeg

PIN CC2530

NodeMCU/Wemos

GPIO#

P21 (DEBUG_DATA)

D5

GPIO14

P22 (DEBUG_CLOCK)

D2

GPIO4

RST (RESET_N)

D1

GPIO5

VCC

3.3V

GND

GND

92c4bf43a4fd1726a87e51315f58458b.png

После этого приступаем к программной части модуля cc2530.

Программа PTVO генерит универсальную прошивку для Zigbee устройств с нужным вам функционалом, например, можно сделать свои датчики температуры и CO2, управлять реле, светодиодной летной и тд.

Можно скачать мой готовый файл настроек, его нужно распаковать и открыть в программе PTVO.

Или сделать настройку самому в приложении, в соответствии с картинкой:

88dee19145435f87a92415fdd9dfed00.png

В нашем случае:

  • выбираем тип платы CC2530

  • тип устройства Конечное устройство

  • опционально выбираем Индикатор статуса на PIN P07 (нужно припаять светодиод на плату к этому пину)

  • Выход2 P30 это виртуальный порт, несуществующий физически, но нужный для отправки данных по Zigbee

  • Вход2 P06 это физический порт, к которому подключаем выход датчика RCWL-0516 и программно подключенный к Выход2 (передает туда данные)

на момент написания статьи в конфигураторе прошивки был баг, если выбрать Вход1, то устройство после переподключения переходило снова в режим сопряжения, поэтому нужно выбирать Вход2

Переключаемся на вкладку Эксперт и там называем свое устройство, нажимаем Создать внешний конвертер для Z2M, будет сгенерирован файл с расширением JS, который нужен будет нам в дальнейшем для HomeAssistant и аддона Zigbee2MQTT.

278fda9668fccf62bdaf6215577ba910.png

Теперь нажимаем нижнюю кнопку Сохранить, будет сгенерирована прошивка в формате HEX.

Для заливки прошивки на CC2530 нужна прошивка в формате BIN, поэтому скачиваем другую утилиту objcopy и CCLoader.

Запускаем конвертацию HEX в BIN:

objcopy.exe --gap-fill 0xFF --pad-to 0x040000 -I ihex название_сохраненной_прошивки.hex -O binary название_прошивки.bin

Запускаем прошивку cc2530 через ESP8266 (где 9 это номер COM порта, к которому подключен ESP8266):

CCLoader_x86_64.exe 9 название_прошивки.bin 0 

После успешной прошивки, должны получить сообщение:

Upload successfully! File closed! Comport closed!

Теперь отключаем ESP8266 от компьютера и заново подключаем, CC2530 переходит в режим сопряжения и если припаивали светодиод, он будет быстро мигать, примерно раз в секунду и будет в таком режиме пока не подключится к координатору Zigbee. Сбросить устройство можно 3 раза подключить к питанию и выждав 2 секунды отключить от питания, прошивка сброситься и опять будет ждать подключению к координатору.

Теперь можно отключать (отпаять) ESP8266 (ранее мы получали питание с него), соединить СС230 и RCWL-0516 с источником питания от 4В до 28В. Соединить выход датчика OUT с P06. И стабилизированный выход 3.3В со входом питания CC2530. В качестве источника может выступать аккумулятор 3.7В, тем более собранное устройство потребляет не более 28 мА. Итак конечная схема датчика:

6233beaceb27c9391dc48f60a7bec9f6.png

Подключение к Home Assistant

Полученный файл JS на предыдущем шаге, нужно скопировать на устройство с установленным Home Assistant в папку /config/zigbee2mqtt, а потом в Настройках Zigbee2MQTT во Внешних конверторах указать имя файла JS Сохранить, настройки и запустить поиск устройств.

586a8b2efa0cdfd83ef50d32b1ae2bb4.png

Остается проверить работу устройства:

882dd9c1ba4b47163ff218d438346c64.png

И спрятать в заранее заказанную коробочку, например, в такую:

485d9a31a8494a897a5afeaae5f3b617.png

© Habrahabr.ru