Введение
Сейчас о концепции IoT («интернета вещей») говорят везде. Появляется «умная» бытовая техника, которая может подключиться к сети (Bluetooth/Wi-Fi) по беспроводному интерфейсу и начать рассылать уведомления о том, что задача по стирке/готовке еды/кипячению воды завершена и неплохо бы что-то с этим сделать. Большинство таких «умных» устройств получает питание непосредственно из электросети. Но как быть, если хочется получать информацию от беспроводного термометра и при этом не менять батарейку каждую неделю? Или иметь беспроводной выключатель с небольшим аккумулятором для которого не понадобится штробить стены? И хорошо бы объединить такие устройства в единую распределенную сеть, которой можно управлять удаленно и которая сама, основываясь на показаниях датчиков/извещателей/счетчиков, могла бы принимать какие-то решения.
Специально для решения таких задач была создана беспроводная технология ZigBee, о которой мы и начнем разговор.
Сетевые технологии для беспроводной связи
Существует большое количество беспроводных технологий, каждая из которых имеет свои особенности. В таблице ниже рассмотрены беспроводные протоколы связи для частоты 2,4 ГГц.
Сравнительная таблица популярных беспроводных технологий
- Технология Wi-Fi
Технология Wi-Fi создавалась в качестве замены проводного интерфейса Ethernet. Поэтому эта технология предлагает большие скорости передачи данных, но не позволяет разрабатывать узлы, работающие длительное время от источников питания малой емкости ввиду большого энергопотребления. - Технология Bluetooth
Технология Bluetooth с появлением стандарта 4.0 (Bluetooth Smart или Bluetooth Low Energy) стала гораздо привлекательней для разработчиков носимой электроники, так как энергопотребление по сравнению с предыдущими версиями сократилось в разы[1]. Но если стоит задача построения беспроводной малопотребляющей системы, которая будет охватывать несколько комнат или даже зданий, эта технология не подойдет, так как поддерживается только сетевая топология «звезда». Это же справедливо и для Wi-Fi. - Технология ZigBee и Thread
Технологии ZigBee и Thread изначально разрабатывались для создания надежных распределенных сетей датчиков и управляющих устройств с невысокими скоростями передачи данных. В этих технологиях реализована поддержка сетевой топологии «mesh», спящих и мобильных узлов, а также узлов, которые обеспечивают работу алгоритмов ретрансляции и самовосстановления. В таблице указана скорость 250 кбит/с — это максимальная пропускная способность сети. Полезная скорость будет порядка 30-40 кбит/с в пределах соседних узлов и 5-25 кбит/с при использовании ретрансляции. Основное отличие технологии Thread от ZigBee, что в ней добавлена поддержка IP-протокола, что упрощает интеграцию сетей Thread с сетевыми приложениями. Об особенностях технологии Thread мы поговорим в другой раз.
Сравнение сетевых топологий
Про поддерживаемые сетевые топологии в предыдущей главе было сказано, но не было сказано про особенности. Рассмотрим такой пример:
«Звезда» vs. «Mesh»
В сетях Bluetooth и Wi-Fi сетевое взаимодействие идет через центральный шлюз. И если он выйдет из строя, то обмен данными станет невозможным.
Кроме этого отдельные узлы могут остаться без связи, если неожиданно возникла преграда на пути следования радиосигнала.
В сетях ZigBee и Thread надежность связи повышается за счет наличия избыточных связей между устройствами. Все устройства, которые не уходят в спящий режим, выполняют роль роутеров, которые ответственны за маршрутизацию сетевого трафика, выбора оптимального маршрута следования и ретрансляцию пакетов. Даже если из строя выйдет устройство, которое выступало в качестве организатора сети, ZigBee-сеть продолжит функционировать дальше. Возникновение помехи или преграды, а также выход какого-либо из роутеров из строя не является критичным за счет наличия избыточных связей. Поэтому с введением дополнительных узлов, которые имеют стационарное питание и могут выполнять задачи роутера, сеть становится надежнее.
Типовая структура сети ZigBee
Теперь остановимся на структуре самой сети ZigBee и типах устройств, которые в ней могут быть.
Типовая структура сети ZigBee
Координатор — это узел, организовавший сеть. Именно он выбирает политику безопасности сети, разрешает или запрещает подключение к сети новых устройств, а также при наличии помех в радиоэфире инициирует процесс перевода всех устройств в сети на другой частотный канал.
Роутер — это узел, которые имеет стационарное питание и следовательно может постоянно участвовать в работе сети. Координатор также является роутером. На узлах этого типа лежит ответственность по маршрутизации сетевого трафика. Роутеры постоянно поддерживают специальные таблицы маршрутизации, которые используются для прокладки оптимального маршрута и поиска нового, если вдруг какое-либо устройство вышло из строя. Например, роутерами в сети ZigBee могут быть умные розетки, блоки управления осветительными приборами или любое другое устройство, которое имеет подключение к сети электропитания.
Конечное устройство — это устройство, которое подключаются к сети через родительский узел – роутер или координатор и не участвует в маршрутизации трафика. Все общение с сетью для них ограничивается передачей пакетов на «родительский» узел либо считыванием поступивших данных с него же. «Родителем» для таких устройств может быть любой роутер или координатор. Конечные устройства большую часть времени находятся в спящем режиме и отправляют управляющее или информационное сообщение обычно только по определенному событию (нажатие кнопки выключателя, открытие окна или двери). Это позволяет им долго сохранять энергию встроенного источника питания. Примером конечных устройств в сетях ZigBee могут быть беспроводные выключатели, управляющие работой светильников и работающие от батареек, датчики протечки воды, датчики открытия/закрытия дверей. Стоит сказать, что конечные устройства делятся на 3 категории, каждая из которых имеет свои особенности, но о них в следующей части.
Так как конечные устройства большую часть времени находятся в спящем режиме и просыпаются лишь для опроса родительского узла на наличие сообщений для себя, либо для передачи данных, то это позволяет экономно расходовать энергию батареечного источника питания. Опытные измерения энергопотребления для спящего конечного устройства на базе модуля ETRX357, о котором чуть позже, в различных режимах работы:
Питание для модуля подавалось через резистор R1 с номиналом 10 Ом. Два щупа осциллографа были подключены до и после резистора. После чего с помощью функции вычитания на осциллографе фиксировалось падения напряжения на резисторе. После этого, используя закон Ома , можно вычислить ток потребления. Кроме того, так как время в активном режиме фиксируется, можно найти заряд, а уж потом и затрачиваемую мощность в Джоулях.
Цикл передачи занимает 7,5 мс, потребляемая энергия при напряжении питания 3.3 В — 444,2 мкДж.
Обычная алкалиновая батарейка имеет запас мощности ~10.8 кДж. Этой энергии хватит на отправку 24 миллионов таких запросов. Если спящий узел будет посылать такое сообщение раз в 10 секунд, то это будет 8640 запросов в сутки. То есть теоретически, если не учитывать старение батарейки, её энергии хватит на ~2700 дней = 7 лет.
В этом режиме спящее устройство опрашивает свой родительский узел на предмет наличия входящего сообщения. Если его нет, то спящий узел переходит в режим энергосбережения.
Цикл передачи занимает 3,2 мс, потребляемая энергия при напряжении питания 3.3 В — 184 мкДж.
Обычная алкалиновая батарейка имеет запас мощности ~10.8 кДж. Этой энергии хватит на отправку 60 миллионов таких запросов. Если спящий узел будет посылать такой запрос раз в 10 секунд, то это будет 8640 запросов в сутки. То есть теоретически, если не учитывать старение батарейки, её энергии хватит на ~6940 дней = 19 лет.
Разработка стандартных ZigBee-устройств
«Отлично, – подумает читатель. – ещё один проприетарный протокол с поддержкой mesh-топологии. Этим уже никого не удивишь». Однако, альянсом ZigBee за все те годы, что существует технология ZigBee, была проведена большая работа по стандартизации не только сетевого уровня, но и уровня приложения разрабатываемых устройств[2]. Имеется большая библиотека кластеров ZigBee (ZCL), описывающая свыше 200 устройств, таких как выключатели, блоки управления освещением, интерфейс для подключения датчиков, счетчиков и многое другое[3]. И для некоторых типов систем (системы домашней автоматизации, системы сбора показаний со счетчиков и др.) разработаны специальные профили, в которые входит целый набор стандартных устройств. Они позволяют беспроводным узлам различных производителей понимать друг друга на уровне приложения. Стандартный профиль описывает стандартные команды и поведения конкретного устройства, например, блока управления системой климат-контроля или блока управления светильником.
Пример того, как может быть реализована система управления освещением с использованием стандартной библиотеки кластеров. Подробности мы разберем в другой раз, а сейчас достаточно понять следующее:
- у лампочки есть набор хранимых атрибутов (состояние — включена/выключена; уровень яркости)
- выключатель может отправлять команды для изменения доступных атрибутов лампочки
- при получении команды, лампочка принимает указанное состояние
В библиотеке кластеров указывается, какие атрибуты и команды являются обязательными для тех или иных устройств, а какие опциональными. Это позволяет реализовать стандартный интерфейс взаимодействия между ZigBee-устройствами.
С чего начать?
Радиомодуль
Для быстрого старта, когда нет желания или возможности разбираться с программным стеком ZigBee, стоит обратить внимание на модули ETRX357. Все модули имеют встроенную прошивку от производителя, которая позволяет работать с аналоговой и цифровой периферией, а также с сетевыми функциями, с помощью набора AT-команд. Для начала работы с радиомодулем достаточно подключить линии питания и линии TxD и RxD последовательного интерфейса UART.
Команда | Описание |
---|---|
AT+PANSCAN | Запуск сканирования на наличие ZigBee-сетей |
AT+EN | Создать сеть |
AT+JN | Присоединиться к сети |
AT+DASSL | Покинуть сеть |
AT+DASSR | Запрос удаленному узлу на выход из сети |
ATSXX? | Чтение содержимого регистра SXX |
В стандартную прошивку входит также ряд функций, которые могут вызываться по прерыванию от порта ввода/вывода, таймера/счетчика или при определенных событиях – подключение к сети или инициализация радиомодуля. Пример доступных функций:
- Переключение состояния порта ввода/вывода
- Отправка информации на узел сбора данных о состоянии 16 цифровых выводов радиомодуля, оцифрованных данных от подключенных датчиков и информацию об уровене напряжения питания
- Переход в активный режим или режим энергосбережения
- Открытие «прозрачного канала» с другим устройством в сети
Пару слов о «прозрачном канале». При переходе в данный режим вся информация, поступающая по интерфейсу UART на радиомодуль транслируется на интерфейс UART другого радиомодуля. Данный канал является двунаправленным, а также наследует преимущества технологии ZigBee – при наличии роутеров в сети не будет происходить потери данных в таком канале связи так как все пакеты «прозрачного канала» будут в случае необходимости автоматически ретранслироваться. За счет этого можно организовать канал связи с предельной дальностью в несколько километров.
Программная реализация стека ZigBee
Если стандартных возможностей прошивки не хватает, то можно использовать реализацию программного стека ZigBee от компании Silicon Labs – Ember ZNet PRO. Так как модули выполнены на базе микросхемы EM357, то переход от стандартной прошивки к разработке собственного приложения потребует лишь приобретение программатора-отладчика ISA3 с помощью которого можно делать как внутрисхемную отладку устройства, так и отлаживать приложение на сетевом уровне.
Справа на рисунке показан пример того, как отображаются данные о пути следования пакета и его расшифровка.
Для упрощения процесса создания приложения предоставляется компоновщик приложений, который для выбранной конфигурации ZigBee-устройства генерирует каркас приложения и создает функции, в которых разработчик должен дописать требуемую логику приложения.
Все утилиты входят в программный пакет Simplicity Studio, куда также входит демонстрационная версия стека Ember ZNet PRO. Поэтому можно прямо сейчас скачать и посмотреть как это работает.
После того, как вы скачали и установили пакет Simplicity Studio, проверьте, установлено ли Wireless-расширение.
Нас интересует пакет Wireless Products
Выберите утилиту Application Builder
Далее выбираем фреймворк. Для ZigBee-приложений это будет ZCL Application Framework v2. Важно: необходимо установить галочку для отображения демонстрационных встроенных стеков.
Выбираем Internal Stack
После этого можно начать работать либо с пустым приложением, либо выбрать из списка готовых приложений какое-нибудь и изучить его структуру.
После того, как вы скачали и установили пакет Simplicity Studio, проверьте, установлено ли Wireless-расширение.
Нас интересует пакет Wireless Products
После этого можно зайти в утилиту Network Analyzer и выбрать любую доступную демонстрационную запись сетевой активности.
Результат
Заключение
Надеюсь, что эта статья помогла понять, основные особенности беспроводной технологии ZigBee и вы сможете прикинуть в каких приложениях можно её использовать. Сама технология является полностью открытой и все её спецификации доступны для скачивания с сайта альянса ZigBee. А стандартная библиотека кластеров это настоящий язык взаимодействия между устройствами, которые окружают нас каждый день: устройства домашней автоматизации, системы безопасности, сенсорное оборудование и многое другое.
P.S. Для тех, кто не смог осилить текст, есть возможность посмотреть вводные видео по технологии ZigBee.
- Статья из Википедии – Bluetooth Low Energy
- Описание стандартизации уровня приложений на сайте альянса ZigBee
- ZigBee Cluster Library
- Техническое описание модуля ETRX357
- Список AT-команд модуля ETRX357
Автор: ЭФО