ESP8266 wifi gate

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

ESP8266 wifi gate

Сообщение sergejey » Вс окт 09, 2016 12:42 pm

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

Итак, сделал такой шлюз. После прошивки (в среде Arduino IDE) подключается к любой ардуине по принципу RX-TX, TX-RX, GND-GND, Power. Т.е. в классической Arduino пины 0 и 1 подключаются к соответствующим serial-пинам ESP-шки. Если ESP-шка идёт в виде платы NodeMCU, то даже не нужен преобразователь питания и можно подключить +5V из arduino сразу к VIN NodeMCU, иначе понадобится стабилизатор питания на 3.3V.

Изображение

ESP-шка мониторит всё, что Ардуина выводит через Serial.println и по фильтру отсылает строки по WiFi через HTTP-запрос на указанный сервер. Таким образом, любой проект на Arduino можно интегрировать в MajorDoMo без перепрошивки, а только через настройку веб-интерфейса шлюза, а сами устройства с прошитым шлюзом можно "пачкой" заготовить заранее, т.к. их перепрошивать нет необходимости даже при использовании в разных проектах.

Особенности:
* Простая настройка wifi-сети без перепрошивки (используется библиотека WiFiManager)
* Подключение к любому arduino-контроллеру через serial-интерфейс
* Мониторинг входящих данных в веб интерфейсе
* Настройка пересылки данных http-запросом (адрес посылки, фильтр)
* Отправка данных в подключенный контроллер с помощью HTTP API (запрос на http://шлюз/send?data=даные)

TO-DO:
* Настройка скорости общения по serial-порту в веб-интерфейсе (сейчас прошита фиксированная скорость 9600)
* Возможность исопльзования с бинарными данными (чтобы подключить к любому UART-устройству)
* Настройка признака окончания сообщения (сейчас это символ перевода строки "\n")

ссылка на исходник: https://github.com/sergejey/esp8266_wifigate

Интерфейс:
Изображение

Пример скетча на Arduino, с которым тестировалась связка:
СпойлерПоказать

Код: Выделить всё

#define PIN_LED (13) // INDICATOR

long int uptime = 0;
long int old_uptime = 0;
String inData;


void setup()
{
  pinMode(PIN_LED,OUTPUT);  
  Serial.begin(9600);
}

void blinking(int count) {
 for(int i=0;i<count;i++) {
  digitalWrite(PIN_LED, HIGH); 
  delay(200);
  digitalWrite(PIN_LED, LOW);
  delay(200);
 }
}


void loop() {

  uptime=round(millis()/1000);
  if (uptime!=old_uptime) {
    Serial.print("Up: ");
    Serial.println(uptime);
    old_uptime=uptime;
  }

 if (Serial.available()) {
    char c=Serial.read();
    if (c == '\n' || c == ';')
        {
          Serial.println(inData);
          int commandProcessed=0;
          if (inData.equals("blink")) {
           Serial.println("BLINKING!");
           blinking(3);
           commandProcessed=1;            
          } 
          if (commandProcessed==0) {
            Serial.print("Unknown command: ");
            Serial.println(inData);
          }                  
          inData="";
          Serial.flush();
        } else {
          inData += (c);
        }    
  } 

  delay(100);
}
В скетче прописана реакция на команду "blink;"
За это сообщение автора sergejey поблагодарили (всего 4):
Varrcan (Пн окт 10, 2016 2:12 am) • cabat (Ср окт 12, 2016 11:47 am) • Colp (Чт окт 27, 2016 7:41 pm) • Amarok (Пн янв 30, 2017 7:52 am)
Рейтинг: 4.65%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: ESP8266 wifi gate

Сообщение serghei » Вс окт 09, 2016 1:39 pm

Здравствуйте. То есть насколько я понял ESP подключаем к любой ардуине ( в том числе с АМС ) и по Wi-Fi передаем данные в МД, которые сыплются в сериал порт? Вообще шикарно получается. Надо только разобраться со скетчем и знать ,что необходимо дописать для отправки.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: ESP8266 wifi gate

Сообщение Alex » Вс окт 09, 2016 1:42 pm

Отличное решение.

Мне в этой связи было бы интересно узнать три вещи:

1. Какие ещё интерфейсы (и как) можно использовать для связи Arduino-ESP
2. Как из ESP сделать прозрачный Wi-Fi шилд для любой Ардуины
3. Как можно связать 2 Ардуины, чтобы получить контроллер 2 в 1
Lans
Сообщения: 9
Зарегистрирован: Пн сен 26, 2016 12:11 pm
Благодарил (а): 0
Поблагодарили: 0

Re: ESP8266 wifi gate

Сообщение Lans » Вс окт 09, 2016 7:32 pm

Отличная идея!
Еще можно добавить прошивку Ардуины по сети, подобное реализовано здесь: http://samopal.pro/arduino-esp8266/

Alex, кстати про пункт 2 - как раз оно, UART через Telnet с организацией виртуального порта на компьютере.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: ESP8266 wifi gate

Сообщение sergejey » Пн окт 10, 2016 1:05 pm

serghei писал(а):Здравствуйте. То есть насколько я понял ESP подключаем к любой ардуине ( в том числе с АМС ) и по Wi-Fi передаем данные в МД, которые сыплются в сериал порт? Вообще шикарно получается. Надо только разобраться со скетчем и знать ,что необходимо дописать для отправки.
Да, всё что сыплется в сериал порт можно отправить по http на любой сервер. Только желательно установить фильтр, чтобы на самом деле не всё отправлять.

Для отправки ничего дописывать не нужно (на стороне скетча по крайней мере), всё уже там есть.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: ESP8266 wifi gate

Сообщение sergejey » Пн окт 10, 2016 1:09 pm

Alex писал(а):Отличное решение.
Мне в этой связи было бы интересно узнать три вещи:
1. Какие ещё интерфейсы (и как) можно использовать для связи Arduino-ESP
Я использовал serial на стандартных пинах, чтобы скетчи ардуиновские не нужно было править при подключении этого устройства. Можно использовать SoftSerial на нестандартных портах. Возможно, ещё какие-то интерфейсы, но я не пробовал.
Alex писал(а):2. Как из ESP сделать прозрачный Wi-Fi шилд для любой Ардуины
Именно для этого и задумано устройство. К любой ардуине подключаем указанный девайс на ESP и получаем трансляцию по http всего, что ардуина выводит через Serial.println. Ну и возможность отправки обратных команд.
Alex писал(а):3. Как можно связать 2 Ардуины, чтобы получить контроллер 2 в 1
По Serial самое простое. А через SoftSerial можно хоть целую кучу их связать для обмена сообщениями.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Pooh
Сообщения: 74
Зарегистрирован: Вт дек 31, 2013 2:03 pm
Откуда: Самара
Благодарил (а): 25 раз
Поблагодарили: 5 раз

Re: ESP8266 wifi gate

Сообщение Pooh » Пн окт 10, 2016 7:31 pm

sergejey писал(а): ...* Настройка пересылки данных http-запросом (адрес посылки, фильтр)
* Отправка данных в подключенный контроллер с помощью HTTP API (запрос на http://шлюз/send?data=даные)..
А почему не MQTT?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: ESP8266 wifi gate

Сообщение sergejey » Пн окт 10, 2016 8:41 pm

Pooh писал(а):
sergejey писал(а): ...* Настройка пересылки данных http-запросом (адрес посылки, фильтр)
* Отправка данных в подключенный контроллер с помощью HTTP API (запрос на http://шлюз/send?data=даные)..
А почему не MQTT?
Можно и MQTT, это не принципиально. Лично мне проще с http, т.к. не надо дополнительно устанавливать брокер.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: ESP8266 wifi gate

Сообщение Alex » Пн окт 10, 2016 10:21 pm

2. Как из ESP сделать прозрачный Wi-Fi шилд для любой Ардуины

Именно для этого и задумано устройство. К любой ардуине подключаем указанный девайс на ESP и получаем трансляцию по http всего, что ардуина выводит через Serial.println. Ну и возможность отправки обратных команд.
Тут не очень понятно. АМС работает на Меге и использует Езернет в качестве транспорта. Он же работает и на ESP и использует Wi-Fi в качестве транспорта.

Что нужно сделать, чтобы сервер работал на Меге, но в качестве транспорта использовал Wi-Fi ?

Тупо поменять

Код: Выделить всё

void sendErrorAnswer(char mess[], EthernetClient cl) {
  cl.print(mess);
  cl.println(F(" ERROR"));
  cl.println(F("Connnection: close"));
  cl.println();
} 
на

Код: Выделить всё

void sendErrorAnswer(char mess[]) {
  Serial.print(mess);
  Serial.println(F(" ERROR"));
  Serial.println(F("Connnection: close"));
  Serial.println();
} 
Или такой фокус не пройдёт?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: ESP8266 wifi gate

Сообщение sergejey » Вт окт 11, 2016 10:48 am

Alex писал(а):
2. Как из ESP сделать прозрачный Wi-Fi шилд для любой Ардуины
Именно для этого и задумано устройство. К любой ардуине подключаем указанный девайс на ESP и получаем трансляцию по http всего, что ардуина выводит через Serial.println. Ну и возможность отправки обратных команд.
Тут не очень понятно. АМС работает на Меге и использует Езернет в качестве транспорта. Он же работает и на ESP и использует Wi-Fi в качестве транспорта.
Что нужно сделать, чтобы сервер работал на Меге, но в качестве транспорта использовал Wi-Fi ?

Тупо поменять

Код: Выделить всё

void sendErrorAnswer(char mess[], EthernetClient cl) {
  cl.print(mess);
  cl.println(F(" ERROR"));
  cl.println(F("Connnection: close"));
  cl.println();
}
на

Код: Выделить всё

void sendErrorAnswer(char mess[]) {
  Serial.print(mess);
  Serial.println(F(" ERROR"));
  Serial.println(F("Connnection: close"));
  Serial.println();
}
Или такой фокус не пройдёт?
Честно говоря, не очень понимаю, вопроса. Это устройство не замена оборудованию, которое уже имеет свой стек работы с сетью. Назначение шлюза лишь в том, чтобы пересылать вывод с подключенного контроллера (через Serial.println с учётом фильтра) на указанный в настройках шлюза URL в качестве http-уведомления (а не в браузер пользователя). Просто замена cl.println на Serial.println не подойдёт, т.к. у вас организован свой веб-интерфейс со своей логикой ответов в браузер мользователя. Шлюз предназначен для устройств у которых нет веб-интерфейса, а есть только обмен через Serial, как в примере в первом сообщении.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить