Zigbee-LAN координатор на EFR32MG21 Silicon Labs

Внешний вид координатора ZigbeeLink

Внешний вид координатора ZigbeeLink

Вступление

Привет, Хабр!

В этой статье речь пойдет о разработке и сборке 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 LAN Gateway

Координатор ZigStar LAN Gateway

Координатор ZigStar основан на Zigbee модулях с чипом производства Texas Instruments CC2652x. Устройство может работать, как координатор, так и как роутер. Главное преимущество решений, основанных на данных чипах — поддержку Zigbee2MQTT, думаю, представлять не нужно. Ну и версия с поддержкой PoE также имеется, поэтому данное решение идет первым в моем списке.

Также заслуживает внимания довольно интересное устройство Zigbee LAN координатора производства SMLIGHT начиная от инженерных решений, заканчивая корпусом и упаковкой.

Координатор SMLIGHT SLZB-06

Координатор SMLIGHT SLZB-06

В одном компактном устройстве расположились CC2652P, CP2102, ESP32, LAN8720.

PCB SMLIGHT SLZB-06

PCB SMLIGHT SLZB-06

Но, к сожалению, так сложились обстоятельства, что в Россию, Турцию, Беларусь данные координаторы не отправляются, поэтому народным данный координатор у нас вряд ли станет.

На просторах Aliexpress можно найти и другие Zigbee-LAN координаторы, в основе которых будут всё те же чипы от Texas Instruments, эта поляна засеена плотно, а если захотелось Zigbee от Silicon Labs, то тут всё немного печальнее. Сообщество DIY давно освоило путь самурая по перепрошивке шлюзов Sonoff ZBBridge в LAN координаторы, ссылки можно нагуглить в пару кликов.

Sonoff ZBBridge

Sonoff ZBBridge

Для варианта с Ethernet нужно приобрести соответствующий шлюз, например eWeLink ZB-GW03 и прошить его в соответствии с инструкцией.

eWeLink ZB-GW03

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 КБ памяти.

Стик iTead от Sonoff с 768КБ флеш-памяти

Стик iTead от Sonoff с 768КБ флеш-памяти

Модуль SM-011 с 768 КБ флеш-памяти, устанавливаемый в шлюзы Sonoff, EWeLink и другие устройства

Модуль SM-011 с 768 КБ флеш-памяти, устанавливаемый в шлюзы Sonoff, EWeLink и другие устройства

Пару лет назад неожиданно у Ebyte был обнаружен модуль E104-BT11 на чипе Silabs EFR32MG21A020F1024.

Модули Ebyte на EFR32MG21A020F1024 (1МБ флеш-памяти)

Модули Ebyte на EFR32MG21A020F1024 (1МБ флеш-памяти)

Упоминания точного артикула чипа не было ни в даташите, ни на сайте, а сам модуль позиционируется для Ble mesh решений и поставляется со своей прошивкой, поэтому только через саппорт удалось узнать точное наименование чипа, да и то не сразу. На момент находки это был единственный доступный на нашем рынке модуль с ERF32MG21A020F1024, хотя после находки и стоки Ebyte удалось опустошить на полгода.

Модуль E104-BT11 производится в двух модификациях — со встроенной антенной E104-BT11-PCB и с разъемом IPX под внешнюю антенну E104-BT11-IPX. Дополнительная буква N (node) или G (gateway) в коде заказа означает роль устройства в Zigbee сети.

С главным камнем разобрались, теперь переходим к связи по Ethernet. Здесь были разные кандидаты, но т.к. модуль у нас от Ebyte, то и мост в Ethernet решено было делать на том же производителе.

Чип Ebyte EBT3001

Чип Ebyte EBT3001

Встречайте Ethernet SMD чип — EBT3001 (иногда именуемый производителем и как модуль). Данный чип считаю незаслуженно обделенным вниманием DIY сообщества. Мне не попадались проекты на данном чипе, хотя его возможности очень интересны.

Функциональная схема EBT3001

Функциональная схема EBT3001

Здесь и настройка через 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.

Утилита Ebyte Config Tool v.5.0

Утилита Ebyte Config Tool v. 5.0

Ну и если вдруг кого-то заинтересовал чип EBT3001 от Ebyte, то предлагаю вишенку на торте. Взгляните на распиновку чипа из даташита

Распиновка EBT300

Распиновка EBT300

И сравните ее с распиновкой другого чипа CH579M в том же корпусе QFN48 китайской компании WCH.

Распиновка CH579M

Распиновка CH579M

Особенно в глаза бросаются пины с надписями Reserved у EBT3001, в то время как у CH579M они используются, например, к пину 34 можно подключить антенну и собрать прошивку с BLE. Кое-какие неточности в описании от Ebyte и «плавание» саппорта косвенно подтвердили предположение, что это один и тот же чип. Очень похоже, что Ebyte написали прошивку для CH579 и либо заказывают OEM производство у WCH, либо как-то еще позаимствовали чип.

К самому даташиту Ebyte есть вопросы. Достаточно взглянуть, как небрежно они указывают одинаковым отрезком шаг между пинами, ширину и длину пина, в то время как у WCH всё более корректно.

скрин из даташита EBT3001

скрин из даташита EBT3001

скрин из даташита CH579

скрин из даташита CH579

Но и в огород WCH бросим камешек. В спецификациях по CH579 WCH гордо заявляет не только BLE, но и Zigbee.

Скриншот с сайта производителя WCH

Скриншот с сайта производителя WCH

Сравнительная таблица чипов WCH

Сравнительная таблица чипов WCH

К сожалению, это заявление осталось только на бумаге. За несколько лет WCH так и не реализовали Zigbee стек, в примерах к чипу есть только BLE. Но имеющиеся примеры для чипа CH579, представленные на сайте WCH, вполне рабочие, поэтому ничего не мешает написать свою прошивку для Ethernet адаптера на основе CH579, более того, что и отладки, и чипы доступны на Aliexpress и стоят весьма бюджетно.

Схема

С ключевыми компонентами устройства определились, можно перейти к самой схеме ZigbeeLink, которая представлена ниже.

Схема электрическая принципиальная ZigbeeLink

Схема электрическая принципиальная ZigbeeLink

Нужно, наверное, пояснить назначение светодиодов:

  • красный светодиод D3 сигнализирует о наличии прошивки в чипе EFR32. Отсутствие свечения светодиода указывает на отсутствие прошивки, либо нахождении устройства в режиме бутлоадера;

  • синий светодиод D5 загорается при подключении клиента к TCP серверу и гаснет при отключении клиента от сервера (данная индикация работает при активном соединении Ethernet). При первоначальной подаче питания на устройство и до подключения его к Ethernet синий светодиод D5 начинает мигать и загорается постоянно;

  • желтый и зеленый светодиоды D1, D2 — это светодиоды статуса Ethernet соединения (LINK, ACT), которые сигнализируют о наличии линка и сетевой активности.

3D модель печатной платы ZigbeeLink

3D модель печатной платы ZigbeeLink

Корпус

У любого устройства должен быть корпус, и процесс поиска корпуса для DIY решений часто является болью. Всегда можно, конечно, спроектировать корпус и распечатать его на 3D принтере, но хотелось более изящного варианта.

После продолжительных поисков выбор был остановлен на корпусе китайской компании LK Shiny Enclosure (модель LK-USB29) размером 68×25х15 мм.

Корпус LK-USB29

Корпус LK-USB29

В момент заказа не обратил внимание на то, что хоть корпус и был заявлен для Ethernet устройств, но по факту он больше подходит для разъемов RJ11, потому что большинство розеток RJ45 в этот корпус просто физически не помещается. Игнор производителя на запрос даташита или хотя бы чертежа корпуса с размерами вылился в единственный отзыв на Али с оценкой 1, т.к. изначально вообще не было понятно, что делать с этим корпусом. Про RJ45 розетки со встроенными трансформаторами и светодиодами сразу пришлось забыть, но, к счастью, все же удалось найти подходящую розетку от TE Connectivity, клоны которой можно найти и на Aliexpress. Поэтому в схему пришлось добавлять внешний трансформатор HanRun HR641680E. Надеюсь, про отсутствие PoE в таком корпусе вопросов не будет).

У LK Shiny Enclosure есть похожий корпус (LK-USB28), но под разъем USB-A, он тоже был заказан, но решено было использовать предыдущий вариант.

Корпус LK-USB28

Корпус LK-USB28

Антенна у устройства выбрана внешняя гибкая, клеится внутри корпуса. Если необходимо, можно подключить и штыревую антенну с бОльшим коэффициентом усиления.

Гибкая антенна

Гибкая антенна

Для передачи свечения светодиодов, расположенных на плате, в верхнюю часть корпуса пришлось прибегнуть к установке световодов. Отверстия в корпусе под световоды сверлились на ЧПУ станке. Диаметр световодов 2 мм, длина 9,5 мм приобрести также можно на Aliexpress.

Свечение светодиодов через световоды

Свечение светодиодов через световоды

Внешний вид прототипа устройства, собранного вручную, показан на фото ниже.

ZigbeeLink в разобранном виде

ZigbeeLink в разобранном виде

Для облегчения процесса сверления была изготовлена оснастка в виде углубления в размер корпуса. Это нужно для фиксации корпуса, чтобы каждый раз после замены заготовки не приходилось выставлять начало координат для CNC станка, а отверстия сверлились в одном и том же месте корпуса.

Процесс сверления отверстий

Процесс сверления отверстий

Подготовка к сверлению

Подготовка к сверлению

Конечный результат после сверления

Конечный результат после сверления

Производство

Не обошлось без проколов и в процессе производства устройства. Следует отметить, что под производством подразумевается сборка небольшой партии из 100 шт.

Панели печатных плат

Панели печатных плат

После изготовления и проверки прототипов на PCBWay были заказаны панели плат и трафарет к ним. Впервые за много лет работы с PCBWay был получен трафарет сразу с несколькими проблемами. Рама трафарета была сварена с небольшим перекосом, что повлияло на процесс нанесения паяльной пасты, также неудачно было выполнено отверстие для теплоотводящей площадки чипа EBT3001. Хотя, видимо, нужно винить себя, что не были предоставлены пояснения по тому, как вырезать апертуры под вполне стандартный корпус QFN48, раньше всегда трафареты под разные корпуса QFN делались не сплошными, а сегментированными самими специалистами PCBWay, дополнительных комментариев никогда не давал, возможно просто везло. Будет интересно прочитать ваш опыт заказа трафаретов с подобными корпусами чипов.

Сплошное отверстие под корпусом QFN48

Сплошное отверстие под корпусом QFN48

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

Излишки припоя вокруг чипа EBT3001

Излишки припоя вокруг чипа EBT3001

SMT монтаж производился в России на китайских установщиках, представленных на фото ниже.

47c9fcb9d4ef6ba8f72033df1c203c03.jpg

На одном установщике «набивались» мелкие элементы, на другом — крупные.

Пара гифок процесса SMT монтажа для наглядности загружена на Github.

Конечный результат SMT монтажа представлен на фото ниже.

Конечный результат SMT монтажа

Конечный результат SMT монтажа

Прошивка

После сборки устройства нужно прошить бутлоадер в модуль U2. Для этого с обратной стороны платы предусмотрен разъем X1 (DEBUG). Программатор понадобится только один раз для записи загрузчика. Загрузку и обновление прошивки уже можно будет осуществлять по LAN.

Программатор J-Link с кастомным адаптером для прошивки

Программатор J-Link с кастомным адаптером для прошивки

Чипы EFR32 можно прошивать как из среды Simplicity Studio, так и, например, с помощью ПО Simplicity Commander, работающего, в том числе и из командной строки.

Проверка прошитых плат

Проверка прошитых плат

Настройка

При первом включении устройства в сеть Ethernet модуль EBT3001 имеет IP адрес, заданный по умолчанию — 192.168.3.7 (см.даташит), поэтому, чтобы подключиться к устройству и выполнить необходимые настройки, первоначальное подключение к устройству должно осуществляться из соответствующей подсети. Если для настройки используется WEB-интерфейс, то после ввода IP адреса устройства в строке браузера появится окно логина, где логин и пароль по умолчанию admin/admin

Окно логина EBT3001

Окно логина EBT3001

Далее в WEB-интерфейсе достаточно задать IP адрес (либо DCHP), режим работы — TCP Server, Port, а также настройки подключения по UART.

Меню основных настроек EBT3001

Меню основных настроек EBT3001

Не забывайте нажимать кнопку submit для принятия настроек.

После минимально необходимых настроек можно подключиться к устройству по сети для загрузки прошивки. Сделать это можно, например, программой Tera Term. Для этого в окне нового подключения указываем IP адрес и порт нашего устройства.

Tera Term подключение

Tera Term подключение

После подключения нажатие клавиши 3 и Enter вызовет меню бутлоадера чипа EFR32, а нажатие кнопки 1 и Enter вызовет процесс загрузки прошивки.

Меню бутлоадера и процесс загрузки прошивки

Меню бутлоадера и процесс загрузки прошивки

Далее необходимо проследовать по пути, указанному на скриншоте для отправки файла прошивки на устройство.

Загрузка файла прошивки в чип EFR32 с помощью XMODEM

Загрузка файла прошивки в чип EFR32 с помощью XMODEM

Начнется процесс загрузки.

Процесс загрузки прошивки

Процесс загрузки прошивки

Если загрузка прошла успешно, то появится сообщение Serial upload complete.

Загрузка прошивки завершена

Загрузка прошивки завершена

Для запуска прошивки достаточно нажать клавишу 2 и Enter, либо просто обесточить устройство и заново подать питание. Процесс запуска прошивки будет подтвержден зажиганием красного светодиода D3. При дальнейших включениях прошивка будет запускаться автоматически, а для того, чтобы снова войти в режим бутлоадера, нужно будет подать питание на устройство с одновременно зажатой кнопкой SB1, расположенной на плате.

Существует множество разного софта для общения по TCP, поэтому воспользовавшись, например, утилитой Network Assistant, рекомендуемой Ebyte, мы можем подключиться к нашему устройству и «пингануть его», а если точнее, можно отправить команду сброса координатора и посмотреть ответ.

Интерфейс Network Assistant

Интерфейс Network Assistant

Это может быть полезно для проверки связи с удаленным координатором.

Аналогичным образом можно увидеть и меню бутлоадера и другой обмен данными.

Меню бутлоадера в интерфейсе Network Assistant

Меню бутлоадера в интерфейсе Network Assistant

Обмен данными в интерфейсе Network Assistant

Обмен данными в интерфейсе Network Assistant

На этом настройка устройства завершена, можно переходить к настройке вашего сервера умного дома.

HomeAssistant

Добавление ZigbeeLink в HomeAssistant осуществляется всего несколькими шагами:

  • жмем добавить интеграцию;

  • в поиске можно ввести ZHA;

  • на следующем шаге выбираем Zigbee Home Automation;

  • последовательный порт — enter Manually;

  • тип радиомодуля — EZSP;

  • в настройках вбить Socket://IP: PORT скорость порта указать 115200, управление потоком Hardware Flow Control, где IP — IP адрес ZigbeeLink, PORT — порт TCP сервера.

Ищем Zigbee Home Automation (ZHA)

Ищем Zigbee Home Automation (ZHA)

Добавляем интеграцию ZHA

Добавляем интеграцию ZHA

Последовательный порт выбираем вручную

Последовательный порт выбираем вручную

Выбираем EZSP радиомодуль

Выбираем EZSP радиомодуль

Указываем IP адрес, порт, скорость порта, тип управления потоком ZigbeeLink

Указываем IP адрес, порт, скорость порта, тип управления потоком ZigbeeLink

Если всё сделано правильно, то после нажатия кнопки подтвердить через несколько секунд в интерфейсе HomeAssistant появится интеграция Zigbee.

Sprut.hub

  • переходим в настройки — контроллеры;

  • создаем новый Zigbee контроллер, задаем ему название;

  • в настройках созданного контроллера тип указываем SiliconLabs EZSP;

  • в экспертных настройках проверяем, чтобы было установлено аппаратное управление потоком и скорость 115200;

  • в расширенных настройках указываем IP адрес ZigbeeLink и порт TCP сервера;

  • сохраняемся и запускаем созданный контроллер.

Создаем новый Zigbee контроллер

Создаем новый Zigbee контроллер

Тип контроллера выбираем SiliconLabs EZSP

Тип контроллера выбираем SiliconLabs EZSP

Выбираем скорость 115200 и аппаратное управление потоком

Выбираем скорость 115200 и аппаратное управление потоком

Указываем IP адрес и порт ZigbeeLink

Указываем IP адрес и порт ZigbeeLink

После сохранения настроек в интерфейсе Спрутхаба появится наш новый Zigbee контроллер, и можно будет приступать к добавлению Zigbee устройств.

Для удобства всё необходимое для сборки: схема, BOM, Gerber файлы для производства, прошивки и инструкция выложены на Github.

© Habrahabr.ru