13 апр. 2010 г.

Чемоданчик для разработок в области сенсорных сетей - CC2530ZDK

Буквально вчера, в мои когтистые лапы попал весьма интересный набор железок - СС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 поставляется в аккуратном пластмассовом кейсе:

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








































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


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

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

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

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







































Устройства в сборе выглядят вот так:
После включения (все дальнейшие этапы описаны в прилагаемой к ZDK документации инициализируем главный маршрутизатор (подключен к ноутбуку) и подключим к нему второй маршрутизатор и пару оконечных устройств. Замечу, что несмотря на наличие в системе второго маршрутизатора, все устройства все равно подключаются к главному.
Теперь запретим новым устройствам подключаться к главному маршрутизатору (джойстик влево на плате маршрутизатора). Теперь оставшиеся три устройства подключаются ко второму маршрутизатору (синий на схеме):
Проведем небольшой эксперимент - отключим вторичный маршрутизатор и посмотрим как поведут себя устройства, подключенные к нему.
Устройства, подключенные к вторичному маршрутизатору больше не моргают на схеме, впрочем как и сам маршрутизатор. Зато к главному, несмотря на запрет новых устройств, подключились, оставшиеся без своего маршрутизатора, три оконечных устройства. Объясняется подобное поведение довольно просто - мы запретили принимать подключения от новых устройств, но подключения от устройств уже находящихся в сети мы не запрещали.
Через некоторое время, "мертвый" маршрутизатор и устройства, подключенные к нему, исчезнут со схемы:
Далее, у меня в планах портировать на SDK2.0 какую-нибудь маленькую ОС (наподобие FreeRTOS), стек протоколов Z-Stack и заставить SDK подключаться к главному маршрутизатору и общаться с ним.