Управляем esp8266 c android устройств

alexhi

Member
Решил поделиться своими приложениями под Андроид для тестирования и управления модулем esp8266 с Андроид. Они могут пригодиться когда комп по каким то причинам не очень удобно использовать или лень таскать как мне :)
Управление модулем esp8266 по COM порту AT-командами
Поддерживаются устройства и переходники USB-COM на чипах FT232RL(FTDI), CP2102(Silicon Lab), PL2303(PROLIFIC).
Андроид планшет должен иметь USB-HOST и версию не ниже 3.1. и разрешенные пермишены.
Если не работает,читаем что надо сделать.
https://play.google.com/store/apps/details?id=ru.shipov.termusb&hl=ru

Управление по TCP (TCP клиент)
Cоздаем на модуле TCP сервер подключаемся к модулю по WIFI сети и начинаем управлять модулем командами.
https://play.google.com/store/search?q=TermTCP&c=apps&hl=ru

Управление по UDP (UDP клиент)
Cоздаем на модуле UDP сервер подключаемся к модулю по WIFI сети и начинаем управлять модулем командами.
https://play.google.com/store/search?q=TermUDP&c=apps&hl=ru

Новая версия UDP клиента с возможностью записи макросов. Прогу делал под недавний проект, если не сложно отпишитесь что и как.
Внешний вид:


Рассмотрим применение программ относительно к моей задачи которую я недавно решал.
(Прошивка с AT командами и 9600 бод)
Нужно со смартфона по WIFI удаленно включать реле ,и получать данные о температуре с датчика DS18B20.
На uart порт модуля подключаю контроллер atmega168(c реле и ds18b20) и at командами создаю UDP сервер

Создаем мост UDP <--> COM на модуле:
void init_wifi(void)
{

//настроим UDP сервер на порту 7777
printf_P(PSTR("AT+RST\r\n"));
printf_P(PSTR("AT+CIPMUX=1\r\n"));
_delay_ms(1000);
printf_P(PSTR("AT+CIPSERVER=1,7777\r\n"));
_delay_ms(1000);
printf_P(PSTR("AT+CIPMUX=0\r\n"));
_delay_ms(1000);
printf_P(PSTR("AT+CIPSTART=\"UDP\",\"192.168.0.255\",7777\r\n"));
_delay_ms(1000);
printf_P(PSTR("AT+CIFSR\r\n"));
_delay_ms(1000);

}
При этом создается мост между UDP портом 7777 модуля, и uart портом. Короче все что приходит по UDP попадает в контроллер, а что отсылается в uart отсылается по UDP.
Далее все просто посылаем команду с Андроид терминала TepmUDP "!GetC" и получаем ответ на Андроид с температурой: "!TEMP +28" или включаем реле "!SetR1" ответ реле "RELEON"

Вот как отрабатываются команды в контроллере:

//получить температуру
if(!memcmp_P(uart_rx_buf, PSTR("GetC"),4))

{ unsigned char buf[8]="!TEMP";
temp_read();
if(subzero) buf[5]='-';
else
buf[5]='+';

if(temp < 10) buf[6]='0';
else
buf[6]=(48+((temp/10)%10));

if(temp < 1) buf[7]='0';
else
buf[7]=(48+(temp%10));
// buf[8]='\r';

send_udp1(buf,8);

}
else
;
//====================================
if(!memcmp_P(uart_rx_buf, PSTR("SetR0"),5))
{
printf_P(PSTR("AT+CIPSEND=9\r\n"));
_delay_ms(200);
printf_P(PSTR("!LEDOFF\r\n"));
LEDOFF;
}
В качестве "макетки" контроллера использовал MK8900
http://masterkit.ru/shop/smarthome/smarthouse/1200515
(была под рукой,от предыдущей разработки)
Конечно могут быть использованы и разные "клоны" Ардуино.
После того как все отладил на TermUDP,то написал уже нужную программу под Андроид с "бантиками" и развел плату.
 

Вложения

pvvx

Активный участник сообщества
Т.е. все эти программы нужны для конфигурации сетевых настроек модуля ESP8266 с целью открытия канала UDP или TCP для трансляции потока в UART?

Лучшим решением будет создание простого Веб сервера на самом модуле ESP8266. При первом включении он должен работать в режиме AP со стандартным паролем. Далее, соединившись с модулем по WIFi, в браузере устанавливаете сетевые настройки, шлюз UART и скорость UART. AT команды и прочее ПО при таком подходе вообще не нужны.
 

alexhi

Member
Не совсем так. Например мы имеем модуль с прошивкой который управляется AT-командами и хотим что бы он например по команде от компа или смартфона он включал выключал лампочку :) и получал температуру например. Для этого мы должны будем по любому прицепить к модулю микроконтроллер(или Ардуино) который будет принимать команды и отрабатывать их.Он же может и заняться сетевыми настройками.Но вот c отображением результатов и управлением могут быть разные подходы.Можно как предлагаете вы (как обычно в роутерах) делаем HTML страницу,скрипты и дергаем ногами. На компе это проходит нормально,а вот на маленьком экране броузера смартфона плохо.Там IP в строке набрать и то проблема, рефреш после запуска скрипта тоже не гут (можно конечно AJAX,но тоже гемор).Да и долго это. Я говорю про второй подход пишем на Андроид программу с нормальными большими кнопками и буквами подцепляемся к модулю например по TCP/UDP и рулим командами. Да и удобно мобильник всегда включен и с собой. Вот пример программы под этот модуль , по UDP включаю/выключаю реле и получаю температуру.Программы которые привел выше как раз для этой цели(отладка)
Вот например внешний вид этой проги для модуля esp8266: (видио как работает сделаю попозже,если будет интересно)

Cейчас реализовано следующее:
-Настройка на IP модуля
-Получение текущего состояния лампочки
-Вкл/выкл лампочки по нажатию GPIO2
-Вкл/выкл голосом (offline JB)
-При замыкании ноги GPIO0 говорит голосом "открыта дверь"
-получение Температуры с DS18B20

PS. Но конечно подходы могут быть разные,можно конечно и через HTML страничку.Как говориться на любителя.
 

pvvx

Активный участник сообщества
Это больше походит под Iot. Там и график строится, на сервере, о включении лампочки и температуре, но не очень информативный и “мало точек”, т.е. “многа букав”, а информации никакой. Но кое как можно узнать, когда модуль выпал из сети. С текущей прошивкой это у него основная задача – глючить и отваливаться от инет сети… Возможно накопленную инфу с сервера можно "разпарсить" и на Андроиде, я в эти серверы Iot не лез пока глубоко... https://xively.com/whats_xively/

Для данной задачи - включать лампочку и снимать несколько показаний датчиков, второй камень не к месту. Не понятна его цель. Один раз в своей жизни установить по AT конфигурацию?
 
Последнее редактирование:

alexhi

Member
Для данной задачи - включать лампочку и снимать несколько показаний датчиков, второй камень не к месту. Не понятна его цель.

Да, для данной задачи можно конечно использовать те два GPIO которые есть на модуле, а если например больше ног нужно?(извращаться с регистрами :) или заказчику еще что то придет в голову прицепить?
А тут есть копеечный проц с кучей ног и управляй чем хочешь, тот же STM32F0 стоит меньше бакса.
И второе, если обходиться без внешнего проца ,то придется или в прошивку под модуль добавлять свои процедуры работы с переферией(тот же uLan для DS18b20) или использовать вариант прошивки с LUA.
Непонятно что правильно. Не зря на том же esp8266.com целая ветка для связки модуля с Arduino.Значит имеет право на жизнь и такое решение.Не стал бы их осуждать за это. Тем более что есть уже куча готовых библиотек под это дело. Такой подход кстати часто используется и для BT модулей. Опять же как писал выше,любое решение на любителя.
 

Victor

Administrator
Команда форума
Для себя, друзей и для дома - вполне удобно с ардуино или еще с чем-нибудь. Для готовых коммерческий решений - наверное лучше обойтись только модулем. И вообще, хоть десктоп к ESP8266 прикрутите, лишь бы вам самим нравилось или было полезным. Мое мнение таково, что каждый имеет право на свое мнение.
 

pvvx

Активный участник сообщества
Да, для данной задачи можно конечно использовать те два GPIO которые есть на модуле, а если например больше ног нужно?(извращаться с регистрами :) или заказчику еще что то придет в голову прицепить?
Заказчику? :) С ПО данного модуля от Espressif до этого далеко...
Если "мало ножек", а надо управлять реле, клапанами или лампочками (на 24В) то ставите что-то типа MC33996 (с ней уже проверена работоспособность модуля) и получаете контролируемые 16 выходных ключей...
 
Последнее редактирование:

Vasiks

Member
NetIO - класс. А есть бесплатные аналоги?
Есть. OpenRemote.
Но:
1. Нужен контроллер. Это софт серверной части. То есть требуется постоянно запущенный сервер, работает на ява, кросплатформенная штука. Клиент ставится на разные платформы.
2. В халявной версии урезан функционал. Не очень удобно пользоваться, но сделать можно много чего.
Пользуюсь, в принципе нравится. О NetIO только услышал, буду изучать.
 

FGX

Member
Добрый день. Найти исходник можно вот этого Управление по TCP (TCP клиент) ?
 
  • Like
Реакции: RUST
Сверху Снизу