Универсальный дистанционный пульт
с ESP8266.

Управление модулями через WiFi

Для управления WiFi модулями программа использует статические IP адреса для своих модулей.

Как прописать статический IP адрес
IPAddress ip(192,168,0,128); //Node static IP
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
...
...
void setup()
{
initHardware(); //инициализация железа в одном месте
...
...
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
...
}

Закрепленные IP адреса прописаны в пультах для каждого WiFi модуля. В html страничке map:
<div id="ip" title="192.168.0.121"></div> ( это тэг в чистом виде).

Для пультов IR адреса не нужны и строки должны выглядеть так:
<div id="ip" title="#"></div>

чтобы легче эти строки отыскивать и с ними работать, я их располагаю непосредственно перед </body>

В программе есть два пульта, которые управляют через WiFi канал. Один - ESP8266, это управление непосредственно сервером, а второй - map, другим WiFi модулем (тоже ESP8266), хороший пример возможных коммуникаций между WiFi модулями. У меня такой ESP8266 подсвечивает карту мира.

Поскольку WiFi модуль "map" сам организован как сервер, то есть две возможности управления им:

Word_map
  • Через основной сервер (192.168.0.128), выбрав пульт "map";
  • Открыв в браузере страничку самого модуля - 192.168.0.121.

Следует помнить, что когда вы отправляете команду с одного модуля на другой, то реакцию на команды можно увидеть на терминале COM порта, подключенному к модулю, который принимает команды

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

Программа позволяет менять режимы на авто и ручной.

Из рисунка понятно, к каким ножкам следует подключиться, чтобы программа сразу заработала.
- avto – переключение режима (ползунок здесь лишний, можно убрать).
- temp – изменение скорости мерцания в режиме avto.
При выключенном режиме avto ,ползунками меняется яркость, а переключателями на выходы подается или минимум или максимум из возможного.

get

Организация запросов и обмена данными.

/не окончательный вариант - поиски/

Возможные варианты рассмотрены на отдельной странице.

На рисунке показан один из вариантов: со смартфона или компьютера подается запрос [1] с использованием статического адреса модуля. Модуль принимает, обрабатывает запрос и формирует ответ на "сервер" [2]. Сервер принимает информацию и готов как угодно ее обработать, чтобы передать данные [3], но тут вскрываются проблемы, по крайней мере, для меня.

 

Организация макрокоманд

macro

Когда в вашем распоряжении более одного устройства с дистанционным управлением, то само собой возникает желание сделать макро команду из набора команд, а тем более, если устройства разные.

Для хранения макрокоманд я разместил на SD карте папку MAKRO, в которой можно хранить пять макрокоманд - по числу кнопок на пульте. Конечно, вы можете разместить столько кнопок, сколько необходимо и даже на нескольких пультах. Я показываю принцип организации.

Каждая макрокоманда для этого пульта представляет собой текстовый файл butn.txt, где n - номер кнопки (id). Так, при нажатии на вторую кнопку (КИНО), программа загрузит, если есть, файл MACRO/but2.txt и начнет его исполнять. Каждая строка в файле, это одна команда. Строка записывается в строгом формате:

Для IR команд   Для WiFi команд
пример &#samsung:pwr;sec=3;   пример &#192.168.0.121/?map:cb13=8;sec=3;
&# признак начала строки   &# признак начала строки
samsung имя пульта и одноименной папки в директории IR   192.168.0.121 IP адрес устройства, куда направляется команда
: обязательный разделитель   /? обязательный разделитель
pwr кнопка вкл/выкл, имя raw файла.   map имя пульта
      : обязательный разделитель
      cb13=8 специфичная команда для(GPIO13)
; обязательный разделитель   ; обязательный разделитель
sec= указатель времени   sec= указатель времени
3 примерное количество секунд до выполнения следующей команды   3 примерное количество секунд до выполнения следующей команды
; обязательный разделитель   ; обязательный разделитель

 

Интересно, что после разделителя /? можно прописать необходимый запрос для любого WiFi устройства. Для этого нет надобности на сервере хранить образы его команд, просто их надо знать.
Пример макрокоманды 2.txt


&#192.168.0.121/?map:cb12=0;sec=3;
&#192.168.0.121/?map:cb16=0;sec=1;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=1;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=1;
&#samsung:pwr;sec=3;//один раз с задержкой 3 сек
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=2;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=2; - синий цвет
&#192.168.0.121/?map:cb0=0;sec=1;
&#samsung:1;sec=1;
&#samsung:4;sec=2;//вкл 14 канал
&#192.168.0.121/?map:cb0=1;sec=2;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=2;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=2;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb0=1;sec=2;
&#192.168.0.121/?map:cb5=0;sec=1;
&#192.168.0.121/?map:cb4=0;sec=1;
&#192.168.0.121/?map:cb0=0;sec=1;
&#192.168.0.121/?map:cb13=8;sec=1;
&#192.168.0.121/?map:cd5=624;sec=1;
&#192.168.0.121/?map:cb12=1;sec=1; - включить автомат

Макрокоманды позволяют одним нажатием выполнять различные действия различных устройств IR и WiFI режимах.

Как будет ясно позже, число макрокоманд не ограничено количеством кнопок, их может быть столько, сколько требуется. Имена файлов макрокоманд могут быть произвольные, единственное ограничение - название файла не должно превышать 8 символов. Так, например, может выглядеть вызов макрокоманды test0: "&#macro:test0;". Вызов макрокоманд можно организовывать с любого пульта или устройства, например, из файлов расписания

&#10h27m00s::macro:test0;/включить tv 25 мая

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

 

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

Кстати, обратите внимание на тег meta name=viewport, позволяющий задавать оптимальный размер отображаемой страницы в смартфоне. Меняя значение initial-scale, вы можете достигнуть желаемого результата.

<meta name=viewport content="width=device-width, initial-scale=1">
Hosted by uCoz