Облачные сервисы для управления ардуино. Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne

Еэспэшники — вливайтесь в ряды блинкеров!
Сегодня мы за 5 минут настроим управление ESP8266 с вашего смартфона (iOS или Android) с помощью нового облачного сервиса Blink . Видео и подробности под катом.


Установите приложение Blynk на смартфон

Зарегистрируйтесь в приложении и создайте новый проект.

Введите название проекта, например ESP8266 . В поле Hardware Model выберите ESP8266 . (надеюсь, что вы заметите впечатляющий список поддерживаемого оборудования) Автоматически сгенерированный Auth Token отправьте на свой почтовый ящик.

После нажатия на кнопку Create вам станет доступно пустое поле для проектирования UI вашей панели управления ESP8266.

Жмете на плюсик вверху справа — появится панель инструментов Widget Box для добавления виджетов на вашу панель управления. Стоит заметить, что список виджетов еще будет пополняться.

Для пробы выберем тип виджета Button — этот виджет сразу добавится на вашу панель. Отредактируйте его одним прикосновением. Название можно не заполнять, чуть правее можно выбрать цвет индикатора, в поле OUTPUT PIN выберите справа Digital , а слева любой свободный пин GPIO . Ниже переключите тип кнопки на Switch .

Далее установите библиотеку Blynk в Arduino IDE. В этом вам поможет официальная инструкция . Также можете взять библиотеку самую последнюю версию прямо из репозитария и установить вручную. Далее выбираем пример ESP8266_Standalone и прописываем в нем Auth Token , который мы получили по почте, SSID и пароль вашей WiFi сети. Компилируем и заливаем скетч в ESP8266.

Вспоминая в прежние времена, когда библиотека Wire все еще была «сырой», платформа Arduino была просто микроконтроллером с некоторой обвязкой. Теперь у нас есть одноплатные компьютеры и дешевые микроконтроллеры со встроенным Wi-Fi вроде ESP32. Тем не менее, всегда есть потребность сделать программирование и разработку встраиваемых систем более доступной и более широко поддерживаемой среди сотен устройств, доступных сегодня.



Так, недавно на конференции Embedded Linux Conference основатель Arduino Массимо Банци (Massimo Banzi) объявил о начале того, что будет ответом Arduino на облачную концепцию – онлайн среду разработки и обширную экосистему подключенных устройств. Все это носит название Arduino Create и представляет собой онлайн IDE, которая позволяет любому разработчику создавать проекты встраиваемых систем и управлять ими удаленно.


Как было продемонстрировано в презентации Массимо, основная идея Arduino Create заключается в том, чтобы вывести подключаемые устройства в Интернет и обеспечить удаленное программирование и прошивку «по воздуху». Поскольку это экосистема Arduino, то для того, чтобы сделать это возможным, было задействовано большое количество библиотек, доступных для сотен различных платформ. В настоящее время поддерживается большое количество плат, включая Raspberry Pi, BeagleBone и несколько плат Intel IoT.


Основное внимание в этой разработке является платформенной независимости и почти полностью сосредоточено на простоте использования и функциональной совместимости. Это заметное изменение относительно экосистемы Arduino, которая была, например, пять лет назад, когда платы Arduino в большинстве своем основывались на микроконтроллерах ATmega328p. Несколько лет спустя уже можно было программировать и записывать скетчи Arduino в микроконтроллеры ATtiny85. С тех пор многое изменилось. У нас теперь есть Raspberry Pi, компания Intel успела засветиться на рынке Интернета вещей, в конце концов, у нас есть миллион плат на базе процессоров и систем-на-кристалле (SoC) для смартфонов.


В то время как другие компании и организации уже внесли свой вклад в онлайн-среду для Raspberry Pi и других одноплатных компьютеров, то что представил Массимо Банци наконец-то явилось долгожданным и значимым изменением со стороны организации Arduino.


Для тех, кто хочет посмотреть выступление Массимо Банци, предоставляется видео.

Подключение через облачный сервер RemoteXY позволяет управлять устройством из любой точки мира где есть интернет.

Модуль ESP8266 будет сконфигурирован как клиент для подключения к точке доступа WiFi. Точка доступа должна обладать выходом в интернет. Библиотека RemoteXY обеспечит регистрацию устройства на облачном сервере.

Мобильное приложение будет подключаться к облачному серверу, а не к устройству напрямую. Таким образом устройство будет доступно из любой точки сети интернет.

Примечание: В данный момент подключение через облачный сервер проходит этап тестирования. По этому возможны перебои в работе сервера.

Шаг 1. Создайте проект графического интерфейса

Шаг 5. Настройте ESP8266

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

Что необходимо проверить:

  • Модуль имеет прошивку с поддержкой AT команд версии не ниже v0.40;
  • Модуль настроен на скорость работы 115200.

Шаг 6. Подключите ESP8266 к Arduino Uno

Подключите ESP8266 к Arduino Uno по схеме приведенной ниже. Обратите внимание, что контакты RX-TX соединяются перекрестием.

Так как уровни сигналов модуля ESP8266 составляют 3.3В а у Arduino они 5В, необходимо использовать резистивный делитель напряжения для преобразования уровня сигнала.


Шаг 7. Загрузите скетч в Arduino.

Скетч загружается в Arduino обычным способом. Однако из за того что модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку.

Перед программированием отсоедините провода идущие к ESP8266 от контактов 0 и 1. Произведите программирование. Затем верните контакты на место. Нажмите кнопку сброса Arduino.

Примечание: Первый признак того, что программирование прошло успешно, это мерцание синего светодиода на модуле ESP8266 сразу после сброса. Мерцание синего светодиода означает обмен данными между Arduino и ESP8266. В эти полсекунды Arduino производит настройку ESP8266 для подключения к точке доступа. Через некоторое время светодиод снова моргнет, что означает попытку зарегистрироваться на облачном сервере RemoteXY.

Шаг 8. Подключитесь с мобильного приложения.

Проверьте питание ESP8266

Так же возможно, что вашей ESP8266 не хватает мощности источника питания. Некоторые платы Arduino имеют слабый стабилизатор напряжения 3.3 В, который не способен выдавать 200-300 мА в пиковых режимах. В этом случае в Serial Monitor вы так же увидите обрыв последовательности команд.

В прошлом году компания 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 (он поинтереснее).

Раньше изобретал велосипед по созданию для мониторинга устройства Arduino.

Было интересно.

/* -- New project -- This source code of graphical user interface has been generated automatically by RemoteXY editor. To compile this code using RemoteXY library 2.3.5 or later version download by link http://remotexy.com/en/library/ To connect using RemoteXY mobile app by link http://remotexy.com/en/download/ - for ANDROID 4.3.1 or later version; - for iOS 1.3.5 or later version; This source code is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ ////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__ESP8266_HARDSERIAL_CLOUD #include // настройки соединения #define REMOTEXY_SERIAL Serial #define REMOTEXY_SERIAL_SPEED 9600 #define REMOTEXY_WIFI_SSID "***********" #define REMOTEXY_WIFI_PASSWORD "**********" #define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com" #define REMOTEXY_CLOUD_PORT 6376 #define REMOTEXY_CLOUD_TOKEN "**************************" #include // Добавляем библиотеку DHT11 dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN 7 // Датчик DHT11 подключен к цифровому пину номер 4 const int analogSignal = A3; //подключение аналогового сигналоьного пина const int digitalSignal = 8; //подключение цифрового сигнального пина boolean noGas; //переменная для хранения значения о присутствии газа int gas = 0; //переменная для хранения количества газа float hum = 0; //переменная для хранения влажности float temp = 0; //переменная для хранения температуры int chk; //переменная для хранения ошибки DHT char msgBuffer; // конфигурация интерфейса #pragma pack(push, 1) uint8_t RemoteXY_CONF = { 255,1,0,24,0,74,0,8,13,2, 2,0,38,44,22,11,7,81,22,11, 2,26,31,31,79,78,0,79,70,70, 0,66,132,10,13,31,24,7,10,27, 21,2,24,66,132,56,13,31,24,4, 41,31,24,2,24,67,4,16,5,20, 5,38,23,20,5,2,26,11,67,4, 63,6,20,5,39,52,20,5,2,26, 11 }; // структура определяет все переменные вашего интерфейса управления struct { // input variable uint8_t switch_1; // =1 если переключатель включен и =0 если отключен // output variable int8_t level_1; // =0..100 положение уровня int8_t level_2; // =0..100 положение уровня char text_1; // =строка UTF8 оканчивающаяся нулем char text_2; // =строка UTF8 оканчивающаяся нулем // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_SWITCH_1 13 void setup() { RemoteXY_Init (); pinMode (PIN_SWITCH_1, OUTPUT); // TODO you setup code } void loop() { RemoteXY_Handler (); digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH); noGas = digitalRead(digitalSignal); //считываем значение о присутствии газа gas = analogRead(analogSignal); // и о его количестве chk = DHT.read(DHT11_PIN); hum = DHT.humidity; temp = DHT.temperature; RemoteXY.level_1 = hum; RemoteXY.level_2 = temp; dtostrf(hum, 6, 2, RemoteXY.text_1); dtostrf(temp, 6, 2, RemoteXY.text_2); // TODO you loop code // используйте структуру RemoteXY для передачи данных }

Используем бутерброд из плат .

Неожиданно все сразу же заработало:

С момента обнаружения облачного сервиса RemoteXY до фото выше прошел час.

Особенности работы с RemoteXY.

1. Все очень просто. По своему это хорошо. С Blynk и Cayenne , например, вряд ли с нуля за час получится разобраться. Для использования же, например, "KaScada Cloud" нужно приблуду покупать специальную.

2. Нет никакой обработки и хранения данных на стороне сервера: нет связи с платой - в приложении висит "Нет подключения".

3. Бесплатно только 5 элементов дизайна, но приложение PRO стоит не дороже пол дня потраченного времени.

4. Есть возможность из одного приложения осуществлять связь с платой как через облачный сервер, так и на прямую. Правда не одновременно конечно. И переключить оперативно невозможно - нужно менять скетч в плате. Есть также возможность осуществлять связь смартфона с платой по Блютус и USB.