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

Нужно поправить сервер и клиентов на ESP8266

viklinker

New member
Задача.

Есть модуль, который выступает в качестве сервера. Он раздает wifi и на нем же крутиться веб сервер, на котором опубликована одна страница с кнопкой. По нажатию этой кнопки идет передача сигнала(wifi) на плату , которая выступает клиентом . К плате подсоединен моторчик, получает команду и начинает крутить двигатель.
Пролема в том, что если клиент один, то все работает как надо. Если клиентов несколько, то работает черти как или вообще не работает.
Помощь нужна оперативно.
 

edw

New member
Понятно, что будет непонятно, если на одну кнопку одновременно нажимают несколько товарищей.
 

edw

New member
Оба клиента перестают получать команду
На рисунке написано что клиент подключается и запрашивает состояние кнопки
По нажатию этой кнопки идет передача сигнала(wifi) на плату
Каким все таки образом клиент получает команду? Открывает ту же страницу с кнопкой и парсит состояние кнопки?
 

viklinker

New member
На рисунке написано что клиент подключается и запрашивает состояние кнопки

Каким все таки образом клиент получает команду? Открывает ту же страницу с кнопкой и парсит состояние кнопки?
Код:
void ThempRead(String &themp)
{
  String currRates = "";
  readingState = false;
  stateRead = false;
  // Пытаемся получить данные со страницы
  if (!client.connect(http_site, http_port))
  {
  }
    client.println("GET / HTTP/1.1");
    client.print("Host: ");
    client.println(http_site);
    client.println("Connection: close");
    client.println();
    String currentLine = "";

    while (!stateRead)
    {
      kol_neudah++;
      // Serial.print(kol_neudah);
      if (kol_neudah > 100000)
      {
        ESP.deepSleep(sek_Sleep); // 20 секунд
      }
      char inChar = client.read();
      currentLine += inChar;
      if (inChar == '\n')
      {
        currentLine = "";
      }
      // Строка с данными получена, начинаем её обрабатывать
      if (currentLine.endsWith("status:"))
      {
        readingState = true;
      }
      else if (readingState)
      {
        if (!currentLine.endsWith(";"))
        {
          currRates += inChar;
        }
        else
        {
        
          themp = currRates.substring(0, currRates.length());
          stateRead = true; // ставим флаг что сообщение прочитано
                            // Serial.print("themp =");
          //Serial.println(themp);
          client.stop();
        }
      }
    }
    currentLine = "";

       Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  // Serial.println(" nou CONNECTED");


}
[/QUOTE]
 

edw

New member
О чем вот такая ничем не обязывающая строчка?
if (!client.connect(http_site, http_port))
{
}
 

edw

New member
Ну что тут сказать:
запрос страницы идет в любом случае, даже если нет client.connected()
client.read() уходит в непонятный мне цикл со снами без контроля состояния client.available()
вероятно там и зависает по полчаса
 

viklinker

New member
Ну что тут сказать:
запрос страницы идет в любом случае, даже если нет client.connected()
client.read() уходит в непонятный мне цикл со снами без контроля состояния client.available()
вероятно там и зависает по полчаса
В сон специально погружаю, там устройство от аккумулятора, чтобы не жрал батарейку, кидаю его в сон
 

edw

New member
Выход из цикла client.read() осуществляется по приходу определенной строки символов
которой может не случиться
 
Сверху Снизу