• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос посылка сообщения от ESP8266 в браузер\app inventor

Добрый день.
Прошу Вашей помощи.
Начал изучение ESP8266. Подключил к WiFi. Отравляю запросы с браузера или приложения App Inventor формата (http://192.168.0.12/Led1/0 и http://192.168.0.12/Led1/1) . Он отвечает строкой формата
if(req.indexOf("/Led1/1") != -1)
{
digitalWrite(4, 0);
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\Первое реле включено";
client.print(s);
Serial.println("Led1 On");
}

Хочу добавить пару кнопок. Теперь у меня вопрос, возможно ли так сделать , чтобы ESP отвечала без запроса браузера или приложения строкой такого же формата ?
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\Первая кнопка нажата";
client.print(s);

Пример кода
Код:
#include <ESP8266WiFi.h>
// Имя и пароль вашей сети WiFi
const char* ssid = "WiFi";
const char* password = "12345678";
WiFiServer server(80);
void setup()
    {
      Serial.begin(115200);
      delay(10);
    
      // Подготовка GPIO OUT
      pinMode(4, OUTPUT);
      digitalWrite(4, 0);

     // Подготовка GPIO OUT
      pinMode(14, INPUT_PULLUP);
      // присваиваем статичесий IP адрес
      WiFi.mode(WIFI_STA); // режим клиента
      WiFi.config(IPAddress(192,168,0,12),IPAddress(192,168,0,1),IPAddress(255,255,255,0),IPAddress(192,168,0,1));  
      WiFi.begin(ssid, password);
     
      // Ожидание подключения
       while (WiFi.status() != WL_CONNECTED)
             {
              delay(500);
              Serial.print(".");
             }
      // Запуск сервера
         server.begin();
         Serial.println("Server started");
      // Вывод полученного IP адреса
         Serial.println(WiFi.localIP());
     }
 
void loop()
  {
       // Проверка подключения
      WiFiClient client = server.available();

      if (digitalRead (14) == LOW )
         {
           //Как мне в обработчике кнопки послать в браузер стороку без запроса от  браузера.

    
     if (!client)
         {
          return;
         }
    
        // Ожидание данных
        Serial.println("new client");
        while (!client.available())
        {
         delay(1);
        }
    
         // Чтение первой строки запроса
         String req = client.readStringUntil('\r');
         Serial.println(req);
         client.flush();
    
        // Работа с GPIO

        if(req.indexOf("/Led1/1") != -1)                                                         
          {
           digitalWrite(4, 0);
           String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\Первое реле включено";
           client.print(s);
           Serial.println("Led1 On");
          }   
        else if (req.indexOf("/Led1/0") != -1)
          {
           digitalWrite(4, 1);
           String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\Первое реле выключено";
           client.print(s);
           Serial.println("Led1 Off");
          }
        else // Если неверный запрос написать об ошибке
          {
           Serial.println("invalid request");
           String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nInvalid request";
           s += "</html>\n";
           client.print(s);
           //client.stop();
           return;
           }      
           client.flush();
           delay(1);
  }
 

shavrin777

New member
Я програмирую под lua, не знаю как там дела на ардуино обстоят, но могу попробовать посоветоватьдля браузера использовать в веб сервере websoket(websoket !server на ардуину поставить NodeMCU websockets tutorial - Hackster.io) или mqtt(к сожалению библиотеку не нашёл, но пример веб страницы дать могу)
HTML:
<html lang="ru">
<head>
<meta charset="utf-8">

<script> 
var tes1; var test2; //объявление переменных
</script>
<script>
// Create a client instance
client = new Paho.MQTT.Client("iot.eclipse.org", Number(80), "/ws","(clientID любой но отличающийся у браузера и у esp)");

// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

// connect the client
client.connect({onSuccess:onConnect});


// called when the client connects
function onConnect() {

  // Once a connection has been made, make a subscription and send a message.
  console.log("onConnect");
  client.subscribe("(Топик 1 любой ,но одинаковый и на модуле и на esp)"); //удобней делать так                                             client.subscribe("(назв проекта)\(топик для конкретной переменной)");   
  client.subscribe("(Топик 2 любой ,но одинаковый и на модуле и на esp)"); //названия в первых скобках одинаковые    client.subscribe("(назв проекта)\(топик для конкретной переменной)");
}

// called when the client loses its connection
function onConnectionLost(responseObject) {
  if (responseObject.errorCode !== 0) {
    console.log("onConnectionLost:"+responseObject.errorMessage);
  }
  client.connect({onSuccess:onConnect});
}

// called when a message arrives
function onMessageArrived(message) { 

  if (message.destinationName == "(Топик 1)") {test1 = message.payloadString} //распределение сообщения по топикам и вывод в переменную
  if(message.destinationName == "(Топик 2)") {test2 = message.payloadString}

  document.getElementById('test1').innerText=test1;  // вывод в элемент с id test 1
  document.getElementById('test2').innerText=test2; // обязательно, сколько здесь document.getElementById , столько и на виз части элеиентов
                                                                                                  // если здесь ещё один добавишь , то добавляй и один в body

  console.log("onMessageArrived: "+message.payloadString+" "+message.destinationName); // запись в лог браузера
}
</script>
</head>
<body>


<span id='test1'></span>   <span id=test2'></span> // вот элементы в которые выводятся значения
если ещё что то надо , постараюсь ответить.
 

shavrin777

New member
так как не работаю в arduino ide с кодом для неё врятли смогу помочь , но спрашивай
 

shavrin777

New member
lua это lua
С это C
С это arduino ide
lua это прошивка nodemcu и программирование через ESPlorer
 

newnew

New member
Я програмирую под lua, не знаю как там дела на ардуино обстоят, но могу попробовать посоветоватьдля браузера использовать в веб сервере websoket(websoket !server на ардуину поставить NodeMCU websockets tutorial - Hackster.io) или mqtt(к сожалению библиотеку не нашёл, но пример веб страницы дать могу)
HTML:
<html lang="ru">
<head>
<meta charset="utf-8">

<script>
var tes1; var test2; //объявление переменных
</script>
<script>
// Create a client instance
client = new Paho.MQTT.Client("iot.eclipse.org", Number(80), "/ws","(clientID любой но отличающийся у браузера и у esp)");

// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

// connect the client
client.connect({onSuccess:onConnect});


// called when the client connects
function onConnect() {

  // Once a connection has been made, make a subscription and send a message.
  console.log("onConnect");
  client.subscribe("(Топик 1 любой ,но одинаковый и на модуле и на esp)"); //удобней делать так                                             client.subscribe("(назв проекта)\(топик для конкретной переменной)");  
  client.subscribe("(Топик 2 любой ,но одинаковый и на модуле и на esp)"); //названия в первых скобках одинаковые    client.subscribe("(назв проекта)\(топик для конкретной переменной)");
}

// called when the client loses its connection
function onConnectionLost(responseObject) {
  if (responseObject.errorCode !== 0) {
    console.log("onConnectionLost:"+responseObject.errorMessage);
  }
  client.connect({onSuccess:onConnect});
}

// called when a message arrives
function onMessageArrived(message) {

  if (message.destinationName == "(Топик 1)") {test1 = message.payloadString} //распределение сообщения по топикам и вывод в переменную
  if(message.destinationName == "(Топик 2)") {test2 = message.payloadString}

  document.getElementById('test1').innerText=test1;  // вывод в элемент с id test 1
  document.getElementById('test2').innerText=test2; // обязательно, сколько здесь document.getElementById , столько и на виз части элеиентов
                                                                                                  // если здесь ещё один добавишь , то добавляй и один в body

  console.log("onMessageArrived: "+message.payloadString+" "+message.destinationName); // запись в лог браузера
}
</script>
</head>
<body>


<span id='test1'></span>   <span id=test2'></span> // вот элементы в которые выводятся значения
если ещё что то надо , постараюсь ответить.
День добрый!
А Вы не использовали функции http.post() для передачи на сайт данных с ESP?
Есть такая конструкция:
var1=1
var2=250
var3=1


http.post('http://mysite.ru/test.php',
'Content-Type: application/x-www-form-urlencoded\r\n',
'Term='..var2..'&Rele='..var3..'&ID='..var1,
-- function(code,data) print(code,data)end)
function (code,data)
if(code < 0) then
print("HTTP request failed.")
else
print("Sent to the web OK")
end
end)

Результатом её выполнения является:

Sent to the web OK

Видимо POST запрос отправлен на сайт?...

Как посмотреть на сайте пришёл он или нет?
может туплю, пардон....
 

shavrin777

New member
понял да скорее всего отправлен и я post не пользовался, сейчас попробую через mqtt
 
Последнее редактирование:
Сверху Снизу