Интро

В прошлой статье мы собрали сеть из датчиков и андроидофона с использованием BLE (Bluetooth Low Energy, Bluetooth Smart). Мы поюзали SensorTag 2 от Texas Instruments и ознакомились с характеристиками и профилями BLE. Узнали мы и то, как можно принимать и передавать данные через BLE на Android с железа. Сегодня полученные SensorTag’ом данные об окружающей среде свяжем через смартфон c небольшим облачным сервисом. Так сказать, добавим слово Internet в аббревиатуру IoT.

IoT с использованием облака
IoT с использованием облака
Индустриальный IoT
Индустриальный IoT
 

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

  1. Сначала мы принимаем данные от BLE-устройства (SensorTag 2) на телефон.
  2. Затем мы должны передать данные с нашего андроидофона в облако.
  3. И наконец, сделать облачный веб-сервис, для того чтобы можно было следить за показателями нашего SensorTag в любой интернетизированной точке мира. В итоге у нас должна получиться система, представленная на рис. 1.
Рис. 1. Архитектура системы
Рис. 1. Архитектура системы
 

Обзор технологий

У нас уже есть полученные от SensorTag 2 данные, и в приложении SensorTagApp на андроидофоне мы можем наблюдать графики наших характеристик (температура, влажность, давление и прочее). Теперь можно отправить данные в облако, просто сдвинув переключатель Push to Cloud на экране нашего приложения. Мы можем перейти по этой ссылке или нажать на ссылку Open in browser в приложении. После этого нас перекинет на тест-страничку от IBM, на которой нужно будет ввести MAC-адрес (указан в приложении в поле Device ID).

Теперь нажимаем кнопку Go на нашем SensorTag и с радостью наблюдаем показания сенсоров уже в интернете, в облачном сервисе — правда, пока не в нашем. Не беспокойся — до «нашего» облака мы сегодня тоже долетим, просто перед тем, как двигаться дальше, нам надо понять одну вещь: что именно происходит внутри нашего приложения, когда мы отправляем в интернет данные, поступившие на телефон по BLE.
Для этого мы используем протокол MQTT и формат передачи данных JSON.

Рис. 2. Приложение SensorTagApp
Рис. 2. Приложение SensorTagApp
Рис. 3. MAC-адрес (Device ID) SensorTag
Рис. 3. MAC-адрес (Device ID) SensorTag
 

Протокол MQTT

MQTT (Message Queue Telemetry Transport) — упрощенный протокол сетевого уровня для обмена сообщениями между устройствами. Этот протокол работает поверх стека TCP/IP и разработан для преодоления проблем, связанных с подключением быстро растущего числа датчиков, микрокомпьютеров, приводов, телефонов, планшетов. В настоящее время MQTT — наиболее распространенный протокол для организации IoT-инфраструктуры.

Рис. 4. Описание протокола MQTT
Рис. 4. Описание протокола MQTT

MQTT устроен по принципу издатель/подписчик(publisher/subscriber): издатель (устройства типа publishers) отправляет сообщение, которое публикуется в централизованном сервисе (брокере сообщений), а подписчик (устройства типа subscriber) получает сообщение из брокера. Для использования брокера MQTT необходимо пройти процедуру подписки на определенные темы публикуемых сообщений.

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


Стандартные порты для MQTT — это порт 1883 и порт 8883 для MQTT через SSL.

Подробнее о протоколе можно узнать на официальной страничке MQTT.

 

Формат JSON

JSON (JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми. Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.

JSON-текст представляет собой (в закодированном виде) одну из двух структур:

  1. Набор пар ключ — значение. В различных языках это реализовано как объект, запись, структура, словарь, хеш-таблица, список с ключом или ассоциативный массив.
    Ключом может быть только строка (регистрозависимая: имена с буквами в разных регистрах считаются разными), значением — любая форма.
  2. Упорядоченный набор значений. Во многих языках это реализовано как массив, вектор, список или последовательность.

Это универсальные структуры данных: как правило, любой современный язык программирования поддерживает их в той или иной форме. Они легли в основу JSON, так как он используется для обмена данными между различными языками программирования.

Вот данные, полученные от SensorTag в формате JSON, которые мы передаем в облако:

{ "topic": "iot-2/type/\"st-    app\"/id/b0b448bb0b54/evt/status/fmt/json", "payload": { "d": { "gyro_x":     "0,00", "compass_y": "0,00", "humidity": "60,08", "acc_y": "0,00",     "object_temp": "27,06", "acc_x": "-0,00", "light": "68,60",             "gyro_z": "0,00", "compass_x": "0,00", "ambient_temp": "24,47",     "air_pressure": "853,50", "gyro_y": "0,00", "compass_z": "0,00", "acc_z":     "-0,00" } }, "deviceId": "b0b448bb0b54", "deviceType": "\"st-app\"",     "eventType": "status",        "format": "json", "_msgid":     "c33238fd.3ccdc8" }
 

Android-клиент

Наиболее распространенной реализацией протокола MQTT является библиотека Paho MQTT. Библиотека реализована для наиболее популярных языков программирования: C/C++, Java, JavaScript, Python, Lua, Go, C#. Ее мы и используем в приложении.

В нашем приложении в классах IBMIoTCloudProfile и IBMIoTCloudTableRow содержится функциональность для связи с облаком. Посмотрим же на код поближе:

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

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

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

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

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


Комментарии

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

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

Check Also

Как сделать игру. Выбираем движок и пишем клон тех самых «танчиков»

С каждым днем игры становятся все сложнее и навороченнее. Быть инди, а точнее соло-разрабо…