К 2020 году на планете будет 50 миллиардов устройств из мира «интернета вещей» (IoT). Это предсказание Cisco, сделанное в 2013 году, начинает сбываться. Кроме умных холодильников с подключением к облаку и роботов-пылесосов, сейчас появляется довольно много полезных систем — прототипы с неносимой электроникой, которая помогает по косвенным признакам определить состояние человека, прототип умной парковки и системы управления автомобильным трафиком (Intel)… Возможно, IoT перевернет экономику. Когда-нибудь, возможно уже совсем скоро, нанороботы в человеческой крови, которые вводят точные дозы лекарства и следят за состоянием человека, будут скачивать обновление через беспроводное подключение к облаку. Какой дивный новый мир открывается перед хакерами :).

Концепция IoT
Концепция IoT
 

Погружение в мир машин

Сегодня я расскажу, как сделать свою первую сеть для IoT, мостик между миром окружающим и миром программ, и поделюсь методикой построения интернета вещей. Несмотря на то что некоторые небезосновательно считают это просто рекламным трюком (обычный М2М в новой обертке с подешевевшими компонентами и интернетом), системы с довольно мощными вычислительными ресурсами и малым энергопотреблением все больше завоевывают сердца пользователей, маркетологов и инженеров. Интернет вещей (англ. Internet of Things, IoT) — это концепция вычислительной сети физических объектов («вещей»), оснащенных встроенными технологиями для взаимодействия друг с другом или с внешней средой.

Реализация IoT
Реализация IoT

Реализации интернета вещей очень разнятся по протоколам, по типу сетей и по цене. Обычно общее в них — это набор сенсоров и (или) актуаторов (исполнительных устройств) с первичной сборкой и обработкой данных и пересылкой в хаб или gateway, где происходит дальнейшая обработка данных, отправка команд на сенсоры или пересылка в облако, на серверы (возможно, для работы с алгоритмами из мира Big Data, если данных очень много) и к пользователю.

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

 

План действий

Для нашего простого IoT подойдет схема считывания показаний измеренных физических величин (например, температура и влажность), простая их обработка и отправка клиенту. Завершающий этап — отображение данных на стороне клиента. В самом кратком виде наши действия можно описать тремя пунктами:

  1. Для начала нужно выбрать сам датчик или набор датчиков, с которых мы будем получать измеренные данные, и способ обработки полученных данных.
  2. Затем нужно определиться с тем, как мы будем общаться с датчиками, определить объемы данных и понять, как мы будем строить общение.
  3. Наконец, нам нужно найти подходящий клиент для нашей сети и описать работу с ним.
 

Выбор орудия

Роль датчика и предварительного обработчика будет играть SensorTag 2 (или SensorTag 2015) от Texas Instruments. Как вариант — Ардуино с BLE-шилдом или BLEduino.

Техасовский инструмент мне понравился ценой (примерно 3 тысячи рублей) и возможностями. Представь, что на этой платке размером 5 x 6,7 x 1,4 см есть целых десять разных сенсоров на любой вкус: датчик освещенности, цифровой микрофон, магнитометр, датчик влажности, барометр, акселерометр, гироскоп, геркон, температурный датчик и температурный датчик по ИК-излучению, и все это с возможностью передавать данные по BLE (Bluetooth low energy, малопотребляющий Bluetooth, Bluetooth Smart), или по 6LoWPAN, или по ZigBee, а скоро ожидается выход Wi-Fi SensorTag. Железный человек с Бэтменом обзавидовались бы. А еще SensorTag может быть брелоком, и у него красненький силиконовый чехольчик (приятно потрогать).


На этой платке размером 5×6,7×1,4 см есть целых десять разных сенсоров на любой вкус: датчик освещенности, цифровой микрофон, магнитометр, датчик влажности, барометр, акселерометр, гироскоп, геркон, температурный датчик и температурный датчик по ИК-излучению.

Внутри главной микросхемы СС2650, сердца SensorTag 2, крутится операционная система реального времени (TI-RTOS), которая вместе с фирменным BLE-стеком обеспечивает надежное управление, по сути, тремя разными микроконтроллерами:

  1. Ядро первого микроконтроллера — Cortex-M3 (на нем обычно выполняется написанное нами пользовательское приложение).
  2. Ядро второго — Cortex-M0 (отвечает за физический уровень, радиосвязь).
  3. Отдельный контроллер для датчиков (помогает быстро получать от них данные).

Основная идея заключается в том, чтобы уменьшить разряд батареи, включая и отключая разные ядра в нужное время. Например, если требуется радиосвязь, включаем «радиоядро», отключаем контроллер сенсоров, и наоборот. В результате этих ухищрений достигается снижение энергопотребления до 75% по сравнению с другими BLE-микросхемами. По документации от TI, если устройство отправляет данные раз в секунду, то оно проработает один год от батарейки-монетки CR2032. Если же устройство не будет слать данные, а будет лишь опрашивать датчики раз в секунду, то может продержаться десять лет!


Устройство работает один год от батарейки-монетки CR2032. А если устройство не будет слать данные, а лишь опрашивать датчики раз в секунду, то может продержаться десять лет!
 

Выбор способа общения

Почему BLE? Да потому, что он идеален для IoT:

  • Как ленивец из мультика, он очень крепко спит (мало потребляет энергии), просыпается, быстро передает данные и снова засыпает.
  • Андроидофоны с поддержкой BLE-стека сейчас есть у каждого, а именно его мы будем использовать в качестве хаба и перевалочного пункта (gateway) на пути к облаку.
 

Ключевые термины и понятия BLE

  • Профиль общих атрибутов (GATT), GATT-профиль — это общие спецификации для отправки и получения коротких фрагментов данных («атрибутов») во время BLE-связи. Все существующие BLE-устройства применяют профили на его основе.
    GATT разработан согласно Bluetooth SIG (ассоциация разработчиков стандартов и протоколов для Bluetooth) и определяет множество профилей для устройств с BLE.

  • Профиль — это определение того, как устройство работает в конкретном приложении. Обрати внимание, что устройство может реализовывать больше одного профиля. Например, устройство может содержать профили «монитор сердечного ритма» и «детектор уровня заряда батареи».
  • Протокол атрибутов (АТТ). GATT — это верхний слой в BLE-стеке над атрибутом протокола (АТТ). Также именуется GATT/АТТ. АТТ оптимизирован для работы на BLE-устройствах. С этой целью он посылает насколько возможно меньше байтов. У каждого атрибута есть уникальный универсальный идентификатор (UUID). Он представляет собой стандартизированный 128-битный строковый ID, который используется для однозначной идентификации информации. Атрибуты, передаваемые через АТТ, могут быть двух типов: характеристики и службы.
  • Характеристики — содержат одно значение и дескрипторы, описывающие значения характеристик. Характеристики можно рассматривать как тип.
  • Дескрипторы — определения атрибутов, которые описывают характерные значения. Например, дескриптор может указать удобочитаемое описание, диапазон для значения характеристики или единицы измерения, относящиеся к характеристике и ее значению.
  • Сервис (служба) — это набор характеристик. Например, можно создать сервис под названием «монитор сердечного ритма», который включает в себя такие характеристики, как измерение частоты сердечных сокращений. Найти список существующих GATT профилей и служб можно на bluetooth.org.

Теперь рассмотрим архитектуру GATT (General Attribute Profile):

  • GATT определяет структуры, с помощью которых идет обмен данными и в которых данные сохраняются;
  • сервисы оперируют данными, которые предоставляются с использованием характеристик;
  • клиент использует эти данные.
Архитектура GATT (General Attribute Profile)
Архитектура GATT (General Attribute Profile)
Структура стека TI Bluetooth low energy
Структура стека TI Bluetooth low energy
 

Обзор подходящих инструментов

Для начала работы с SensorTag 2 нужно установить среду разработки от TI — Code Composer Studio (CCS) или IDE IAR. Установщик CCS можно найти по следующей ссылке. Там тебе предложат зарегистрироваться, и затем можно будет скачать установщик (для Windows или Linux). IAR можно найти тут. Нужно выбрать IAR Embedded Workbench for ARM, и после регистрации тебе будет доступна версия без ограничений по размеру компилируемого кода, но с лицензией на месяц или с ограничениями (32 Кбайт компилируемого кода), но без лимита по времени использования. Существует и набор облачных инструментов TI, в числе которых среда CCS Cloud.

Рекомендую попробовать все перечисленные IDE, тем более что их не так много. Также для работы с нашим gateway/хаб-устройством (смартфон с OS Android) нужно установить Java Development Kit (JDK) 7 и Android Studio. Кроме того, рекомендую взять программатор-отладчик cc-devpack-debug. Эта платка не только может прошивать и отлаживать SensorTag 2, но и умеет работать с другими контроллерами от TI (например, СС3200 и СС1310).

Предположим, что у нас нет отладчика, и будем прошивать SensorTag 2 через Android- или iOS-устройство по воздуху. Как это сделать, расскажу дальше.

Еще полезно скачать и установить Bluetooth Low Energy Software Stack, или просто BLE-STACK. Нам пригодится стек версии 2.1.1. После установки пакета в папке ti на жестком диске ты найдешь разные полезные примеры, документацию и прошивки для ST2 под разные IDE. Также для удобной работы из-под Windows с визуализацией и парсингом служб, профилей и пакетов BLE можно установить настольное приложение TI BLE Device Monitor и SmartRF Studio или [BTool] (из состава пакета BLE-STACK).

RTFM: читаем документацию перед началом работы

Из полезной документации перед началом работы я советую почитать введение в разработку BLE-приложений CC2640 BLE Software Developers Guide.

На страничке, посвященной SensorTag 2, есть также достаточно много полезной информации про устройство. Например, там рассказано, как написать приложение к SensorTag 2 для смартфона c использованием JavaScript-фреймворка.

Горсть SensorTag
Горсть SensorTag
Отладчик cc-devpack-debug
Отладчик cc-devpack-debug

Для того чтобы понять, что мы делаем, советую зайти на страничку SimpleLink Academy. На ней в форме лабораторных работ и викторин дается введение в TI-RTOS (операционная система реального времени (RTOS) от TI, которая вместе с BLE-STACK является частью прошивки SensorTag), знакомство с ее понятиями и сущностями (например, есть рассказ о таких общих понятиях для всех RTOS, как семафор или задача). Следующие за этим лабораторные работы посвящены как раз Bluetooth Smart:

  • Фундаментальные концепции устройства BLE-стека.
  • Создание своего кастомного профиля в BLE.
  • Создание простой сети.
  • Работа с другой IDE (Sensor Controller Studio) и пример для SensorTag — снятие данных по шине I2C от датчика освещенности.

Да, чуть не забыл: можно и не менять прошивку SensorTag 2, если интересно только программирование на стороне Android. Скачать исходники для Android всегда можно c Git-репозитория по ссылке. Это же приложение есть и на Google Play. Так что можешь просто экспериментировать на Android-стороне.

 

Работа с железом

Для запуска SensorTag (если мы это делаем в первый раз) нужно вытащить пленку, чтобы запитать плату от батарейки. В дальнейшем включать/выключать устройство можно, нажимая на кнопку сбоку с гравировкой включения (не узнать ее может только совсем дикий человек, который не видел даже телевизора :)).

Итак, мы установили CCS. Запустим ее. Выберем рабочую область. Работа с CCS происходит так же, как и в других Eclipse-подобных средах.

  1. Откроем TI Resource Explorer через пункт меню View -> Resource Explorer (Examples).
  2. Откроем папку SimpleLink Academy -> Bluetooth Smart.
  3. Выберем проект Project Zero -> СС2650DK SensorTag -> ProjectZeroApp.
  4. Нажмем кнопку Import the example project into CCS в правой части Resource Explorer. Дальнейшие шаги описаны в этом окне, и при выполнении шагов рядом с их значками появляется зеленая галочка. После этого в Project Explorer слева и в рабочей области должны появиться две папки — два проекта (ProjectZeroApp_CC2650STK и ProjectZeroStack_CC2650STK). Если ProjectZeroStack_CC2650STK не добавился, нужно добавить его вручную. В этих примерах BLE-стек и проект с самим нашим приложением связаны и импортируются, компилируются вместе. В других средах и примерах, не из SimpleLink Academy (например, из пакета BLE SDK), нужно добавлять стек и приложение самому.
  5. Если у тебя есть cc-devpack-debug, можно прошить SensorTag им. Необходимо сначала подключить devpack к ПК, а затем — SensorTag к devpack. Сам процесс несложен и описан в SimpleLink Academy. Сc-devpack-debug пригодится и для возвращения исходной прошивки-примера, если что-то пошло не так.
  6. Компилируем проект, нажав сочетание клавиш Ctrl + B или на иконку молотка на панели.
  7. Отладка проекта осуществляется нажатием клавиши F11 или нажатием на иконку зеленого жучка.
  8. Завершение отладки — Ctrl + F2 или нажатие на иконку красного квадрата.
  9. Нажатие F8 — запуск/остановка, продолжение отладки и выполнение программы.
  10. После начала выполнения программы и в случае, если у нас есть подключенный отладчик, в терминале последовательного порта появится служебная информация об инициализации трех BLE-служб:
    1. состояние светодиода (светит или нет);
    2. состояние кнопки (нажата или нет);
    3. состояние данных (есть у нас данные или нет).

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

В отсылаемый широковещательный пакет могут быть включены и полезные данные, например измеряемая датчиком температура (режим Advertisement). Если в терминале ничего не отображается, можно попробовать запустить SmartRF Flash Programmer v2 и оживить с его помощью устройство.

Ура, промежуточный результат: мы сделали Bluetooth-маячок (почти iBeacon :)). Пока он только посылает в мир состояние светодиода и кнопки. Теперь можно запустить приложение наподобие BLEScanner на телефоне и прочитать атрибуты (данные) устройства.

Импорт проектов в CCS
Импорт проектов в CCS
Запуск и отслеживание служб в терминале
Запуск и отслеживание служб в терминале
 

Соединение и навигация по службам

Для того чтобы взаимодействовать с BLE-устройствами, нам нужно будет использовать что-то, что выступало бы в качестве центрального устройства по отношению к нему. В нашем случае это будет Android-смартфон (с версией не ниже 4.3, я испытал Nexus 5X и Xperia C3), но может быть и ПК.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

WWW: TLDR pages — замена справке man, показывающая только самое важное

Что ты делаешь каждый раз, когда набираешь команду man в Linux или Unix? Правильно: тяжело…