Облачный сервер для управления ардуино. Blynk: простое управление Raspberry и Arduino


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

Я много думал о том, чтобы найти недорогое решение для подключения и управления Arduino через интернету без использования какого-либо Ethernet экрана или даже любого модуля WI-FI. После исследования я обнаружил, что единственный способ взаимодействия с микроконтроллером Arduino - это его последовательный порт (serial port), поэтому я создал простое оконное приложение C# в качестве хаба (HUB) для работы с последовательным портом для отправки и приема данных на плату.

Это HUB-приложение уже подключено к Интернету через ваш персональный компьютер и помогает отправлять и получать данные между микроконтроллером и облачной базой данных, помимо хранения самих данных в онлайн-базе MySQL.

Прежде всего мне пришлось начать с небольшого примера, который позволяет мне протестировать применение идеи. В этом примере я не подключил какой-либо датчик, я использовал только встроенный светодиод на Arduino, чтобы я мог включать и выключать светодиодный индикатор на выводе 13, отправив буквы «I» и «O» на последовательный порт.

Int input; //Будет хранить входящий символ из последовательного порта. int led = 13; // Pin 13 // функция настройки запускается один раз, когда вы нажимаете кнопку сброса или включаете питание int state; void setup() { // инициализировать цифровой вывод LED_BUILTIN в качестве выхода. Serial.begin(9600); pinMode(led, OUTPUT); // Установите контакт 13 как цифровой выход Serial.flush(); } // функция цикла работает снова и снова всегда void loop() { // String input = ""; // while (Serial.available() > 0) // { // input += (char) Serial.read(); // delay(5); // } state = digitalRead(led); if (Serial.available()) { input = Serial.read(); if (input == "I") { //digitalWrite(led, !digitalRead(led)); digitalWrite(led, HIGH); Serial.println(1); delay(1000); } else if (input == "O") { digitalWrite(led, LOW); Serial.println(0); delay(1000); } else if (input == "T") { analogRead(led); Serial.println(0); delay(1000); } } }

Шаг 2. Создание онлайн-базы данных

Для хранения данных мы должны использовать "онлайн-посредник", который послужит мостом между платой Arduino и нашим HUB-приложением. Поэтому мы выбрали бесплатный хостинг Баз Данных, который будет работать в направлении сохранения данных, полученных от платы Arduino и отправленных команд на неё.

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

В качестве хостинга можно выбрать сайт freemysqlhosting.net. Онлайн PHP MyAdmin можно найти по ссылке - phpmyadmin.co . Больше информации можно также найти на сайте phpmyadmin.net.

Шаг 3. Создание C# хаба

На этом шаге мы создадим хаб, который можно рассматривать как входной фильтр на ПК, чтобы сначала передать данные, проходящие через него, затем отправить их на плату Arduino через последовательный порт и наоборот.

Интерфейс этого хаба очень прост, он содержит только два текстовых поля, которые показывают статус каждой "транзакции", передает данные хаба (отправка и получение).

Примечание. Хаб должен быть всегда запущен, когда вы хотите работать со своей платой Arduino через интернет.

Шаг 4. Создаем web-интерфейс

Наконец-то мы дошли до самой крутой части урока.

Я создал веб-приложение на основе технологии Asp.net C# с адаптивным интерфейсом, которое может работать на любом устройстве, это веб-приложение имеет дело только с онлайн-базой данных и не знает, что на другой стороне есть какая-то плата.

С помощью этого интерфейса вы можете классифицировать свои электронные компоненты, подключенные к Arduino. Щелкая мышью, включая и выключая их, вы просто храните данные онлайн.

Пример

Нажав зеленую кнопку (ON) в разделе «Гостиная» (Hall - выше на рисунке), вы отправляете указание через Интернет включить свет в гостиной вашего дома. Таким образом, хаб, который может находиться на другой стороне мира, принимает указание и обрабатывает его с помощью электронной цепи основанной на Arduino в вашем доме.

Protected void BtnHallOn_Click(object sender, EventArgs e) { AddTempOrders("I"); // sending letter "I" to Arduino to open Hall light }

Шаг 5. Скачиваем проект

Пришло время попробовать всё самому и сделать свой собственный проект.

Надеюсь, вам всё это пригодится. Желаю вам отличных проектов!

Еэспэшники — вливайтесь в ряды блинкеров!
Сегодня мы за 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.

Программирование разнообразных микроконтроллеров и микрокомпьютеров, таких как Arduino, Raspberry Pi и им подобные, - одно из самых интересных и актуальных занятий. Конструирование устройств на этих платформах вышло за рамки хобби гиков и профессиональных программистов: эти платы используются для создания роботов, станков, квадрокоптеров, IoT-устройств (умный дом), серверов и даже Hi-Fi-аудиоинтерфейсов.

К сожалению, рынок микроконтроллеров сильно сегментирован. Их программирование осуществляется через различные среды и интерфейсы. Ситуацию призван спасти проект под названием Blynk.

Blynk представляет собой облачный сервис для создания графических пультов управления и подходит для широкого спектра микрокомпьютеров и микроконтроллеров. Там, где раньше для сбора информации с датчиков нужно было писать полноценный интерфейс ввода-вывода или приобретать дополнительные модули, теперь можно обойтись пятиминутной работой в Blynk.

Для создания собственного проекта с управлением через Blynk нужно совсем немного: установить приложение (доступны версии для iOS и Android) или воспользоваться веб-формой. Тут потребуется регистрация в один шаг - ввод email и пароля. Регистрация нужна ввиду того, что Blynk - облачное решение и без неё контроль над железкой может получить любой пользователь.

Желающие могут установить сервер локально . В таком случае доступ в интернет не нужен.

Работа приложения потребует определённых навыков. Сначала необходимо связать компьютер или смартфон с программируемой платой. Программа поддерживает соединение с платами посредством массы самых разных интерфейсов:

  • USB (Serial),
  • Adafruit CC3000 WiFi,
  • Official Arduino WiFi Shield,
  • Official Ethernet Shield (W5100),
  • ENC28J60,
  • ESP8266 (WiFi modem),
  • SeeedStudio Ethernet Shield V2.0 (W5200),
  • RN-XV WiFly,
  • ESP8266.

Кроме настройки соединения, потребуется только правильно соединить модули будущего устройства. После этого в рабочей форме приложения нужно добавить доступные модули (виджеты), настроить необходимые адреса выводов и указать желаемые параметры (при необходимости можно написать свой код). Кстати, для создания виджета или программы используется drag’n’drop. Для управления доступна масса имитаторов управляющих устройств - переключатели, слайдеры, дисплеи, для каждого из которых можно писать свою логику. Есть отдельные формы для вывода и систематизации информации с требуемых датчиков в виде графиков.

Таким образом, платформа подойдёт как новичкам, так и более продвинутым пользователям, которые не хотят тратить время на написание приложений для управления проектами: от считывания данных с метеостанции и управления умным домом до управления роботами.

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

На данный момент Blynk работает со следующими платами:

  • Arduino: Uno, Nano, Mini, Pro Mini, Pro Micro, Mega, YÚN (Bridge), Due;
  • Raspberry Pi;
  • Particle (ex Spark Core);
  • ESP8266;
  • TinyDuino (CC3000);
  • Wicked WildFire (CC3000).







2024 © gtavrl.ru.