В одном из проектов мы проверили возможности облачной платформы AWS IoT, подключив к ней несколько устройств из набора Lego для программируемых роботов Mindstorms EV3.
На старте мы исследовали несколько крупных облачных сервисов для IoT, которые дали хороший толчок развитию всей концепции интернета вещей (IoT) — Microsoft Azure IoT Suite, AWS IoT и IBM Watson IoT — но в результате остановились именно на Amazon Web Services (AWS).
Общая структурная схема получилась такая:
На данном этапе проект выглядит не слишком сложным, что позволяет рассмотреть IoT в целом, без излишних подробностей.
Для работы с AWS создаем учетную запись Amazon Web Service, прямо в ней выбираем и настраиваем нужные услуги.
Для начала нам понадобился виртуальный сервер EC2 с Linux`ом на борту.
Мы создали новый экземпляр класса (instance) выбрали образ ОС Ubuntu Server из предложенного списка Linux от Amazon, Red Hat, SUSE и Windows Server 2012 c SQL Server Express и без. Далее настраиваем сам инстанс: ЦПУ, память, хранилище, сетевые возможности, настройки тегирования и безопасности. В конце — генерируем пару ключей для доступа к сервису (можно использовать уже имеющуюся пару).
→ Более подробное руководство от AWS
Для доступа к серверу мы использовали свободный клиент PuTTY.
В нашем проекте вещами — устройствами, подключенными к AWS IoT— стали «кирпичики» Lego Mindstorms EV3.
Технические характеристики:
- Процессор — ARM9 (в конструкторе NXT 2.0 использовался ARM7)
- FLASH память — 16 мегабайт
- Оперативная память — 64 мегабайт
- Операционная система — Linux
- Слот расширения SD
- USB 2.0 (поддерживает USB Host, то есть можно вставить WiFi-свисток)
- Bluetooth 2.1
- 4 порта на вход и 4 — на выход
- Динамик
Можно объединить до четырёх таких модулей.
Помимо собственно основного кирпичика у нас также есть:
- Три сервомотора (два больших и один маленький)
- Датчик нажатия (попросту — кнопка)
- Цветовой сенсор
- Датчик расстояния (инфракрасный)
Для начала каждое IoT устройство необходимо зарегистрировать в AWS IoT. Там мы получаем сертификаты и ключи для подключения устройства, регистрируем уникальное имя-идентификатор нашей вещи.
Затем мы написали приложение для «кирпичей» на C#. Для этого использовали:
- библиотеки LEGO MINDSTORMS EV3 API for .NET для общения с «кирпичом»;
- JSON-фреймворк для .NET от Newtonsoft для формирования сообщений серверу на Node.js в JSON-формате;
- uPLibrary.Networking.M2Mqtt для протокола MQTT для общения вещей с AWS IoT (AWS IoT также поддерживает протоколы WebSocket и HTTP 1.1);
- стандартные библиотеки .NET System.
На сервере мы развернули веб-серверное приложение на Node.js с использованием модуля restify и специальных модулей от AWS для IoT и приложений, использующих их сервисы: aws-iot-device-sdk и aws-sdk.
Для хранения конфигурационных данных по каждой вещи использовали базу данных NoSQL Amazon Dynamo DB. Она создается в учетной записи AWS – одна база для одного аккаунта. Там же создаются все необходимые таблицы и настраиваются атрибуты.
Как сказано на официальном сайте AWS, AWS IoT поддерживает обмен сообщениями с помощью модели публикации и подписки, т.е. наш узел или вещь может создать необходимое количество тем для подписки, а все остальные сервисы или устройства должны подписаться на них, чтобы работать с данной вещью. На практике это выглядит так: при регистрации создается основной топик вещи, название которого соответствует его идентификатору при регистрации, а дальше топики создаются внутри этого основного топика при первой публикации в нем сообщения (<идентификатор вещи>/<какой-то топик>). Поэтому важно сначала подписаться на все свои топики в начале работы приложения устройства.
У каждого нашего устройства были следующие топики:
- Топик конфигурации вещи, чтобы отсылать нашему серверу информацию о вещи: какие порты подключены, псевдонимы вещи и портов и т.д.
- Топики для приема команд для портов вывода, в которых сервер публиковал команды-значения для моторов.
- Топики для портов ввода для отправки значений с сенсоров на сервер.
При включении приложения устройство публикует информацию о себе в топик конфигурации, которую читает сервер и сохраняет в базе. Далее с помощью веб-интерфейса можно настроить подключение любого сенсора с любого подключенного устройства к любому мотору любого подключенного устройства, выбрать математическую логику для сенсора, которой будет обрабатываться значение с него, отправить конкретное значение на мотор, или получить данные с сенсоров.
В итоге мы получили веб-терминал для управления и мониторинга контроллеров с настраиваемой возможностью управления выходами (моторами) одного терминала с входов (сенсоров) другого.
Облачные платформы типа AWS IoT объединяют любые датчики с необходимыми интерфейсами, собирают данные в облаке, помогают анализировать информацию и управлять интернетом своих вещей через мобильные приложения. Все технологии есть, нужна только фантазия для реализации этих возможностей в конкретных устройствах — датчиках для умного дома и офиса, развлечений, автоперевозок, автоматизации производства, даже для огромных боевых человекоподобных роботов.
Автор: Команда компании Promwad