Сервис RemoteXY позволяет создавать графические интерфейсы для управления микроконтроллерными устройствами с мобильного приложения. Что бы создать интерфейс, необходимо его сконструировать в редакторе на сайте remotexy.com, затем автоматически будет сгенерирован исходный код программы для микроконтроллера, реализующей интерфейс. Исходный код формируется для Arduino IDE и представляет собой рабочую заготовку, которую можно легко доработать, добавив необходимый функционал под вашу задачу. Для подключения к контроллеру устанавливаем мобильное приложение RemoteXY на смартфон/планшет. Вся прелесть в том, что код графического интерфейса хранится в микроконтроллере. Подключаясь к контроллеру с мобильного приложения, в первую очередь прочитывается интерфейс, затем запускается обмен данными между контроллером и мобильным приложением. Вы можете контролировать множество разных устройств используя одно мобильное приложение.
Демонстрацию возможностей RemoteXY проведем на примере простого проекта, который автоматизирует наш виртуальный ”умный дом”. Мы будем считывать температуру с датчика DHT11 и по его показаниям управлять двумя реле. Первое реле будет включаться при превышении температуры относительно заданной, второе при понижении. В реальной жизни на первое реле можно посадить вентилятор для затягивания холодного воздуха в помещение, на другой обогреватель. Задавать температуру будем со смартфона. Так же на смартфон выведем реальную температуру и влажность с датчика. И добавим два выключателя для еще одной пары реле, которые можно задействовать как угодно.
Таким образом наше устройство будет самостоятельно регулировать температуру, автоматически управляя реле 1 и 2. Но мы можем подключиться к нему с мобильного приложения, задать установленное значение температуры для регулирования и отключиться. Так же при подключении имеем возможность увидеть текущие значения температуры и влажности, включить или выключить дополнительную нагрузку через реле 3 и 4.
Сервис RemoteXY поддерживает модуль ESP8266 для плат Arduino с подключением через последовательный порт. Именно эту конфигурацию возьмем за исходную. Модуль ESP8266 подключим к Arduino через Hardware последовательный порт на скорости 115200. Для работы с библиотекой RemoteXY модуль ESP8266 должен быть прошит прошивкой, реализующей AT команды версии не ниже v0.40.
Схема подключения на рисунке.
Заходим в редактор интерфейсов RemoteXY, расположенный по ссылке http://remotexy.com/ru/editor/. Настраиваем конфигурацию проекта в соответствии принятой. Установим настройку ESP8266 в качестве точки доступа ”WiFi access point”. Но можете поэкспериментировать с ESP8266 в режиме станции, и подключиться к домашней точке доступа по IP адресу. Для режима станции выберите вариант соединения ”Ethernet TCP/IP”.
Далее конструируем интерфейс управления. Размещаем слайдер для задания целевой температуры. Рядом со слайдером установим текстовое поле для отображения заданной целевой температуры, переданной из контроллера. Разместим два текстовых поля для отображения реальной температуры и влажности. Разместим два выключателя для управления свободной парой реле. Всем элементам зададим ”говорящие” имена для удобства разработки дополнительного функционала.
Нажимаем кнопку ”Получить исходный код”. Скачиваем код. Теперь уже можно протестировать работу интерфейса. Для этого компилируем и загружаем код в Arduino. Для компиляции понадобится установить библиотеку ”RemoteXY.h” и “DHT.h”. Обратите внимание, что при программировании модуль ESP8266 необходимо отключать от контактов RX и TX. Установите мобильное приложение RemoteXY по ссылке http://remotexy.com/ru/download/ и подключитесь к контроллеру. Вы должны увидеть на экране смартфона ваш интерфейс, но это пока еще только шаблон для нашего умного дома.
Следующая задача — добавить свой необходимый функционал управления умным домом и взаимодействия с интерфейсом. Для взаимодействия с интерфейсом используется структура RemoteXY, которая отображает все элементы графического интерфейса в виде полей переменных. Для принимаемых со смартфона значений, например для слайдера и выключателей, необходимо просто прочитать соответствующие поля, отражающие состояние этих элементов на смартфоне. Для элементов, передающих значения с контроллера на смартфон, в соответствующие поля необходимо записать новые значения.
Полный исходный код проекта с комментариями представлен ниже. Данный код можно загрузить в Arduino и сразу начать управлять ”Умным домом” через мобильное приложение.
Ссылки на используемые бибилиотеки:
RemoteXY.h — http://remotexy.com/ru/library/
DHT.h — https://github.com/adafruit/DHT-sensor-library
[su_spoiler title=»Исходный код» style=»fancy»]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
////////////////////////////////////////////// // RemoteXY include library // // use library version 2.2.2 or up // // use ANDROID app version 3.4.1 or up // ////////////////////////////////////////////// /* определение режима соединения и подключение библиотеки RemoteXY */ #define REMOTEXY_MODE__ESP8266POINT_HARDSERIAL #include "RemoteXY.h"; /* настройки соединения */ #define REMOTEXY_SERIAL Serial #define REMOTEXY_SERIAL_SPEED 115200 #define REMOTEXY_WIFI_SSID "RemoteXY" #define REMOTEXY_WIFI_PASSWORD "12345678" #define REMOTEXY_SERVER_PORT 6377 /* конфигурация интерфейса */ unsigned char RemoteXY_CONF[] = { 3,33,57,1,4,5,4,128,5,11 ,57,7,2,2,0,68,11,28,8,2 ,79,78,0,79,70,70,0,2,0,68 ,29,28,8,2,79,78,0,79,70,70 ,0,67,4,22,20,20,6,4,11,67 ,4,22,38,20,6,4,11,67,4,22 ,52,20,6,4,11,130,1,3,3,61 ,26,5,129,0,5,5,57,5,0,208 ,151,208,176,208,180,208,176,208,189,208 ,189,208,176,209,143,32,209,130,208,181 ,208,188,208,191,208,181,209,128,208,176 ,209,130,209,131,209,128,208,176,0,129 ,0,43,20,7,6,0,194,176,67,0 ,129,0,5,31,55,5,0,208,162,208 ,181,208,186,209,131,209,137,209,143,209 ,143,32,209,130,208,181,208,188,208,191 ,208,181,209,128,208,176,209,130,209,131 ,209,128,208,176,0,130,1,3,30,61 ,30,5,129,0,44,38,7,6,0,194 ,176,67,0,129,0,5,46,50,5,0 ,208,162,208,181,208,186,209,131,209,137 ,209,143,209,143,32,208,178,208,187,208 ,176,208,182,208,189,208,190,209,129,209 ,130,209,140,0,129,0,44,52,5,6 ,0,37,0,129,0,68,4,26,6,0 ,208,160,208,181,208,187,208,181,32,226 ,132,150,51,0,129,0,68,23,26,6 ,0,208,160,208,181,208,187,208,181,32 ,226,132,150,52,0,130,1,66,3,32 ,36,5,129,0,68,47,29,5,12,208 ,163,208,188,208,189,209,139,208,185,32 ,208,180,208,190,208,188,0 }; /* структура определяет все переменные вашего интерфейса управления */ struct { /* input variable */ signed char slider_setTemp; /* =0..100 положение слайдера */ unsigned char switch_relay3; /* =1 если переключатель включен и =0 если отключен */ unsigned char switch_relay4; /* =1 если переключатель включен и =0 если отключен */ /* output variable */ char text_setTemp[11]; /* =строка оканчивающаяся нулем UNICODE */ char text_valTemp[11]; /* =строка оканчивающаяся нулем UNICODE */ char text_valHum[11]; /* =строка оканчивающаяся нулем UNICODE */ /* other variable */ unsigned char connect_flag; /* =1 if wire connected, else =0 */ } RemoteXY; ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #include "DHT.h" #define PIN_RELAY_COLD 7 #define PIN_RELAY_HOT 6 #define PIN_RELAY_3 5 #define PIN_RELAY_4 4 #define PIN_DHT 8 DHT dht(PIN_DHT, DHT11); void setup() { RemoteXY_Init (); // TODO you setup code pinMode (PIN_RELAY_COLD, OUTPUT); pinMode (PIN_RELAY_HOT, OUTPUT); pinMode (PIN_RELAY_3, OUTPUT); pinMode (PIN_RELAY_4, OUTPUT); } void loop() { RemoteXY_Handler (); // TODO you loop code // используйте структуру RemoteXY для передачи данных /////////////////////////////// // Логика задачи умный дом // /////////////////////////////// // получаем значение установленной температуры от 10 до 40 град.ц. int setTemp = RemoteXY.slider_setTemp/100.0*30.0+10.0; // передаем установленную температуру обратно на смартфон itoa (setTemp, RemoteXY.text_setTemp, 10); // опрашиваем датчик DHT11 int valTemp = dht.readTemperature(); int valHum = dht.readHumidity(); // отправляем значения температуры и влажности в интерфейс itoa (valTemp, RemoteXY.text_valTemp, 10); itoa (valHum, RemoteXY.text_valHum, 10); // логика управления по заданной температуре digitalWrite(PIN_RELAY_COLD, (valTemp>setTemp)?HIGH:LOW); digitalWrite(PIN_RELAY_HOT, (valTemp<settemp )?HIGH:LOW); // устанавливаем реле 3 и 4 в соответствии с выключателями интерфейса digitalWrite(PIN_RELAY_3, (RemoteXY.switch_relay3==0)?LOW:HIGH); digitalWrite(PIN_RELAY_4, (RemoteXY.switch_relay4==0)?LOW:HIGH); } |
[/su_spoiler]
Евгений Шемануев
Обсуждение и техподдержка от автора RemoteXY на нашем форуме