В прошлом году компания Microsoft анонсировала облачный бэкенд для управления умными приборами и интегрированной электроникой. Azure IoT Hub позволяет с минимумом программирования настраивать взаимодействие между устройствами и встраивать его в свои проекты на основе Azure. Чтобы посмотреть, как это работает, мы разберем простую задачу — отправку в облако показаний датчика, подключенного к контроллеру Arduino.

Итак, перед нами простейший прибор. Он состоит из контроллера, небольшой макетной платы, фоторезистора (датчика света) и стабилизирующего резистора. В качестве контроллера используется Genuino MKR1000 со встроенным Wi-Fi — если хочешь такой же, то он обойдется в 35 долларов. Питается плата от micro-USB.


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


Девайс шлет данные в IoT Hub, где, пройдя через сервис Stream Analytics, они попадают в базу данных и обрабатываются при помощи Power BI. Со всеми этими вещами мы разберемся чуть позже, а пока давай начнем с основ.

INFO

В конце статьи есть исходники получившегося проекта. Не забудь посмотреть их, если планируешь сделать что-то похожее.

IoT Hub официально переводится на русский как «Центр интернета вещей». Он может как получать данные с устройств, так и отправлять им сообщения или команды.

Кроме IoT Hub, взаимодействовать с устройствами может и еще один сервис под названием Event Hub («концентратор событий»). Он отличается большей пропускной способностью, но шлет сообщения только в одном направлении — от устройства в облако. IoT Hub поддерживает такие протоколы, как MQTT, MQTT через WebSocket, AMQP, AMQP через WebSocket и HTTP. Event Hub поддерживает AMQP, AMQP через WebSocket и HTTP. Подробнее о разнице между хабами и о том, как использовать их вместе, можешь прочитать на сайте Microsoft. Мы же изучим IoT Hub (он поинтереснее).

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

 

Создание IoT Hub

Нам надо создать IoT Hub на одно устройство. До 8000 сообщений в день и до 0,5 Кбайт на сообщение сервис бесплатен, и нам этого пока что за глаза хватит. Название можешь задать любое.

INFO

У IoT Hub есть возможность получать с устройства файлы. Иногда это используют в качестве легального хака. Данные с нескольких девайсов передаются одному главному устройству, которое сохраняет их в текстовый файл определенного вида и отправляет в облако.



После создания нам необходимо зайти в политики общего доступа.


Копируем строку подключения — это первичный ключ. Он нам еще понадобится.


 

Создание device-twin и получение SAS

Теперь нам нужно создать виртуальное устройство в облаке Azure, которое будет соответствовать нашему реальному устройству. По-английски это называется device-twin, что означает устройство-двойник. Создать его можно с помощью утилиты Device Explorer для Windows (ищи наиболее свежий SetupDeviceExplorer.msi) или кросс-платформенной утилиты iothub-explorer. Мы рассмотрим второй вариант.

Для установки iothub-explorer тебе понадобится NPM, Node.js Package Manager. Установив его, пиши в консоли:

npm install -g iothub-explorer@latest

После установки подключимся к нашему хабу:

iothub-explorer login "строка подключения"

В кавычки подставь первичный ключ, который ты получил при создании хаба.

После подключения создаем device-twin:

iothub-explorer create myDeviceId --connection-string

В качестве myDeviceId можешь придумать и ввести любой удобный идентификатор.

В результате выполнения команды будет выведена строка подключения — connectionString. Это и есть SAS, Shared Access Signature. Скопируй ее себе и сохрани — она понадобится для общения с хабом. Но если вдруг забыл записать ее, то ничего страшного: список устройств с их параметрами подключения можно в любой момент получить при помощи команды iothub-explorer list.

В итоге у тебя будет две строки подключения. Одна — для того, чтобы подключаться к хабу из утилиты iothub-explorer (ее мы взяли на портале Azure), вторая (SAS) — для того, чтобы устройство могло подключаться к IoT Hub. Не путай их.

 

Прошиваем Arduino сертификатом SSL

Для аутентификации в Azure IoT Hub можно выбирать из двух вариантов: SSL + SAS или SSL + X.509. Но ресурсов Arduino хватает только на первый из них. Все-таки это устройство с малым потреблением энергии и ограниченными вычислительными возможностями.

В любом случае нам нужно прошить нашу плату SSL-сертификатом. Сделать это можно с помощью кросс-платформенной утилиты WiFi101 Firmware Updater или же через Arduino IDE.

Первым делом ставим библиотеку WiFi101 в Arduino IDE.




После ее установки в IDE появятся примеры использования этой библиотеки. Один из примеров под названием FirmwareUpdater необходимо открыть и записать на плату.


Открыв и запустив его, выбираем нашу плату (платы для IoT пока что не входят в комплект поставки IDE по умолчанию).


Открываем менеджер плат и ищем необходимую плату. В моем случае это MKR1000.


После установки в том же самом разделе меню необходимо пометить используемую плату.


Затем выбрать порт, к которому она подключена.


Выбирай Sketch — Upload, и скетч будет загружен на плату. Теперь можно прошивать.

Первый вариант: открыть в IDE меню Tools — WiFi101 FirmwareUpdater, нажать Add domain и добавить URL хаба.


Теперь жмем Upload Certificates to WiFi module, и готово.

Как вариант — можешь открыть отдельную утилиту WiFi101 Firmware Updater, ввести адрес хаба (в моем случае ArduinoAzureHub.azure-devices.net) в верхнее текстовое поле и нажать кнопку Fetch. Сертификат загрузится на компьютер. После этого нужно выбрать COM-порт, к которому подключено устройство, и нажать появившуюся кнопку Upload certificates.


 

Пишем скетч и используем Azure IoT Hub library for Arduino

Устанавливаем следующие библиотеки точно так же, как мы устанавливали WiFi101:

  • AzureIoTHub;
  • AzureIoTUtility;
  • AzureIoTProtocol_MQTT;
  • AzureIoTProtocol_HTTP;
  • NTPClient;
  • RTCZero.

Скачиваем исходный код IoT Hub library for Arduino из официального репозитория Azure. В папке examples находим проект simplesample_http и открываем его.

Удаляем или комментируем строку Serial.setDebugOutput(true) из метода initSerial().

В файле simplesample_http.c присваиваем переменной connectionString значение строки подключения, которую мы получили от iothub-explorer.

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

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

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

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

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


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

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

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

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…