Раньше изобретал велосипед по созданию собственного облачного сервиса на основе MaxSite CMS для мониторинга устройства Arduino.
Было интересно.
Теперь воспользуемся облачным сервером RemoteXY для подключения Arduino UNO + ESP8266.
Уже забросил платы Arduino подальше и тут встретил связку - приложение и облачный сервис RemoteXY.
Достал платы, чтобы проверить - неужели все так просто.
Будем считывать температуру, влажность и мигать светодиодом, подключая платы по WiFi через интернет посредством облачного сервиса.
Есть возможность подключаться к платам, как к точке доступа, сразу из мобильного приложения, минуя интернет и облачный сервис. Но зачем? WiFi роутер всегда включен.
Прочитав статью про быстрый старт Arduino UNO + ESP8266 через облачный сервер, создадим такой проект:
В автоматически сгенерированный скетч добавим свои датчики:
/* -- 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 <RemoteXY.h> // настройки соединения #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.h> // Добавляем библиотеку 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[20]; // конфигурация интерфейса #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[11]; // =строка UTF8 оканчивающаяся нулем char text_2[11]; // =строка 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.