Датчик присутствия для Home Assistant с использованием Zigbee
Для своего умного дома решил собрать датчик присутствия на доплеровском датчике rcwl-0516 и микроконтроллере Zigbee — cc2530, работающий на протоколе Zigbee, отличающийся низким энергопотреблением.
Для своего умного дома, для включения света в коридоре решил сделать сам датчик присутствия, все рыночные решения показались мне громоздкими (обычно работают в инфракрасном диапазоне), плюс, я не хотел чтобы его было видно и поэтому хотел установить за картину.
Все элементы были куплены на AliExpress и стояли очень дешево.
Доплеровский датчик движения 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 гр.
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 нужно припаять модули в соответствии со схемой:
Не повторять это у себя дома (делал навесу)
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 |
После этого приступаем к программной части модуля cc2530.
Программа PTVO генерит универсальную прошивку для Zigbee устройств с нужным вам функционалом, например, можно сделать свои датчики температуры и CO2, управлять реле, светодиодной летной и тд.
Можно скачать мой готовый файл настроек, его нужно распаковать и открыть в программе PTVO.
Или сделать настройку самому в приложении, в соответствии с картинкой:
В нашем случае:
выбираем тип платы CC2530
тип устройства Конечное устройство
опционально выбираем Индикатор статуса на PIN P07 (нужно припаять светодиод на плату к этому пину)
Выход2 P30 это виртуальный порт, несуществующий физически, но нужный для отправки данных по Zigbee
Вход2 P06 это физический порт, к которому подключаем выход датчика RCWL-0516 и программно подключенный к Выход2 (передает туда данные)
на момент написания статьи в конфигураторе прошивки был баг, если выбрать Вход1, то устройство после переподключения переходило снова в режим сопряжения, поэтому нужно выбирать Вход2
Переключаемся на вкладку Эксперт и там называем свое устройство, нажимаем Создать внешний конвертер для Z2M, будет сгенерирован файл с расширением JS, который нужен будет нам в дальнейшем для HomeAssistant и аддона Zigbee2MQTT.
Теперь нажимаем нижнюю кнопку Сохранить, будет сгенерирована прошивка в формате 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 мА. Итак конечная схема датчика:
Подключение к Home Assistant
Полученный файл JS на предыдущем шаге, нужно скопировать на устройство с установленным Home Assistant в папку /config/zigbee2mqtt, а потом в Настройках Zigbee2MQTT во Внешних конверторах указать имя файла JS Сохранить, настройки и запустить поиск устройств.
Остается проверить работу устройства:
И спрятать в заранее заказанную коробочку, например, в такую: