Буквально вчера, в мои когтистые лапы попал весьма интересный набор железок — СС2530 ZigBee Development Kit. Этот набор можно применять для разработки приложений, которые используют возможности сенсорных сетей.

Также, Texas Instruments предоставляет на бесплатной основе стек протоколов Z-Stack, который совместим с ZigBee и который используется в CC2530.

Вначале, я вкратце объясню что такое сенсорные сети, ZigBee и прочие непонятные вещи.

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

Физический и канальный уровни для подобных сетей описываются в стандарте IEEE 802.15.4, тогда как остальные уровни описываются в ZigBee — стеке протоколов высокого уровня.

Устройства в сенсорной сети делятся на три типа:

  • Главный маршрутизатор (FFD — Fully Function Device) — главное устройство, с которого начинает расти сеть. Также, может использоваться для передачи собранных данных "на сторону", например в обычный компьютер пользователя.

  • Вспомогательные маршрутизаторы (тоже FFD) — тут все понятно. Эти устройства могут подключаться к главному маршрутизатору и друг к другу и обеспечивать доставку сообщений от отправителя к получателю.

  • Оконечное устройство (RFD — Reduced Function Device) — эта железяка обеспечивает сбор нужной информации и отправку ее получателю через сенсорную сеть. Оконечное устройство подключается к маршрутизатору для передачи данных и не может выполнять функции маршрутизатора.

Рассмотрим теперь, что входит в наш Development Kit и попробуем создать простейшую сенсорную сеть, передающую температуру датчиков с оконечных устройств на главный маршрутизатор и далее на мой ноутбук.

Сам ZDK поставляется в аккуратном пластмассовом кейсе:

CC2530 ZDK Case

Внутри есть папка с документацией и два отделения с платами, антеннами и прочим, что впоследствии будет объединено в сенсорную сеть:

CC2530 ZDK Docs
CC2530 ZDK Cables
CC2530 ZDK Boards

Радиоинтерфейс работает на частоте 2.4 ГГц, поэтому антенны модулей сети крайне миниатюрны. Впрочем связь достаточно дальнобойна (по сравнению с Bluetooth’ом) — в условиях исторического здания на Васильевском острове связь терялась, когда оконечные устройства были на 1-1,5 этажа выше/ниже своего маршрутизатора. В условиях прямой видимости связь была стабильна на расстоянии 15-20 метров.

CC2530 Antenna

Сами радиомодули также не выделяются своими размерами:

CC2530 Board

Всего таких антенн и модулей семь — по числу устройств: 2 маршрутизатора и 5 оконечных устройств. Перед началом работы нужно соединить все антенны и модули вместе и пристыковать их к элементам сети — то еще занятие: будет особенно интересно тем, кто в детстве не наигрался с конструктором.

CC2530 Radio boards

Маршрутизатор (рядом для сравнения лежит нож Victorinox Outrider):

CC2530 FFD

Оконечное устройство (способно мерять температуру, имеет пару кнопок, джойстик и набор светодиодов):

CC2530 RFD

Каждая плата имеет отсек для двух батареек AA. Для маршрутизаторов вроде как предусмотрено питание от сети или от USB.

Batteries for FFD
Batteries for RFD

Устройства в сборе выглядят вот так:

Assembled FFD
Assembled RFD
Assembled devices

После включения (все дальнейшие этапы описаны в прилагаемой к ZDK документации) инициализируем главный маршрутизатор (подключен к ноутбуку) и подключим к нему второй маршрутизатор и пару оконечных устройств. Замечу, что несмотря на наличие в системе второго маршрутизатора, все устройства все равно подключаются к главному.

Simple network

Теперь запретим новым устройствам подключаться к главному маршрутизатору (джойстик влево на плате маршрутизатора). Теперь оставшиеся три устройства подключаются ко второму маршрутизатору (синий на схеме):

Main FFD connections forbidden
Devices and notebook

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

Secondary FFD disabled

Устройства, подключенные к вторичному маршрутизатору больше не моргают на схеме, впрочем как и сам маршрутизатор. Зато к главному, несмотря на запрет новых устройств, подключились, оставшиеся без своего маршрутизатора, три оконечных устройства. Объясняется подобное поведение довольно просто — мы запретили принимать подключения от новых устройств, но подключения от устройств уже находящихся в сети мы не запрещали.

Через некоторое время, "мертвый" маршрутизатор и устройства, подключенные к нему, исчезнут со схемы:

Secondary FFD and connected to it RFDs disappeared

Далее, у меня в планах портировать на SDK2.0 какую-нибудь маленькую ОС (наподобие FreeRTOS), стек протоколов Z-Stack и заставить SDK подключаться к главному маршрутизатору и общаться с ним.

sensor network