Безопасное подключение Arduino MKR NB 1500 к Azure IoT Hub
Компоненты и материалы
| Arduino MKR NB 1500 | ×1 |
| Кабель Micro-USB — USB | ×1 |
| Аккумулятор LiPo 3,7 В | ×1 |
| Микро-SIM карта | ×1 |
Приложения и онлайн-сервисы
- Arduino IDE
- Microsoft Azure
О проекте
Примечание: Это руководство может быть устаревшим. Актуальную версию можно найти здесь.
Введение
Azure IoT Hub позволяет «безопасно подключать, отслеживать и управлять миллиардами устройств для разработки приложений Интернета вещей (IoT)».
Устройства могут подключаться к Azure IoT Hub по протоколам HTTPS, AMQP и MQTT. Azure также предоставляет SDK для многих языков программирования. Кроме того, можно подключиться через MQTT-клиент. Подробнее о поддержке MQTT в IoT Hub можно прочитать здесь.
В этом руководстве мы подключим плату Arduino MKR NB 1500 к Azure IoT Hub безопасно, используя MQTT-клиент. MQTT (Message Queuing Telemetry Transport) — это протокол связи M2M (machine-to-machine), обеспечивающий передачу сообщений по модели публикации/подписки.
Для аутентификации в Azure IoT Hub устройства могут использовать SAS-токены или X.509-сертификаты (подробнее здесь). В данном руководстве мы будем использовать самоподписанный X.509-сертификат.
Каждая плата Arduino MKR с встроенной связью, включая MKR NB 1500, оснащена криптографическим элементом Microchip ATECC508A или ATECC608A. Этот элемент позволяет безопасно генерировать и хранить 256-битный ECC-ключ (криптография на эллиптических кривых).
Настройка ПО и оборудования
- Установите Arduino IDE, если она еще не установлена.
- Убедитесь, что установлен последняя версия пакета «Arduino SAMD Boards» (меню Tools → Board → Board Manager, поиск «Arduino SAMD»). На момент написания актуальная версия — 1.6.20.
- Установите необходимые библиотеки через менеджер библиотек (Sketch → Include Library → Manage Libraries):
- MKRNB
- ArduinoBearSSL
- ArduinoECCX08
- ArduinoMqttClient
- Arduino Cloud Provider Examples
- Вставьте микро-SIM в слот на нижней стороне платы, подключите аккумулятор LiPo к разъему JST и соедините плату с компьютером через Micro-USB кабель.
- В Arduino IDE выберите порт (Tools → Port) и плату Arduino MKR NB 1500 (Tools → Board).
Настройка и добавление платы в Azure IoT Hub
Azure IoT Hub поддерживает устройства, подключаемые по MQTT с аутентификацией через X.509-сертификаты. Мы сгенерируем самоподписанный сертификат на плате и добавим его SHA1-отпечаток на портале Azure.
- Откройте пример скетча: File → Examples → ArduinoECCX08 → Tools → ECCX08SelfSignedCert.
- Загрузите скетч на плату и откройте Serial Monitor. Установите окончание строки «Both NL & CR».
- Скетч предложит навсегда настроить и заблокировать криптоэлемент (ATECC508A/ATECC608A), если он еще не настроен. Внимание: этот процесс необратим, но необходим для использования криптоэлемента. Конфигурация позволяет использовать 5 слотов для приватных ключей (0–4), которые можно перегенерировать в любой момент.
- Введите данные для сертификата: год, месяц, день и час выпуска, а также срок действия в годах. Для руководства используем слот 0 для приватного ключа, а слот 8 — для хранения дат выпуска/истечения и подписи. Приватный ключ генерируется внутри криптоэлемента и никогда не покидает устройство.
- Скопируйте сгенерированное значение SHA1 (например,
99d6d96fa55bdf08b4040a142a8d0d934bc9d12b). Оно понадобится как отпечаток сертификата в Azure.
Создание устройства на портале Azure
- Перейдите на portal.azure.com.
- Войдите в учетную запись Azure или создайте новую.
- В левой панели нажмите «Create a resource» → «Internet of Things» → «IoT Hub».
- Заполните поля: Subscription, Resource group, Region, IoT Hub Name (например,
ArduinoProjectHubTutorial). Нажмите «Review + Create» → «Create». - Дождитесь развертывания (несколько минут), затем нажмите «Go to resource».
- В разделе «Explore» выберите «IoT Devices» → «Add».
- Введите имя устройства (например,
MyMKRNB1500), перейдите на вкладку «X.509 Self-Signed» и вставьте скопированный SHA1 в поля «Primary Thumbprint» и «Secondary Thumbprint». Нажмите «Save».
Подключение платы к Azure IoT Hub
- Откройте скетч: File → Examples → Arduino Cloud Provider Examples → AzureIoTHub → Azure_IoT_Hub_NB.
- Во вкладке
arduino_secrets.hукажите PIN-код SIM-карты (если требуется):// NB settings #define SECRET_PINNUMBER "" - Замените брокер на конечную точку вашего IoT Hub:
// Fill in the hostname of your Azure IoT Hub broker #define SECRET_BROKER ".azure-devices.net" - Укажите ID устройства, созданного на портале:
// Fill in the device id #define SECRET_DEVICE_ID "" - Загрузите скетч и откройте Serial Monitor. Плата подключится к сотовой сети, а затем к Azure IoT Hub по MQTT.
Взаимодействие с платой через Azure IoT Hub
Скетч отправляет сообщения в топик devices/{deviceId}/messages/events/ каждые 5 секунд и слушает топик devices/{deviceId}/messages/devicebound/#.
Отправка сообщения на устройство
- На портале Azure IoT Hub выберите ваше устройство в таблице «IoT Devices».
- Нажмите «Message to device» на панели инструментов.
- Введите текст сообщения (например, «Hello there :)») и нажмите «Send Message».
- В Serial Monitor Arduino IDE появится полученное сообщение.
Просмотр сообщений от устройства
- Зайдите на shell.azure.com (выберите Bash).
- Установите расширение IoT Hub:
az extension add --name azure-cli-iot-ext - Выполните команду (замените
<hub name>на имя вашего хаба):az iot hub monitor-events --hub-name - В консоли появятся сообщения, отправляемые платой.
Заключение
Мы рассмотрели, как безопасно использовать Arduino MKR NB 1500 с Azure IoT Hub. Для аутентификации применялся самоподписанный X.509-сертификат, приватный ключ которого хранится в ATECC508A/ATECC608A. Обмен MQTT-сообщениями между платой и облаком работает в обе стороны.
Это только начало — Azure IoT Hub интегрируется со множеством других сервисов Azure!
Код
Исходный код доступен на GitHub: https://github.com/arduino/ArduinoCloudProviderExamples
Производственный процесс
- Как IoT и 5G трансформируют современные рабочие места
- Arduino запускает Portenta H7: Industrial-Grade IoT Board дебютирует на CES
- Azure RTOS расширяет поддержку основных встраиваемых платформ с новыми комплектами разработки
- Подключение Raspberry Pi 3 к датчику DHT11 и загрузка данных в облако ThingsIo.ai
- Azure против AWS: какая облачная платформа выигрывает для IoT?
- GPS-трекер с пространственным анализом на Azure IoT Hub
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Удаленное IoT-управление самодельной манипулятором
- IoT-солнечный трекер на Arduino: умное управление энергией с мониторингом через Cayenne
- Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг