• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Последнее редактирование:
Сверху Снизу