Вступление
Привет, Хабр!
В этой статье речь пойдет о разработке и сборке Zigbee координатора, связь с которым осуществляется по Ethernet. Устройство было названо ZigbeeLink. Продвинутые в теме IoT читатели могут возразить – зачем нужен новый велосипед при наличии выбора подобных устройств? На этот вопрос постараюсь тоже ответить.
Если вдруг кто-то не знает, зачем вообще нужны подобные устройства, то поясню – для расширения Zigbee сети, когда штатными средствами это не удается. Что представляет собой Zigbee сеть можно почерпнуть из интернета, если кратно, то это т.н. Mesh-сеть, надежность которой обеспечивается достаточным количеством роутеров – ретрансляторов сигнала. Если у вас достаточно роутеров, расположенных по всей площади вашего дома/квартиры, то все должно быть хорошо. Но бывают случаи, когда радиосигнал не «достает» до удаленных точек вашего объекта: это может быть отдельное строение на участке, подвал дома, кладовка в подземном паркинге многоквартирного дома и т.д. Для подобных случаев и приходится прибегать к «пробросу» координатора в нужное место через LAN. Это можно делать как через проводное соединение Ethernet, так и с использованием WiFi. Бывает и такое, что Zigbee не добивает, а WiFi ловит. Но в нашем случае мы будем использовать «проброс» по проводному соединению Ethernet. Еще один распространенный случай - это когда хаб умного дома установлен на NAS, NAS стоит в серверной, железном шкафу или другом месте, откуда распространение радиоволн затруднено. В этих случаях использование LAN координатора тоже может быть полезно. Стоит отметить, что фактически мы не расширяем имеющуюся Zigbee сеть, а создаем новую, т.к. каждый новый координатор это новая Zigbee сеть. Дальше уже вопрос к ПО хаба, чтобы в интерфейсе устройства, подключенные к разным координаторам, отображались в едином пространстве. Биндить между собой устройства, принадлежащие разным Zigbee сетям (координаторам), разумеется, не получится.
Имеющиеся решения
Для начала давайте кратко пробежимся по имеющимся на рынке Zigbee-LAN координаторам. Подробно их рассматривать смысла не вижу, т.к. если вы вдруг с ними не знакомы, то спокойно нагуглите массу обзоров и тестов. На мой взгляд, очень достойный внимания open-source проект, это, конечно же, ZigStar.
Координатор ZigStar основан на Zigbee модулях с чипом производства Texas Instruments CC2652x. Устройство может работать, как координатор, так и как роутер. Главное преимущество решений, основанных на данных чипах – поддержку Zigbee2MQTT, думаю, представлять не нужно. Ну и версия с поддержкой PoE также имеется, поэтому данное решение идет первым в моем списке.
Также заслуживает внимания довольно интересное устройство Zigbee LAN координатора производства SMLIGHT начиная от инженерных решений, заканчивая корпусом и упаковкой.
В одном компактном устройстве расположились CC2652P, CP2102, ESP32, LAN8720.
Но, к сожалению, так сложились обстоятельства, что в Россию, Турцию, Беларусь данные координаторы не отправляются, поэтому народным данный координатор у нас вряд ли станет.
На просторах Aliexpress можно найти и другие Zigbee-LAN координаторы, в основе которых будут всё те же чипы от Texas Instruments, эта поляна засеена плотно, а если захотелось Zigbee от Silicon Labs, то тут всё немного печальнее. Сообщество DIY давно освоило путь самурая по перепрошивке шлюзов Sonoff ZBBridge в LAN координаторы, ссылки можно нагуглить в пару кликов.
Для варианта с Ethernet нужно приобрести соответствующий шлюз, например eWeLink ZB-GW03 и прошить его в соответствии с инструкцией.
При покупке важно предварительно разобраться в зоопарке вариантов шлюзов, они могут продаваться на Али под разными названиями (но чаще это Sonoff Zigbee Bridge и EACHEN EWeLink), какие-то из них после прошивки могут не взлететь, поэтому обязательно нужно читать отзывы покупателей и уточнять возможность перепрошивки до покупки. Помимо сложностей с выбором и перепрошивкой огорчает и наличие в шлюзе чипа EFR32MG21A020F768 с 768 КБ флеша на борту, которых недостаточно для запуска мультипротокольных прошивок.
Если вдруг не упомянул еще какие-то достойные варианты LAN-координаторов, напишите, пожалуйста, в комментариях, будет интересно ознакомиться.
Железо
И вот мы плавно переходим к нашему устройству – координатору на чипе от Silicon Labs в модификации с мегабайтом флеш-памяти – EFR32MG21A020F1024. Богатые возможности стека EmberZNet от Silicon Labs еще не оценены по достоинству open-source сообществом, надеюсь эта статья внесет свой небольшой вклад в развитие. На момент написания статьи собрана самая свежая прошивка координатора 7.3.0.0, которая не поддерживается пока ни одним шлюзом. Поэтому пришлось использовать более старую версию – 6.9.2.
Три года назад на заре проекта Sprut.hub в профильных группах Телеграм проводился опрос по используемым чипам Zigbee. Результаты опроса можно увидеть на скриншоте.
Доля Zigbee чипов Silicon Labs составляла 0%. На сегодняшний день эту долю также можно назвать не высокой по отношению к пользователям чипов Ti, но число пользователей Sprut.hub, который использует чип EFR32MG21 уже измеряется несколькими тысячами. Отчасти такой перекос связан с «порогом входа» в Silabs – нужно купить не дешевый комплект разработчика (например, такой), чтобы получить доступ к SDK по серийному номеру комплекта.
В последнее время Silicon Labs многое изменили как в самой среде Simplicity Studio, так и в подходе к SDK (в SDK объединили беспроводные протоколы Bluetooth, Bluetooth Mesh, Thread, Zigbee, Z-Wave). Со свежими версиями SDK можно ознакомиться на официальном репозитории Github, но часть документации и ПО всё равно остаются доступны только для зарегистрированных пользователей, а учетные данные пользователей из России и вовсе заблокировали.
Проблемы не обошли стороной и сами чипы. Во времена карантина и последующие годы наблюдался дефицит топовой модификации чипа с мегабайтом флеш-памяти. Наверное, большинство модулей, шлюзов, стиков, представленных на рынке и сейчас содержат в себе чип с 768 КБ памяти.
Пару лет назад неожиданно у Ebyte был обнаружен модуль E104-BT11 на чипе Silabs EFR32MG21A020F1024.
Упоминания точного артикула чипа не было ни в даташите, ни на сайте, а сам модуль позиционируется для Ble mesh решений и поставляется со своей прошивкой, поэтому только через саппорт удалось узнать точное наименование чипа, да и то не сразу. На момент находки это был единственный доступный на нашем рынке модуль с ERF32MG21A020F1024, хотя после находки и стоки Ebyte удалось опустошить на полгода.
Модуль E104-BT11 производится в двух модификациях – со встроенной антенной E104-BT11-PCB и с разъемом IPX под внешнюю антенну E104-BT11-IPX. Дополнительная буква N (node) или G (gateway) в коде заказа означает роль устройства в Zigbee сети.
С главным камнем разобрались, теперь переходим к связи по Ethernet. Здесь были разные кандидаты, но т.к. модуль у нас от Ebyte, то и мост в Ethernet решено было делать на том же производителе.
Встречайте Ethernet SMD чип - EBT3001 (иногда именуемый производителем и как модуль). Данный чип считаю незаслуженно обделенным вниманием DIY сообщества. Мне не попадались проекты на данном чипе, хотя его возможности очень интересны.
Здесь и настройка через Web-интерфейс, и возможность работы в режиме TCP Server, TCP Client, UDP Server, UDP Client, работа с MQTT, автоматическое преобразование Modbus TCP в RTU, работа с китайскими облаками Alibaba Cloud, Baidu Cloud, OneNET, Huawei Cloud, все необходимые сетевые настройки, включая DHCP. Помимо Web-интерфейса модуль удобно настраивать с помощью ПО производителя Ebyte Config Tool v.5.0, которое позволяет не только настраивать модули, но и осуществлять их поиск по LAN.
Ну и если вдруг кого-то заинтересовал чип EBT3001 от Ebyte, то предлагаю вишенку на торте. Взгляните на распиновку чипа из даташита
И сравните ее с распиновкой другого чипа CH579M в том же корпусе QFN48 китайской компании WCH.
Особенно в глаза бросаются пины с надписями Reserved у EBT3001, в то время как у CH579M они используются, например, к пину 34 можно подключить антенну и собрать прошивку с BLE. Кое-какие неточности в описании от Ebyte и "плавание" саппорта косвенно подтвердили предположение, что это один и тот же чип. Очень похоже, что Ebyte написали прошивку для CH579 и либо заказывают OEM производство у WCH, либо как-то еще позаимствовали чип.
К самому даташиту Ebyte есть вопросы. Достаточно взглянуть, как небрежно они указывают одинаковым отрезком шаг между пинами, ширину и длину пина, в то время как у WCH всё более корректно.
Но и в огород WCH бросим камешек. В спецификациях по CH579 WCH гордо заявляет не только BLE, но и Zigbee.
К сожалению, это заявление осталось только на бумаге. За несколько лет WCH так и не реализовали Zigbee стек, в примерах к чипу есть только BLE. Но имеющиеся примеры для чипа CH579, представленные на сайте WCH, вполне рабочие, поэтому ничего не мешает написать свою прошивку для Ethernet адаптера на основе CH579, более того, что и отладки, и чипы доступны на Aliexpress и стоят весьма бюджетно.
Схема
С ключевыми компонентами устройства определились, можно перейти к самой схеме ZigbeeLink, которая представлена ниже.
Нужно, наверное, пояснить назначение светодиодов:
красный светодиод D3 сигнализирует о наличии прошивки в чипе EFR32. Отсутствие свечения светодиода указывает на отсутствие прошивки, либо нахождении устройства в режиме бутлоадера;
синий светодиод D5 загорается при подключении клиента к TCP серверу и гаснет при отключении клиента от сервера (данная индикация работает при активном соединении Ethernet). При первоначальной подаче питания на устройство и до подключения его к Ethernet синий светодиод D5 начинает мигать и загорается постоянно;
желтый и зеленый светодиоды D1, D2 - это светодиоды статуса Ethernet соединения (LINK, ACT), которые сигнализируют о наличии линка и сетевой активности.
Корпус
У любого устройства должен быть корпус, и процесс поиска корпуса для DIY решений часто является болью. Всегда можно, конечно, спроектировать корпус и распечатать его на 3D принтере, но хотелось более изящного варианта.
После продолжительных поисков выбор был остановлен на корпусе китайской компании LK Shiny Enclosure (модель LK-USB29) размером 68х25х15 мм.
В момент заказа не обратил внимание на то, что хоть корпус и был заявлен для Ethernet устройств, но по факту он больше подходит для разъемов RJ11, потому что большинство розеток RJ45 в этот корпус просто физически не помещается. Игнор производителя на запрос даташита или хотя бы чертежа корпуса с размерами вылился в единственный отзыв на Али с оценкой 1, т.к. изначально вообще не было понятно, что делать с этим корпусом. Про RJ45 розетки со встроенными трансформаторами и светодиодами сразу пришлось забыть, но, к счастью, все же удалось найти подходящую розетку от TE Connectivity, клоны которой можно найти и на Aliexpress. Поэтому в схему пришлось добавлять внешний трансформатор HanRun HR641680E. Надеюсь, про отсутствие PoE в таком корпусе вопросов не будет).
У LK Shiny Enclosure есть похожий корпус (LK-USB28), но под разъем USB-A, он тоже был заказан, но решено было использовать предыдущий вариант.
Антенна у устройства выбрана внешняя гибкая, клеится внутри корпуса. Если необходимо, можно подключить и штыревую антенну с бОльшим коэффициентом усиления.
Для передачи свечения светодиодов, расположенных на плате, в верхнюю часть корпуса пришлось прибегнуть к установке световодов. Отверстия в корпусе под световоды сверлились на ЧПУ станке. Диаметр световодов 2 мм, длина 9,5 мм приобрести также можно на Aliexpress.
Внешний вид прототипа устройства, собранного вручную, показан на фото ниже.
Для облегчения процесса сверления была изготовлена оснастка в виде углубления в размер корпуса. Это нужно для фиксации корпуса, чтобы каждый раз после замены заготовки не приходилось выставлять начало координат для CNC станка, а отверстия сверлились в одном и том же месте корпуса.
Производство
Не обошлось без проколов и в процессе производства устройства. Следует отметить, что под производством подразумевается сборка небольшой партии из 100 шт.
После изготовления и проверки прототипов на PCBWay были заказаны панели плат и трафарет к ним. Впервые за много лет работы с PCBWay был получен трафарет сразу с несколькими проблемами. Рама трафарета была сварена с небольшим перекосом, что повлияло на процесс нанесения паяльной пасты, также неудачно было выполнено отверстие для теплоотводящей площадки чипа EBT3001. Хотя, видимо, нужно винить себя, что не были предоставлены пояснения по тому, как вырезать апертуры под вполне стандартный корпус QFN48, раньше всегда трафареты под разные корпуса QFN делались не сплошными, а сегментированными самими специалистами PCBWay, дополнительных комментариев никогда не давал, возможно просто везло. Будет интересно прочитать ваш опыт заказа трафаретов с подобными корпусами чипов.
После пайки в печи пришлось удалять лишний припой под каждым чипом вручную, т.к. его было слишком много.
SMT монтаж производился в России на китайских установщиках, представленных на фото ниже.
На одном установщике «набивались» мелкие элементы, на другом - крупные.
Пара гифок процесса SMT монтажа для наглядности загружена на Github.
Конечный результат SMT монтажа представлен на фото ниже.
Прошивка
После сборки устройства нужно прошить бутлоадер в модуль U2. Для этого с обратной стороны платы предусмотрен разъем X1 (DEBUG). Программатор понадобится только один раз для записи загрузчика. Загрузку и обновление прошивки уже можно будет осуществлять по LAN.
Чипы EFR32 можно прошивать как из среды Simplicity Studio, так и, например, с помощью ПО Simplicity Commander, работающего, в том числе и из командной строки.
Настройка
При первом включении устройства в сеть Ethernet модуль EBT3001 имеет IP адрес, заданный по умолчанию - 192.168.3.7 (см.даташит), поэтому, чтобы подключиться к устройству и выполнить необходимые настройки, первоначальное подключение к устройству должно осуществляться из соответствующей подсети. Если для настройки используется WEB-интерфейс, то после ввода IP адреса устройства в строке браузера появится окно логина, где логин и пароль по умолчанию admin/admin
Далее в WEB-интерфейсе достаточно задать IP адрес (либо DCHP), режим работы - TCP Server, Port, а также настройки подключения по UART.
Не забывайте нажимать кнопку submit для принятия настроек.
После минимально необходимых настроек можно подключиться к устройству по сети для загрузки прошивки. Сделать это можно, например, программой Tera Term. Для этого в окне нового подключения указываем IP адрес и порт нашего устройства.
После подключения нажатие клавиши 3 и Enter вызовет меню бутлоадера чипа EFR32, а нажатие кнопки 1 и Enter вызовет процесс загрузки прошивки.
Далее необходимо проследовать по пути, указанному на скриншоте для отправки файла прошивки на устройство.
Начнется процесс загрузки.
Если загрузка прошла успешно, то появится сообщение Serial upload complete.
Для запуска прошивки достаточно нажать клавишу 2 и Enter, либо просто обесточить устройство и заново подать питание. Процесс запуска прошивки будет подтвержден зажиганием красного светодиода D3. При дальнейших включениях прошивка будет запускаться автоматически, а для того, чтобы снова войти в режим бутлоадера, нужно будет подать питание на устройство с одновременно зажатой кнопкой SB1, расположенной на плате.
Существует множество разного софта для общения по TCP, поэтому воспользовавшись, например, утилитой Network Assistant, рекомендуемой Ebyte, мы можем подключиться к нашему устройству и "пингануть его", а если точнее, можно отправить команду сброса координатора и посмотреть ответ.
Это может быть полезно для проверки связи с удаленным координатором.
Аналогичным образом можно увидеть и меню бутлоадера и другой обмен данными.
На этом настройка устройства завершена, можно переходить к настройке вашего сервера умного дома.
HomeAssistant
Добавление ZigbeeLink в HomeAssistant осуществляется всего несколькими шагами:
жмем добавить интеграцию;
в поиске можно ввести ZHA;
на следующем шаге выбираем Zigbee Home Automation;
последовательный порт - enter Manually;
тип радиомодуля - EZSP;
в настройках вбить Socket://IP:PORT скорость порта указать 115200, управление потоком Hardware Flow Control, где IP - IP адрес ZigbeeLink, PORT - порт TCP сервера.
Если всё сделано правильно, то после нажатия кнопки подтвердить через несколько секунд в интерфейсе HomeAssistant появится интеграция Zigbee.
Sprut.hub
переходим в настройки - контроллеры;
создаем новый Zigbee контроллер, задаем ему название;
в настройках созданного контроллера тип указываем SiliconLabs EZSP;
в экспертных настройках проверяем, чтобы было установлено аппаратное управление потоком и скорость 115200;
в расширенных настройках указываем IP адрес ZigbeeLink и порт TCP сервера;
сохраняемся и запускаем созданный контроллер.
После сохранения настроек в интерфейсе Спрутхаба появится наш новый Zigbee контроллер, и можно будет приступать к добавлению Zigbee устройств.
Для удобства всё необходимое для сборки: схема, BOM, Gerber файлы для производства, прошивки и инструкция выложены на Github.
Комментарии (14)
beho1der
18.07.2023 09:22Не совсем понятно,чем получилось лучше чем тот же ZigStar ?
defaro Автор
18.07.2023 09:22Не утверждаю, что ZigbeeLink лучше. Просто появился выбор. Несколько лет назад Home Assistant толком не умел работать со стеком EmbeZNet от SiliconLabs, но интерес сообщества есть. Интеграция ZHA сильно прокачалась за это время и все стало лучше. В Sprut.hub поддерживается только Zigbee стек от Silicon Labs, поэтому тот же ZigStar мимо. На чипе EFR32 можно запускать мультипротокольные прошивки, поэтому, есть как бы задел на будущее развитие. Можно собрать прошивку Bluetooth Mesh, Thread, дальше вопрос только к поддержке со стороны хаба
Harwest
18.07.2023 09:22Можно собрать прошивку Bluetooth Mesh, Thread
Теоретически это реализуется и на популярном Sonoff dongle-E v2 c 768кб (EFR32MG21A020F768IM32-B)
Но лучше не смешивать вот это все в один коктейль.
NutsUnderline
18.07.2023 09:22Очень занятный материал, не про задачу - а про ее решение. Вроде велосипед - а как то все по другому :)
В раздел прошивки наверное надо дать прямую ссылку на ncp-uart-hw-ZigbeeLink-6.9.2.0.gbl
Про Ebyte EBT3001 вообще дивно, конечно. Как ESP32, но насколько хорошо он проработан .. и чего там в готовую прошивку Ebyte еще напихали. При этом он по сути выполняет работу serial to TCP.
4chemist
18.07.2023 09:22Чип serial2ethernet интересный но для на коленной сборки малоприменим. Я выбирал ESP32 с питанием по POE и прошивкой от ESPEasy с подключением модуля zigbee от Ebyte на монтажных проводках. У ESPEasy один из вариантов прошивки имеет модуль ser2net. Но остановился на wemos d1 на старом чипе esp8266 с прошивкой esp-link, просто из-за того что он был у меня, и его некуда было применить. Ebyte E72 CC2652P подпаял к Wemos D1 на монтажных проводах, залил esp-link 2.2.3 (версии 3.х.х я так и не смог запустить на wemos d1), и получил мост zigbee2wifi. Работает уже месяца два. Zigbee2mqtt при потере связи c tcp://192.168.31.4:23 завершает работу, но его тут же перезапускает HomeAssistant.
defaro Автор
18.07.2023 09:22Для коленной сборки у Ebyte есть модуль NS1, а также готовая плата NT1. А сам чип, да, с шагом 0,35 мм неудобен для руной пайки.
vvzvlad
18.07.2023 09:22+2Светодиоды плохо сделаны: яркие и будут светить вне устройства ночью. Я бы просто направил их изнутри на корпус.
defaro Автор
18.07.2023 09:22Ток через светодиоды в 6 раз меньше номинала, яркость, соответственно, тоже не высокая. Больше снижать яркость не увидел смысла. Фото делалось с приглушенным светом, поэтому может показаться, что светодиоды яркие. Изначально перебирал варианты с размещением внутри, когда до верхней крышки почти сантиметр, то видны только невыразительные пятна. Пробовал с нижней стороны корпуса разместить, лучше, но все равно не понравилось, да и делать двухстороннюю плату только из-за светодиодов нецелесообразно
OstrovCity
18.07.2023 09:22Если пластик корпуса достаточно толстый - сверлить, но не насквозь. Я так делал - очень симпатично получается. И яркость меньше становится, и в выключенном состоянии не видно.
defaro Автор
18.07.2023 09:22Да, вариант не плохой, думал о нем, но тоже есть нюансы. Корпус не очень толстый и визуально лучше смотрится с выводными светодиодами, расположенными вплотную к корпусу. Иначе снова цветные разводы вокруг, т.к. корпус пропускает свет.
vvzvlad
18.07.2023 09:22А все равно будут светить. Ладно, это я просто немного заморочен по поводу темноты дома ночью, заклеиваю все светодиоды на устройствах.
olartamonov
На производство надо отправлять готовый гербер трафарета, а не полагаться на их чувство прекрасного.
А вырез в маске для пасты можно и сплошной делать, например, если под чипом переходные отверстия достаточного диаметра и без закрытия маской с обратной стороны, чтобы в них излишек припоя ушёл. Но лучше не надо.
defaro Автор
Согласен, что полагаться не нужно. Часто самостоятельно рисую футпринты элементов, здесь взял готовый и не обратил внимание. И да, если бы переходные отверстия были большего диаметра, то, возможно, это бы немного помогло.