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

Нужна помощь Webserver проблема с отправкой

kab

New member
Код из примера модератора форума Виктора. добавлено пара строк которые опубликовал постом выше.
Прикольно память действительно заканчивается
Начинает
Val = 1
34648
Val = 2
34680
заканчивает
Val = 353
984
Val = 354
888
Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
Закомментируйте в loop всё кроме HandleClient и вывода памяти. Запустите еще раз.
 

MihaNN52

Member
вынес
HTTP.on("/command", HTTP_GET, []() {
HTTP.send(200, "text/json", regCommands);
});

в сетап память не пропадает)
 

MihaNN52

Member
Код:
 HTTP_init();
ESP.getFlashChipSize();
ESP.getFlashChipSpeed(); 
HTTP.on("/command", HTTP_GET, []() {
    HTTP.send(200, "text/json", regCommands);
  });

  //Wire.begin();

}

void loop() {
  HTTP.handleClient();
  delay(10);
   if (millis() - time1 >= 100) {
    time1 = millis();

  val++;
  regCommands ="{" ;
  regCommands += "VAL";
  regCommands += ":";
  regCommands += val;
  regCommands += "}";
  HTTP.send(200, "text/json", regCommands);
  
 
  printf("Val = %d\n",val);
  Serial.println(ESP.getFreeHeap());
   }


 
}
Так вроде все работает уже val 1000
 

kab

New member
объясняю, что HandleClient на каждом цикле обрабатывает все HTTP.on(), которые один раз прописываются в Setup. Еще вопросы?
Из loop убери все кроме HandleClient. Вся логика - программируется внутри функций, вызываемых, или описанных в HTTP.on()
 

MihaNN52

Member
Из loop убери все кроме HandleClient. Вся логика - программируется внутри функций, вызываемых, или описанных в HTTP.on()
это понял, все разойдется по своим функциям
скажи как буквально читается эта функция
HTTP.on("/command", HTTP_GET, []() {
HTTP.send(200, "text/json", regCommands);
});
 

Юрий Ботов

Moderator
Команда форума
"Для каждого поступившего запроса в котором присутствует /command пришедшего через HTTP GET выполнить HTTP.send(...)" Меня тоже колбасит от этих [] - это массив запросов пришедших за период между вызовами HTTP.handleClient();
 

gerkimuyda

New member
"Для каждого поступившего запроса в котором присутствует /command пришедшего через HTTP GET выполнить HTTP.send(...)" Меня тоже колбасит от этих [] - это массив запросов пришедших за период между вызовами HTTP.handleClient();
Тоже не знаком был с []
Тогда правильнее будет:
Функцией HTTP.on на каждый HTTP_GET запрос с подстрокой "/command", вызвать безыменную функцию, которая выполнит код:
HTTP.send(200, "text/json", regCommands); - вызов функции отправки HTTP ответа с заголовками:
кодом ответа 200 и Content-Type: text/json
и телом ответа - взятого из строки regCommands
 

MihaNN52

Member
Спасибо всем. Сбило с толку то что по факту ничего отправлять ни куда не надо, все само забирается .
Получилось вот так.
Код:
HTTP.on("/eeprom", HTTP_GET, []() {//отправка строки eeprom
      String eeprom_str = "{";
      eeprom_str += "\"eeprom\":" + String(eeprom_data);
      //eeprom_str += ", \"str_xxx\":" + String(xxx);
      eeprom_str += "}";
      HTTP.send(200, "text/json", eeprom_str);
      eeprom_str = "";//
});
хочу сохраненные данные выводить в веб из eeprom 24LC512. Инфы много она хранить будет, по этому предстоит подумать. Обломало меня Wire.requestFrom которая считывает по моему всего 32байта или 36.... Хотел страницами читать но придется по 16 байт. STM может читать страницами без проблем но передавать их жуть как не удобно. По этому горожу аля мультимастер i2c - два мк одна еепром. Кто нибудь пробовал мультимастер на i2c? Пока наблюдаю все нормально. Если будут сбои поставлю два транзистора чтоб отключать линию i2c от ESP на время работы с памятью STM.
 

kab

New member
"Для каждого поступившего запроса в котором присутствует /command пришедшего через HTTP GET выполнить HTTP.send(...)" Меня тоже колбасит от этих [] - это массив запросов пришедших за период между вызовами HTTP.handleClient();
Для полноты "счастья" остается только добавить следующее:
- Конструкцию
Код:
HTTP.on("/eeprom", HTTP_GET, []() {//отправка строки eeprom
      String eeprom_str = "{";
      eeprom_str += "\"eeprom\":" + String(eeprom_data);
      //eeprom_str += ", \"str_xxx\":" + String(xxx);
      eeprom_str += "}";
      HTTP.send(200, "text/json", eeprom_str);
      eeprom_str = "";//
});
можно заменить на более читаемую конструкцию

Код:
HTTP.on("/eeprom", HTTP_GET, my_loved_func);
плюс где-нибудь перед Setup описание

Код:
void my_loved_func() {//отправка строки eeprom
      String eeprom_str = "{";
      eeprom_str += "\"eeprom\":" + String(eeprom_data);
      //eeprom_str += ", \"str_xxx\":" + String(xxx);
      eeprom_str += "}";
      HTTP.send(200, "text/json", eeprom_str);
      eeprom_str = "";//
}
"как-то так"(с)
 
Сверху Снизу