Содержание статьи
Итак, перед нами простейший прибор. Он состоит из контроллера, небольшой макетной платы, фоторезистора (датчика света) и стабилизирующего резистора. В качестве контроллера используется 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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»