ESP8266 E-12 управление через WiFi.

Шаг второй - проект R_ESP8266_Control

rarR_ESP8266_Control v1.5 /последняя версия одним архивом/

Итак, поверхностное знакомство состоялось, теперь захотелось освоить модуль до такой степени, чтобы можно было обходиться без облачных сервисов типа Blynk, а управлять либо напрямую, либо в своей локальной сети. Пока я не ставлю задачи управлять чем-либо конкретно, а наоборот - сделать универсальную программу, для управления ESP8266 и получения с этого модуля различных данных.

Подготовка

devkit8266

Чем я располагаю:

ESP 8266 E-12
Motor shield для ESP 8266 особой необходимости нет, просто с ним удобнее работать
Arduino IDE 1.6.5 с подключенными библиотеками для ESP8266 (см. Подготовка)

Из предложенных образцов программ в Arduino IDE, мне наиболее приглянулась:

  • mDNS_Web_Server - работа в локальной сети
  • И на сайте https://www.sparkfun.com/

  • Access Point (AP) Web Server - работа напрямую
  • При работе с примерами я столкнулся с одной проблемой: каждый раз, когда идет запрос от сервера (клиента), html страница полностью обновляется. Мне удалось решить эту и другие проблемы, чтобы получить устойчивую картинку без перезаписи и перезагрузки страницы.

    wifi conrol

    Интерфейс

    Чем меньше органов управления, тем совершеннее аппаратура.

    В данном случае число органов управления (кнопок переключателей и движков) определяется числом выводов самого модуля ESP8266. Я решил вывести все выводы модуля, как они значатся и как они есть в реальности, чтобы легче было ориентироваться и управлять сигналами при разработке схем. Более того, схема устройства трансформируется и может принять вид, если требуется, как на нижнем рисунке. В таком варианте доступны ползунки для PWM выходов, а также разрешение прерываний и установка режима (mode) соответствующего вывода ESP8266. Допускаю на сегодня, что могут быть неточности, и какому-то выводу не разрешен режим PWM, например, для вывода A0, но это легко поправимо. Да и просто интереснее осваивать материал, который позволяет проверить правильность описания.


    Органы управления

    on/off - переключатели
    движки PWM - уровень выходного сигнала
    i - разрешение прерывания
    mode - установка режима для вывода INPUT или OUTPUT

    Кнопки
    PWM - открывает или закрывает колонки с движками (потенциометрами);
    mode - открывает или закрывает колонки с выбором режима для выводов;
    ce1 - тестовый запрос на получение информации от сервера;
    avto - опция выбора автоматического режима обновления информации;

    Окна Can1, Can2, Can3 - отображают информацию, поступающую от модуля в ручном или автоматическом режиме. Каналы могут быть привязаны к прерываниям или установлены программно.

    Окно контроля

     Окно контроля - это самое верхнее окно для строчных сообщений от модуля (синий фон с белым шрифтом). Модуль ESP8266, каждый раз получая команды через WiFi, посылает образ выполненной команды обратно (в окно контроля). Модуль точно выполняет указания, но это совсем не означает, что команда исполнена. Например, GPIO2 находится в INPUT mode, а Вы сдвинули движок и инициировали команду на вывод сигнала. В окне контроля появится ответ от модуля "analogWrite(GPIO2, 377);" или "digitalWrite(GPIO2, 1);". Модуль честно отработал, но на выходе GPIO2 ничего не будет, так как его надо было перевести в OUTPUT mode. Такие манипуляции могут быть очень полезны, чтобы точно представлять, как поведет себя модуль.

    Конечно, можно программно все решить, и если Вам необходимо автоматом переключать mode ножек на вывод, то просто снимите атрибуты комментария в строках //pinMode(pin, OUTPUT); [2 строки в районе 440-490-й строк]. Тогда Вы будете не изучать, а управлять!

    Wifi ControlПод окнами Can1, Can2, Can3 находится строка с окном ввода интервала обновления данных (на фото установлено 5 сек), опция выбора автоматического режима обновления и табло отсчета. Табло ведет обратный отсчет и, при переходе через ноль, на сервер передается фиктивный запрос только для того, чтобы инициировать передачу данных от сервера. После этого на табло появляется установленное время и отсчет возобновляется.

    Обратите внимание, что пока режим (mode) у вывода не подсвечен, выводы отключены.

    Весь обмен данными может отображаться на терминале COM порта.

    Интересно выставить, например, на какой-либо ножке mode = INPUT и разрешить прерывание. Затем коснуться этого вывода или подать на него сигналы - на терминале COM порта реакция не заставит себя ждать.

    В версии 1.3 добавлены опции автоматического переключения режима вывода (pin) output .
    При попытках подать сигнал на выход, программа автоматически устанавливает OUTPUT mode для выбранного вывода. Это упрощает работу с устройством при работе в конкретном проекте, хотя для изучения поведения модуля эту опцию лучше отключить.

    Решена проблема подсветки селекторов и изменения положения ползунков при цифровом режиме OUTPUT.

    Вписан пример прерывания для GPIO4 (D2).

    Чтобы проверить работу прерывания, установите переключатели как на рисунке и изменяйте положение переключателя GPIO4. Попробуйте одновременно с этими действиями менять mode выводов GPIO16 и GPIO2, это полезно.

    Конечно, все элементы можно расположить по-разному. Это программа, как начальный замес, из которого можно лепить разные "пироги"

    Проблема памяти

    В процессе разработки я столкнулся с еще одной проблемой - объем загрузочного файла оказался слишком большим. Пока удалось решить эту проблему с помощью функции PROGMEM, хотя могут быть и более элегантные решения. С реализацией проблем не было, разве что пришлось поискать саму библиотеку pgmspace.h и найти, куда ее вставить c:\Documents and Settings\Admin\Application Data\Arduino15\packages\esp8266\hardware\esp8266\1.6.5-947-g39819f0\cores\esp8266\

    Итог на сегодня

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

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

    В общем, это пока в работе, а в остальном я очень доволен, поскольку с помощью этой программы открыл для себя некоторые особенности поведения ESP8266 - очень интересно поработать с прерываниями.

    Комментарии по программе (скетчу)R_Server_v1_3R_mDNS_Web_Server_v1_3 /проверено: работают!/

    Проект я назвал R_ESP8266_Control, хотя названия скетчей оставил ближе к источникам, на базе которых и работал. Оба скетча, практически, идентичны. Они отличаются только организацией самого WiFi соединения. Я не буду касаться этого вопроса, тем более что не очень-то еще в этом разбираюсь, но R_Server_v2 для прямого соединения через WiFi, то есть можно смартфон напрямую соединить с модулем; а вторая программа, R_mDNS_Web_Server_v2, позволяет работать с модулем в локальной сети. Не сложно сделать общий скетч с переключателем режима, но память модуля не бесконечна и лучше ее не перегружать.

    Рассмотрим скетч на примере R_Server_v2.ino. Первое, html файл разбит на 26 строковых констант const static char file0[] ... [25], размер каждой около одно килобайта. Обратите внимание на строковую переменную String file4a = ""; в нее программа впишет IP адрес, который необходим для формирования запросов.

    Думаю, что те, кому это интересно, смогут разобраться в прилагаемых программах. Замечу, что аналоговый вывод в ESP8266 обозначен особо "A0", поэтому в программе и в запросах я условно ему присвоил номер 20. Вот, пока все. Будут вопросы или пожелания, пишите.

    И последнее. В Arduino IDE я пробовал разные начальные условия для разных устройств.

    Чтобы развеять, может быть, ваши сомнения, я привожу варианты начальных условий, при которых все работает стабильно.

    Все обновления или изменения будут отображаться на этой странице и на форуме:

    http://esp8266.ru/forum/resources/r_esp8266_control-1-0.23/

     

    Версия v1.5

    Дополнена возможность отслеживания состояния выводов.

    Такой режим возможен только при запуске таймера. При этом выводы с цифровых выводов модуля может считываться или 1 или 0. Поэтому в режиме PWM положение переключателей таких выводов не предсказуемо, так как потенциал на выводе может быть 1 или 0. Однако, в скетче можно исключить или заменить digitalRead(pin);

     

    Для правильного отображение в мобильном телефоне вставьте в блоке <head> метатег viewport:
    <meta name=viewport content="width=device-width, initial-scale=1">
    изменяйте величину scale под свои требования.

     

    Вспомогательная программа Form_convert youtube

    Попутно, для облегчения работы, я написал программку Form_convert для преобразования html файлов в формат для Arduino IDE.

    Чтобы html файл разместить в скетче для Arduino IDE, необходимо над "чистым" html файлом произвести некоторые действия:
    - перед каждой двойной кавычкой должен стоят обратный слеш ( \")
    - каждая строка должна начинаться с двойной кавычки (")
    - каждая строка должна заканчиваться набором символов ( \n\r")
    - если это строковая переменная, то она должна заканчиваться точкой с запятой ( ;)

    Все эти действия выполняет данная программа в ручном или автоматическом режиме, освобождая вас от рутинной работы. Программ написана под Windows и не требует инсталляции.

    Я доволен, что не поленился и написал ее - она очень оказалась удобной в работе и сберегла мне кучу времени.

     

     

    Hosted by uCoz