Назад в библиотеку
ZigBee-модули XBee: вопросы практического применения
Автор: Пушкарев Олег
Источник: Беспроводные технологии №3'2009
Радиомодули XBee компании Digi относятся к классу ZigBee-модулей с уже предустановленным программным обеспечением, благодаря которому значительно сокращаются сроки разработки конечного изделия и упрощается процесс передачи данных. При этом предполагается, что модуль, в большинстве случаев, работает под управлением внешнего хост-процессора. В то же время производитель допускает загрузку в модуль собственного приложения пользователя, которое при этом должно самостоятельно взаимодействовать со стеком ZigBee, подключаемым на этапе компиляции программы. В статье рассмотрены практические вопросы, возникающие у разработчика на этапе оценки применимости технологии ZigBee для тех или иных задач, а также влияние различных настроечных параметров модулей XBee на показатели работы конечной ZigBee-системы.
Применение модулей XBee без внешнего микроконроллера
В данной статье речь пойдет исключительно о модулях XBee Series 2 (рис. 1),
то есть полноценных ZigBee-модулях, поддерживающих спецификацию ZigBee-2007 и
позволяющих построить mesh-сеть, включающую спящие и мобильные устройства.
Основной режим работы модулей XBee — это работа под управлением внешнего
микроконтроллера, управляющего модулем с помощью простых AT-команд или
упорядоченных структур данных (режим API) [1].
Компания Digi разработала свой собственный фирменный (proprietary) ZigBee-профиль, позволяющий организовать прозрачную передачу данных между любыми узлами ZigBee-сети и предоставляющий доступ к цифровым и аналоговым портам ввода/вывода на удаленных узлах, работающих без хост-процессора. Какие задачи способен выполнять XBee-модуль при использовании его без внешнего микроконтроллера? Это, прежде всего, работа с внешними датчиками, которые выдают значения параметров в виде аналогового напряжения или имеют выходы с двумя состояниями — «включено/выключено». Модуль XBee имеет мультиплексированные аналоговые (4) и цифровые (12) порты. Для управления внешними устройствами, кроме цифровых выходов, можно использовать 2 вывода ШИМ (10 бит). Также XBee-модуль напрямую сопрягается с любыми устройствами, имеющими UART-интерфейс. При самостоятельной работе XBee-модуль может передавать данные по заданному расписанию, отправляя их через определенные промежутки времени, или по изменению состояния сигнала на цифровом порту. Эти варианты применения наиболее просты и требуют лишь общего понимания логики работы ZigBee-сети. Рассмотрим потенциальные варианты применения модуля XBee без использования внешнего процессора.
- «Тревожная кнопка», или датчик проникновения с автономным питанием. XBee-модуль настраивается как конечное спящее устройство с пробуждением один раз в 10 (20, 30…) секунд для отправки сообщения о состоянии батареи. Это же сообщение является индикацией работоспособности устройства и нахождения его в зоне действия сети. При нажатии на кнопку, подключенную к выводу 20, модуль отправляет идентификационный пакет, который принимают координатор и все роутеры в сети, они, в свою очередь, должны работать в режиме API. Выбор именно этого типа индикации повышает вероятность успешной доставки сообщения.
- Активная радиочастотная метка с батарейным питанием для медленно перемещающихся объектов. XBee-модуль работает как конечное спящее устройство и программируется на периодическую выдачу сообщения, отправляемого координатору. Для определения местоположения необходимо разместить по площади требуемое количество роутеров, которые будут выступать в качестве опорных точек. Местонахождение объекта определяется по адресу родительского узла, через который модуль отправляет очередное сообщение. При работе в режиме API 16-битный адрес родительского узла включен в отправляемый пакет. Метод обеспечивает грубую точность позиционирования, определяемую радиусом действия каждого роутера, который составляет десятки-сотни метров для маломощной версии.
- Удаленное включение до 8 независимых нагрузок и ШИМ-управление по 2 каналам. Для снижения задержек модуль XBee работает как роутер в режиме API, задействуются цифровые порты. Отдавать команды на управление нагрузками можно с любого модуля, подключенного к данной ZigBee-сети.
- Удаленное измерение температуры, влажности, освещенности или выдача любых других параметров, предоставляемых измерительным датчиком в виде напряжения. Оцифрованные данные (10 бит) могут отправляться периодически, либо по командезапросу с любого узла сети.
- Управление любыми объектами с UART-интерфейсом. Модуль XBee работает в прозрачном режиме (управление AT-командами). Данный способ не требует внесения каких-либо изменений в программное обеспечение существующего оборудования.
Для всех перечисленных примеров время, которое потребуется на разработку узла сетевой передачи данных, будет измеряться неделями или даже днями. Необходимо лишь выбрать необходимые параметры и сохранить настройки в энергонезависимой памяти используемых XBee-модулей. При автономном использовании модули XBee нельзя применять в тех устройствах, где требуется пусть даже минимальнаπ? обработка данных непосредственно на удаленном объекте. Внутренняя прошивка модулей не предоставляет возможностей по подсчету числа импульсов, накоплению во внутренней памяти аналоговых отсчетов, невозможен также учет реального времени и т. п. Для решения подобных задач необходимо применение внешнего микроконтроллера. Положительной стороной такого решения является то обстоятельство, что мощность и разрядность микроконтроллера определяется исключительно пользовательским приложением: все сетевые задачи берет на себя XBee-модуль. Например, для построения беспроводного счетчика потребления воды будет достаточно 8-битного маловыводного микроконтроллера стоимостью 20–30 рублей. При этом разработчик может выбрать хорошо известный ему процессор и использовать свои предшествующие программные наработки. Для управления модулем XBее с помощью внешнего микроконтроллера рекомендуется включить режим API, так как именно он обеспечивает доступ ко всем ресурсам модуля. При работе модуля в режиме API можно создавать сетевые узлы ZigBee, работающие с публичными профилями, утвержденными ZigBee-альянсом. В последнем случае XBee-модуль будет совместимым с ZigBee-решениями других производителей. Для использования модуля XBее на 100% разработчику необходимо изучить техническое описание модуля и набор всех управляющих команд, которое занимает 140 страниц документации [2]. Доступный русскоязычный перевод [3], хоть и относится к уже устаревшей версии (ZNet 2.5), все же может оказаться полезным, так как большое количество описанных команд работает без изменений и в более новых версиях firmware.
Внешний процессор или загрузка приложения?
В качестве альтернативы радиомодулям с предустановленным ПО, можно построить ZigBee-узел на основе однокристального решения (микроконтроллер+трансивер). Это предполагает загрузку и запуск конечного приложения на том же процессоре, где «крутится» ZigBee-стек. Выгоды такого решения очевидны — это, как правило, меньшая стоимость и меньшая занимаемая площадь печатной платы. Однако у такого похода есть и недостатки — это сложность программирования и длительное время разработки. Возьмем, для примера, используемый в модулях XBee ZB стек EmberZNet 3.x ZigBee-PRO. Описание его API-функций изложено в 922-страничном англоязычном документе [4]. Не исключено, что для понимания каких-то нюансов вам придется заглянуть в оригинальную спецификацию ZigBee [5, 6], а это еще 604+119 страниц технического текста. Если добавить к этому время на изучение архитектуры используемого в SoC процессора, то становится ясно, что разработка затянется на долгие месяцы, если вообще будет доведена до конца. Наверное, поэтому ведущие производители ZigBee-микросхем включили в свою линейку так называемые ZigBee-сопроцессоры, то есть кристаллы, включающие в себя ZigBee-стек и предназначенные для работы под управлением внешнего микроконтроллера.
По идеологии применения радиомодуль XBee в чем-то похож на
ZigBee-сопроцессоры EM260 компании Ember. Оба этих решения обеспечивают доступ
к ZigBee-сети с помощью предоставляемого набора управляющих команд. При этом
приложение пользователя избавлено от всех задач, связанных с работой
ZigBee-сети. Микросхема EM260 стоит меньше, чем радиомодуль XBee, и
предоставляет доступ к ZigBee-функциям нижнего уровня. Однако применение этой
микросхемы требует определенных знаний в области СВЧ и наличие дорогостоящего
измерительного оборудования для проверки радиочастотных параметров конечного
изделия, куда запаивается этот трансивер. Кроме этого, модули ZigBee предлагают
разработчику существенно более простой интерфейс управления. Подробную
информацию о различиях между API для модулей XBee и API для EM260 можно найти в
документе [7].
Компания Digi предоставляет возможность загрузки в XBee своего приложения вместо встроенного firmware. Это можно осуществить двумя способами — с помощью специального программатора через контактные площадки на верхней стороне модуля (рис. 2) либо через UART. При использовании своего ПО нужно следить за тем, чтобы случайно не уничтожить содержащийся в модуле оригинальный загрузчик Digi. В противном случае восстановить прошивку Digi будет нельзя. В документации [2] приводится таблица соединений микросхемы EM250 и рекомендации по инициализации аппаратных ресурсов модуля.
Мифы и реальность
Несмотря на то, что с момента появления ZigBee прошло уже 5 лет, технология
все еще находится на начальном этапе своего развития. С одной стороны, данную
технологию поддерживают ведущие производители полупроводников, за прошедшие
годы спецификация ZigBee была существенно переработана, появились публичные
профили для решения достаточно важных и востребованных задач, среди которых
домашняя автоматизация, управление потреблением энергии, автоматизация
производства. С другой — на полках магазинов не видно ZigBee-устройств.
Говорить о коммерческом успехе технологии пока рано. Число промышленных
производителей конечных ZigBee-продуктов исчисляется десятками, мало и
количество крупных инсталляций ZigBee-систем. Причин несколько — относительная
дороговизна решения, высокая трудоемкость процесса разработки и, отчасти,
существующие мифы и завышенные ожидания разработчиков и потребителей. Часто
встречается заблуждение, что на базе ZigBee можно строить сети масштаба города,
передавать звук (и даже видео!), создавать сети из десятков тысяч устройств и
т. п. Для каждого постулата такого рода есть некое фактическое основание, тем
не менее это ошибочные представления о возможностях технологии на данном
этапе.
Можно ли построить ZigBee-сеть из десятков тысяч устройств?
В теории — да. Для сетевого адреса отводится 2 байта, что обеспечивает
адресную емкость для 65 535 устройств. Но спецификация ZigBee определяет ряд
других параметров (косвенно связанных с максимальным числом устройств в сети)
таким образом, что реально можно говорить не более чем о нескольких сотнях
устройств в одной сети. При числе устройств более 300 существенно возрастает
служебный трафик и, соответственно, падает пропускная способность. Главные
ограничивающие факторы для большого количества узлов — это затраты на
разрешение возникающих конфликтов при случайном распределении адресов, снижение
пропускной способности из-за растущей служебной активности, большие задержки
при обнаружении устройств и прокладке маршрутов, ограничения ОЗУ для хранения
больших таблиц маршрутизации.
Передача звука и видео
Скорость передачи данных в радиоканале в ZigBee составляет 250 кбит/с, но,
несмотря на это, реальная скорость передачи полезных данных может быть меньше
на порядок. Главная же проблема, возникающая при попытке передачи звука через
ZigBee-сеть с ретрансляцией сообщений, — это возникающие задержки, которые
неизбежны и непредсказуемы. Величина этих задержек достигает нескольких секунд,
что делает передачу «живого» звука абсолютно нереальной, если мы говорим о
mesh-сети. Только на нижнем уровне (802.15.4.) достижимы реальные скорости (до
115 кбит/с) [8], позволяющие передавать звуковой поток в цифровом виде.
Построение сетей масштаба города
Максимально разумное число ретрансляций пакета в сети ZigBee не должно
превышать 10–30 хопов. С учетом того, что вне помещений максимальная
разрешенная мощность составляет 10 мВт [9], одной ZigBee-сетью можно покрыть
площадь только одного небольшого района.
Использование ZigBee для построения сети быстродвижущихся объектов
(автомобили, самолеты)
Несмотря на то, что ZigBee предусматривает наличие мобильных конечных
устройств, о мобильности можно говорить лишь условно. Время вхождения
устройства в сеть или переключения между роутерами составляет несколько
секунд.
Таблица 1 — Данные для различной конфигурации сети
Число ретрансляций | Шифрование | Направление передачи | Скорость, кбит/c |
1 |
Нет | Роутер — роутер | 35 |
1 |
Да | Роутер — роутер | 19 |
1 |
Нет | Роутер — конечное устройство | 25 |
1 |
Да | Роутер — конечное устройство | 16 |
1 |
Нет | Конечное устройство — роутер | 21 |
1 |
Да | Конечное устройство — роутер | 16 |
4 |
Нет | Роутер — роутер | 10 |
4 |
Да | Роутер — роутер | 5 |
Пропускная способность сети и задержки
При разработке mesh-сети нужно правильно задавать ключевые параметры стека,
которые будут влиять на пропускную способность сети и возникающие в ней
задержки. Довольно сложно ответить на вопрос о конкретных цифрах задержек и
максимальной скорости передачи данных, так как подобные значения лучше всего
проверять на практике — в процессе тестовых проверок в условиях, близких к
реальным. Пропускная способность ZigBee-сети зависит от топологии сети,
направления передачи информации, уровня сигнала и даже соотношения числа
роутеров и конечных устройств. Для XBee-модулей ZB максимальная пропускная
способность примерно равна 35 кбит/с. В таблице 1 приведены примерные цифры для
различной конфигурации сети, полученные экспериментальным путем. При измерении
пропускной способности пересылалось 100 000 байт при высоком уровне сигнала.
Случаев потерь пакетов и перепрокладки маршрута отмечено не было.
Несмотря на относительно невысокие скорости передачи, это не является
критичным параметром для большинства тех применений, для которых, собственно, и
разрабатывался этот стандарт. В системах сбора информации с беспроводных
датчиков объем полезных данных составляет десятки байт: такой объем не
предъявляет высоких требований к средней скорости передачи данных. Однако,
кроме скорости передачи, в сетях с mesh-топологией данные будут доходить до
узла сбора информации с переменной задержкой, которую необходимо учитывать при
принятии решения о недоставке сообщения и, соответственно, повторных попытках
передачи. Простая отдача команды на пересылку пакета приводит в действие
сложный алгоритм работы стека ZigBee (рис. 3). В модулях XBee ZB (согласно
спецификации ZigBee) широко используются задержки случайной величины — как в
алгоритме доступа к среде (CSMA-CA), так и при формировании ответа каждого узла
на команду обнаружения узлов. Рассмотрим основные параметры временных задержек
для различных типов сообщений.
При подаче команды на обнаружение всех узлов в сети (ND) в передаваемом пакете присутствует максимальная временная задержка, которую могут использовать узлы сети при отправке ответа. Эта задержка необходима для того, чтобы все узлы сети успели отправить ответные сообщения и эти сообщения не мешали друг другу. Данная задержка устанавливается командой NT и по умолчанию равна 6 секундам. При подаче запроса ND не следует предпринимать никаких действий, пока не пройдет время NT. Чем меньше узлов в сети, тем меньше может быть значение NT. Минимально допустимое время NT — 3,2 с. Не рекомендуется рассылать широковещательные сообщения чаще, чем 1 раз в 8 секунд.
При отправке сообщения на удаленный узел используется параметр NH
(максимальное число ретрансляций) для установки максимального времени ожидания
ответа. По умолчанию значение NH = 0_1E, что эквивалентно 1,6 секунды на одну
попытку отправки. С учетом того, что время передачи пакета между 2 соседними
узлами составляет 50 мс и еще 100 мс необходимо на обработку данных,
установленное по умолчанию значение NH определяет максимальную дальность в 8
ретрансляций (9 модулей в ряд). Если модуль отправляет сообщение и не получает
ответа от удаленного узла за 1,6 секунды, то он автоматически делает еще 2
попытки. Таким образом, общее время, отводимое стеком на доставку (с
подтверждением) одного сообщения, будет 4,8 секунды для сети глубиной в 8
ретрансляций. Если же сообщение отправляется на спящий конечный узел, то ко
времени доставки еще необходимо добавить время сна (параметр SP), длительность
которого может достигать десятков секунд.
Последние обновления
Недавно компания Digi сообщила о новой версии внутреннего программного
обеспечения (firmware) для модулей XBee ZB. Firmware v.2.x.6.x предоставляет
разработчику больше возможностей по созданию недорогих и надежных беспроводных
приложений. ПО построено на базе стека EmberZNet 3.3.1 ZigBee-PRO и содержит
ряд новых опций:
- Доступ к портам ввода/вывода на всех типах устройств (команды IS, IR, IC).
- Обновление данных об уровне сигнала (RSSI) при получении подтверждения о доставке на уровне приложения (APS acknowledgment).
- Сетевой сторожевой таймер (до 17 дней) позволяет «перезапустить» роутер при проблемах с передачей данных в сети.
- Передача фрагментированных сообщений — автоматическая обработка длинных сообщений, которые превышают стандартный пакет данных.
- Роутеры могут выступать в качестве конечных спящих устройств.
- Поддержка маршрутизации «многие к одному» (many-to-one route).
- Возврат кода ошибки при невозможности отправки удаленной API-команды.
- Оптимизация запросов от конечных устройств для повышения пропускной способности.
- Гибкая настройка параметров UART (четность, число стоп-битов).
Заключение
При выборе решения для сети ZigBee разработчик должен четко понимать границы применимости данной технологии и правильно оценивать предстоящий объем работы. Использование радиомодулей XBee c собственным ZigBee-профилем Digi позволяет строить узлы ограниченной функциональности без применения внешнего микроконтроллера. Встроенный ZigBee-стек и простота настройки модулей существенно сокращают как время разработки, так и требования к квалификации разработчика. При использовании внешнего микроконтроллера на базе модулей XBee ZB можно производить устройства любой сложности, поддерживать публичные ZigBee-профили и создавать продукты, совместимые с ZigBee-устройствами других производителей.
Литература
- Пушкарев О. ZigBee-модули XBee: новые возможности // Беспроводные технологии. 2008. № 4.
- Описание XBee/XBee-PRO ZB RF Modules (www.digi.com).
- Русскоязычное описание XBee ZNet 2.5 (http://www.compel.ru/images/news/2008042203/XBee_ZNet_2.5_rus.pdf).
- EmberZNet API Reference: For the EM250 SoC Platform (www.ember.com).
- ZigBee Specification, Document 053474r17 (www.zigbee.org).
- ZigBee Document 08006r03, ZigBee-2007 Layer PICS and Stack Profiles, Revision 03. (www.zigbee.org).
- Comparing the Digi XBee API with EmberZNet EM260 API (http://www.compel.ru/images/news/2009080501/wp_xbeeapivsember.pdf).
- Maximizing Throughput in ZigBee Wireless Networks through Analysis, Simulations and Implementations (http://www.utdallas.edu/~rxb023100/pubs/ZigBee_Throughput.pdf).
- О выделении полос радиочастот устройствам малого радиуса действия. Решение ГКРЧ № 07-20-03-001 (http://minkomsvjaz.ru/ministry/170/174/3410.shtml).