[GH-ISSUE #1759] [ 18356][E][WebServer.cpp:638] _handleRequest(): request handler not found #1487

Closed
opened 2026-02-28 01:30:16 +03:00 by kerem · 1 comment
Owner

Originally created by @tozehu on GitHub (Aug 15, 2024).
Original GitHub issue: https://github.com/tzapu/WiFiManager/issues/1759

Basic Infos

Hardware

WiFimanager Master

Esp8266/Esp32: Esp32

Hardware: ESP32 wroom 32d

[env:esp32dev]

Core Version: vs code PIO

Espressif 32 6.8.1

[env:esp32dev]
platform = https://github.com/platformio/platform-espressif32.git
board = esp32dev
framework = arduino
lib_deps =
https://github.com/tzapu/WiFiManager.git
bblanchon/ArduinoJson@^7.1.0

Description

After compiling and uploading to ESP32 using VS Code PIO IDE, when entering the Wi-Fi configuration page, the serial output shows the following error:
[18356][E][WebServer.cpp:638] _handleRequest(): request handler not found

When using Arduino to upload, it works normally.

Settings in IDE

Module: NodeMcu-32

Additional libraries:

Sketch

#BEGIN
#include <FS.h>  
#include <Arduino.h>
#include <WiFiManager.h> 
#include "AudioSampler.h"
#include <WiFi.h>
#ifdef ESP32
  #include <SPIFFS.h>
#endif
#include <ArduinoJson.h>  


//--------定义常量---------


#define uS_TO_S_FACTOR 1000000ULL
#define MUTEPIN 2                 //触摸指示灯引脚
#define TOUCH_THRESHOLD 40        //触摸灵敏度阈值,越大越灵敏
#define TRIGGER_PIN 0            //触摸引脚,现用于触发Wi-Fi配置页面



char SERVER_IP[40]="192.168.1.60";
char SERVER_PORT[7] = "8888";
IPAddress serverIP; // 用于存储转换后的 IP 地址
uint16_t serverPort; // 用于存储转换后的端口号
WiFiClient wifiClient;
bool shouldSaveConfig = false;

//-------定义变量----------
volatile bool wifiConnected = true;
volatile bool mute = false;
//volatile int statusLedState = LOW;
volatile unsigned long sinceLastTouch = 0;
volatile bool inited = false;
// i2s配置
i2s_config_t i2sConfig = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
                           .sample_rate = 44100,
                           .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
                           .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
                           //.communication_format =
                           //  i2s_comm_format_t(I2S_COMM_FORMAT_I2S),
                           .communication_format=
                           //i2s_comm_format_t(I2S_COMM_FORMAT_I2S_MSB),
                           i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),
                           .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
                           .dma_buf_count = 4,
                           .dma_buf_len = 1024,
                           .use_apll = false,
                           .tx_desc_auto_clear = false,
                           .fixed_mclk = 0
                         };
// i2s pin配置
i2s_pin_config_t i2SPinConfig = { .bck_io_num = GPIO_NUM_14,
                                  .ws_io_num = GPIO_NUM_15,
                                  .data_out_num = I2S_PIN_NO_CHANGE,
                                  .data_in_num = GPIO_NUM_32
                                };
AudioSampler *audioSampler = NULL;

WiFiManager wm;
void configSaveCallback();
//void configModeCallback();
WiFiManagerParameter custom_SERVER_IP("server", "tcp server", SERVER_IP, 40);
WiFiManagerParameter custom_SERVER_PORT("port", "tcp port", SERVER_PORT, 6);

void configModeCallback(WiFiManager *myWiFiManager) {
  Serial.println("Entered config mode");
}

/**
 * 将IP地址字符串转换为IPAddress对象。
 * 
 * @param str 指向IP地址字符串的指针,格式为 "dd.dd.dd.dd"。
 * @return 返回一个IPAddress对象,如果输入字符串不符合格式,则返回一个全0的IPAddress对象。
 * 
 * 本函数使用sscanf函数从字符串中解析出四个整数,分别代表IP地址的四部分,
 * 然后将这四个整数组合成一个IPAddress对象返回。如果字符串不包含四部分整数,
 * 则返回一个全0的IPAddress对象表示转换失败。
 */

IPAddress ConvertIP(char *str)
{
  // 定义四个整数变量,用于存储分割后的IP地址的四部分
  int ip1, ip2, ip3, ip4;
  IPAddress temp_serverIP;

  // 使用sscanf函数从str中解析出四个整数,如果成功解析出四部分,则继续执行,
  // 否则返回一个全0的IPAddress对象表示转换失败
  if (sscanf(str, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) == 4)
  {
    // 将解析出的四个整数组合成一个IPAddress对象,并返回
    temp_serverIP = IPAddress(ip1, ip2, ip3, ip4);
    return temp_serverIP;
  }
  else
  {
    // 如果解析失败,返回一个全0的IPAddress对象
    return IPAddress(0, 0, 0, 0);
  }
}

/**
   静音中断函数
*/
void muteTouch() {
  if (millis() - sinceLastTouch < 1000) return;
  sinceLastTouch = millis();
  mute = !mute;
  if (mute) {
    digitalWrite(MUTEPIN, HIGH);
  } else {
    digitalWrite(MUTEPIN, LOW);
  }
  Serial.print("mutetouched");
  
}
/**
   发送缓冲数组到服务器方法
   @param param
*/
void transmitTask(void *param) {
  AudioSampler *audioSampler = (AudioSampler *)param;
  //socket连接服务器
  WiFiClient *wifiClient = new WiFiClient();
  serverIP=ConvertIP(SERVER_IP);
  //serverIP = IPAddress(SERVER_IP);
  char* end;
  serverPort = (uint16_t)strtol(SERVER_PORT, &end, 10);
  // 将字符串形式的端口号转换为整数
  //serverPort = atoi(SERVER_PORT);
  //  while (!wifiClient->connect("192.168.43.121", 8888)) {
  Serial.println("conver server ip:"+serverIP.toString());
  Serial.println("conver server port:"+String(serverPort));
  while (!wifiClient->connect(serverIP, serverPort))
  {
    delay(100);
  }
  if (wifiClient->connected()==true)
  {
    Serial.println("tcp connected");
  }
  
  wifiClient->setNoDelay(true);
  const TickType_t xMaxBlockTime = pdMS_TO_TICKS(100);
  unsigned long startTime;
  unsigned long endTime;
  while (true) {
    // 等待队列通知
    uint32_t ulNotificationValue = ulTaskNotifyTake(pdTRUE, xMaxBlockTime);
    if (ulNotificationValue > 0) {
      //wifi连接上同时未静音才发送数据
      if (wifiConnected && mute) {
//        Serial.print("start-->");
//        startTime = millis();
//        Serial.print(startTime);
//        Serial.print("---->");
        //Serial.print("start send---->");
        int sendNum = wifiClient->write((uint8_t *)audioSampler->getTransmitBuffer(), audioSampler->getTransmitPackageSize());
        if(!wifiClient->connected())
        {
          Serial.println("send error");
          while (!wifiClient->connect(serverIP, serverPort))
          {
            delay(100);
          }
        }

//        Serial.print("end-->");
//        endTime = millis();
//        Serial.print(endTime);
//        Serial.print("---->");
//        Serial.print("total--->");
//        Serial.println(endTime - startTime);
      } else {
        //未连接时情况tcp缓存
        wifiClient->flush();

      }
    }
  }
}
void wifiEvent(WiFiEvent_t event){
  switch (event)
  {
  case SYSTEM_EVENT_STA_CONNECTED:
    wifiConnected = true;
    // led亮起
    //digitalWrite(STATUSPIN, HIGH);
    break;
  case SYSTEM_EVENT_STA_DISCONNECTED:
    // 回调会多次执行,所以要判断一下
    if (inited)
    {
      wifiConnected = false;
      //digitalWrite(STATUSPIN, LOW);
      ESP.restart();
    }
    break;
  default:
    break;
  }
}
void initWifi()
{
  wm.resetSettings();
  // 初始化文件系统
  // wm.resetSettings();
  wm.setDebugOutput(true);
  //wm.debugSoftAPConfig();
  //SPIFFS.format();
  if (!SPIFFS.begin()) {
    Serial.println("mounting filesystem failed.. trying to format");
    SPIFFS.format();
    Serial.println("trying again to mount FS...");
  }
  Serial.println("mounting FS...");
  

  if (SPIFFS.begin())
  {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json"))
    {
      Serial.println("reading config file");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile)
      {
        Serial.println("opened config file");
        size_t size = configFile.size();
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);

#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
       //DynamicJsonDocument json(1024);
        //auto deserializeError = deserializeJson(json, buf.get());
        JsonDocument json;
        auto deserializeError = deserializeJson(json, buf.get());
        serializeJson(json, Serial);
        if (!deserializeError)
        {
#else
        DynamicJsonBuffer jsonBuffer;
        JsonObject &json = jsonBuffer.parseObject(buf.get());
        json.printTo(Serial);
        if (json.success())
        {
#endif
          Serial.println("\nparsed json");
          strcpy(SERVER_IP, json["SERVER_IP"]);
          strcpy(SERVER_PORT, json["SERVER_PORT"]);
        }
        else
        {
          Serial.println("failed to load json config");
        }
        configFile.close();
      }
    }
  }
  else
  {
    Serial.println("failed to mount FS");
  }
  // 添加WiFi管理参数

  
  wm.setSaveConfigCallback(configSaveCallback);

  wm.setAPCallback(configModeCallback);

  // wm.setConfigResetCallback(configSaveCallback);
  IPAddress ip(192, 168, 145, 1);
  IPAddress gateway(192, 168, 145, 1);
  IPAddress subnet(255, 255, 255, 0);

  wm.setAPStaticIPConfig(ip, gateway, subnet);
  wm.setConnectTimeout(120);
  wm.addParameter(&custom_SERVER_IP);
  wm.addParameter(&custom_SERVER_PORT);

  if (!wm.autoConnect("ESP32-AP"))
  {
    Serial.println("failed to connect and hit timeout");
    delay(3000);
    ESP.restart();
    delay(5000);
  }
  Serial.println("Init Config Wifi");
  strcpy(SERVER_IP, custom_SERVER_IP.getValue());
  strcpy(SERVER_PORT, custom_SERVER_PORT.getValue());
  Serial.println("The values in the file are: ");
  Serial.println("\tSERVER_IP : " + String(SERVER_IP));
  Serial.println("\tSERVER_PORT : " + String(SERVER_PORT));

  if (shouldSaveConfig)
  {
    Serial.println("saving config");
#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
    //DynamicJsonDocument json(1024);
    JsonDocument json;
#else
    DynamicJsonBuffer jsonBuffer;
    JsonObject &json = jsonBuffer.createObject();
#endif
    json["SERVER_IP"] = SERVER_IP;
    json["SERVER_PORT"] = SERVER_PORT;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile)
    {
      Serial.println("failed to open config file for writing");
    }

#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
    serializeJson(json, Serial);
    serializeJson(json, configFile);
#else
    json.printTo(Serial);
    json.printTo(configFile);
#endif
    configFile.close();
  }

  Serial.println("local ip");
  Serial.println(WiFi.localIP());
  WiFi.onEvent(wifiEvent);
}

void configSaveCallback() {
  strcpy(SERVER_IP, custom_SERVER_IP.getValue());
  strcpy(SERVER_PORT, custom_SERVER_PORT.getValue());
  Serial.println("The values in the file are: ");
  Serial.println("\tSERVER_IP : " + String(SERVER_IP));
  Serial.println("\tSERVER_PORT : " + String(SERVER_PORT));

  /* if (shouldSaveConfig)
  {
    Serial.println("saving config");
#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
    //DynamicJsonDocument json(1024);
    JsonDocument json;
#else
    DynamicJsonBuffer jsonBuffer;
    JsonObject &json = jsonBuffer.createObject();
#endif
    json["SERVER_IP"] = SERVER_IP;
    json["SERVER_PORT"] = SERVER_PORT;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile)
    {
      Serial.println("failed to open config file for writing");
    }

#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
    serializeJson(json, Serial);
    serializeJson(json, configFile);
#else
    json.printTo(Serial);
    json.printTo(configFile);
#endif
    configFile.close();
  } */
    Serial.println("Config Saved");
    Serial.println("Should save config");
    shouldSaveConfig = true;
}
void setup()
{
    
    Serial.begin(115200);
    Serial.println("\n Starting");
    initWifi();

    pinMode(TRIGGER_PIN, INPUT);

    pinMode(MUTEPIN, OUTPUT);
    digitalWrite(MUTEPIN, LOW);





    audioSampler = new AudioSampler();
    TaskHandle_t transmitHandle;
    xTaskCreate(transmitTask, "transmitTask", 10240, audioSampler, 1,
                &transmitHandle);
    audioSampler->start(i2sConfig, i2SPinConfig, 2048, transmitHandle);
    touchAttachInterrupt(T0, muteTouch, TOUCH_THRESHOLD);
    inited = true;
}

void loop()
{

  /* if (digitalRead(TRIGGER_PIN) == HIGH)
  {
    Serial.println("Triggered");
    Serial.println(String(digitalRead(TRIGGER_PIN)));
    // wm.addParameter(&custom_SERVER_IP);
    // wm.addParameter(&custom_SERVER_PORT);
    delay(50);

    if (!wm.startConfigPortal("OnDemandAP"))
    {

      Serial.println("failed to connect and hit timeout");
      delay(3000);
      ESP.restart();
      delay(5000);
    }

    Serial.println("connected...yeey :)");
  } */
}

#END

Debug Messages

[ 18356][E][WebServer.cpp:638] _handleRequest(): request handler not found

Originally created by @tozehu on GitHub (Aug 15, 2024). Original GitHub issue: https://github.com/tzapu/WiFiManager/issues/1759 ### Basic Infos #### Hardware WiFimanager Master Esp8266/Esp32: Esp32 Hardware: ESP32 wroom 32d [env:esp32dev] Core Version: vs code PIO Espressif 32 6.8.1 [env:esp32dev] platform = https://github.com/platformio/platform-espressif32.git board = esp32dev framework = arduino lib_deps = https://github.com/tzapu/WiFiManager.git bblanchon/ArduinoJson@^7.1.0 ### Description After compiling and uploading to ESP32 using VS Code PIO IDE, when entering the Wi-Fi configuration page, the serial output shows the following error: [18356][E][WebServer.cpp:638] _handleRequest(): request handler not found When using Arduino to upload, it works normally. ### Settings in IDE Module: NodeMcu-32 Additional libraries: ### Sketch ```cpp #BEGIN #include <FS.h> #include <Arduino.h> #include <WiFiManager.h> #include "AudioSampler.h" #include <WiFi.h> #ifdef ESP32 #include <SPIFFS.h> #endif #include <ArduinoJson.h> //--------定义常量--------- #define uS_TO_S_FACTOR 1000000ULL #define MUTEPIN 2 //触摸指示灯引脚 #define TOUCH_THRESHOLD 40 //触摸灵敏度阈值,越大越灵敏 #define TRIGGER_PIN 0 //触摸引脚,现用于触发Wi-Fi配置页面 char SERVER_IP[40]="192.168.1.60"; char SERVER_PORT[7] = "8888"; IPAddress serverIP; // 用于存储转换后的 IP 地址 uint16_t serverPort; // 用于存储转换后的端口号 WiFiClient wifiClient; bool shouldSaveConfig = false; //-------定义变量---------- volatile bool wifiConnected = true; volatile bool mute = false; //volatile int statusLedState = LOW; volatile unsigned long sinceLastTouch = 0; volatile bool inited = false; // i2s配置 i2s_config_t i2sConfig = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate = 44100, .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, //.communication_format = // i2s_comm_format_t(I2S_COMM_FORMAT_I2S), .communication_format= //i2s_comm_format_t(I2S_COMM_FORMAT_I2S_MSB), i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S), .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, .dma_buf_count = 4, .dma_buf_len = 1024, .use_apll = false, .tx_desc_auto_clear = false, .fixed_mclk = 0 }; // i2s pin配置 i2s_pin_config_t i2SPinConfig = { .bck_io_num = GPIO_NUM_14, .ws_io_num = GPIO_NUM_15, .data_out_num = I2S_PIN_NO_CHANGE, .data_in_num = GPIO_NUM_32 }; AudioSampler *audioSampler = NULL; WiFiManager wm; void configSaveCallback(); //void configModeCallback(); WiFiManagerParameter custom_SERVER_IP("server", "tcp server", SERVER_IP, 40); WiFiManagerParameter custom_SERVER_PORT("port", "tcp port", SERVER_PORT, 6); void configModeCallback(WiFiManager *myWiFiManager) { Serial.println("Entered config mode"); } /** * 将IP地址字符串转换为IPAddress对象。 * * @param str 指向IP地址字符串的指针,格式为 "dd.dd.dd.dd"。 * @return 返回一个IPAddress对象,如果输入字符串不符合格式,则返回一个全0的IPAddress对象。 * * 本函数使用sscanf函数从字符串中解析出四个整数,分别代表IP地址的四部分, * 然后将这四个整数组合成一个IPAddress对象返回。如果字符串不包含四部分整数, * 则返回一个全0的IPAddress对象表示转换失败。 */ IPAddress ConvertIP(char *str) { // 定义四个整数变量,用于存储分割后的IP地址的四部分 int ip1, ip2, ip3, ip4; IPAddress temp_serverIP; // 使用sscanf函数从str中解析出四个整数,如果成功解析出四部分,则继续执行, // 否则返回一个全0的IPAddress对象表示转换失败 if (sscanf(str, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) == 4) { // 将解析出的四个整数组合成一个IPAddress对象,并返回 temp_serverIP = IPAddress(ip1, ip2, ip3, ip4); return temp_serverIP; } else { // 如果解析失败,返回一个全0的IPAddress对象 return IPAddress(0, 0, 0, 0); } } /** 静音中断函数 */ void muteTouch() { if (millis() - sinceLastTouch < 1000) return; sinceLastTouch = millis(); mute = !mute; if (mute) { digitalWrite(MUTEPIN, HIGH); } else { digitalWrite(MUTEPIN, LOW); } Serial.print("mutetouched"); } /** 发送缓冲数组到服务器方法 @param param */ void transmitTask(void *param) { AudioSampler *audioSampler = (AudioSampler *)param; //socket连接服务器 WiFiClient *wifiClient = new WiFiClient(); serverIP=ConvertIP(SERVER_IP); //serverIP = IPAddress(SERVER_IP); char* end; serverPort = (uint16_t)strtol(SERVER_PORT, &end, 10); // 将字符串形式的端口号转换为整数 //serverPort = atoi(SERVER_PORT); // while (!wifiClient->connect("192.168.43.121", 8888)) { Serial.println("conver server ip:"+serverIP.toString()); Serial.println("conver server port:"+String(serverPort)); while (!wifiClient->connect(serverIP, serverPort)) { delay(100); } if (wifiClient->connected()==true) { Serial.println("tcp connected"); } wifiClient->setNoDelay(true); const TickType_t xMaxBlockTime = pdMS_TO_TICKS(100); unsigned long startTime; unsigned long endTime; while (true) { // 等待队列通知 uint32_t ulNotificationValue = ulTaskNotifyTake(pdTRUE, xMaxBlockTime); if (ulNotificationValue > 0) { //wifi连接上同时未静音才发送数据 if (wifiConnected && mute) { // Serial.print("start-->"); // startTime = millis(); // Serial.print(startTime); // Serial.print("---->"); //Serial.print("start send---->"); int sendNum = wifiClient->write((uint8_t *)audioSampler->getTransmitBuffer(), audioSampler->getTransmitPackageSize()); if(!wifiClient->connected()) { Serial.println("send error"); while (!wifiClient->connect(serverIP, serverPort)) { delay(100); } } // Serial.print("end-->"); // endTime = millis(); // Serial.print(endTime); // Serial.print("---->"); // Serial.print("total--->"); // Serial.println(endTime - startTime); } else { //未连接时情况tcp缓存 wifiClient->flush(); } } } } void wifiEvent(WiFiEvent_t event){ switch (event) { case SYSTEM_EVENT_STA_CONNECTED: wifiConnected = true; // led亮起 //digitalWrite(STATUSPIN, HIGH); break; case SYSTEM_EVENT_STA_DISCONNECTED: // 回调会多次执行,所以要判断一下 if (inited) { wifiConnected = false; //digitalWrite(STATUSPIN, LOW); ESP.restart(); } break; default: break; } } void initWifi() { wm.resetSettings(); // 初始化文件系统 // wm.resetSettings(); wm.setDebugOutput(true); //wm.debugSoftAPConfig(); //SPIFFS.format(); if (!SPIFFS.begin()) { Serial.println("mounting filesystem failed.. trying to format"); SPIFFS.format(); Serial.println("trying again to mount FS..."); } Serial.println("mounting FS..."); if (SPIFFS.begin()) { Serial.println("mounted file system"); if (SPIFFS.exists("/config.json")) { Serial.println("reading config file"); File configFile = SPIFFS.open("/config.json", "r"); if (configFile) { Serial.println("opened config file"); size_t size = configFile.size(); std::unique_ptr<char[]> buf(new char[size]); configFile.readBytes(buf.get(), size); #if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6 //DynamicJsonDocument json(1024); //auto deserializeError = deserializeJson(json, buf.get()); JsonDocument json; auto deserializeError = deserializeJson(json, buf.get()); serializeJson(json, Serial); if (!deserializeError) { #else DynamicJsonBuffer jsonBuffer; JsonObject &json = jsonBuffer.parseObject(buf.get()); json.printTo(Serial); if (json.success()) { #endif Serial.println("\nparsed json"); strcpy(SERVER_IP, json["SERVER_IP"]); strcpy(SERVER_PORT, json["SERVER_PORT"]); } else { Serial.println("failed to load json config"); } configFile.close(); } } } else { Serial.println("failed to mount FS"); } // 添加WiFi管理参数 wm.setSaveConfigCallback(configSaveCallback); wm.setAPCallback(configModeCallback); // wm.setConfigResetCallback(configSaveCallback); IPAddress ip(192, 168, 145, 1); IPAddress gateway(192, 168, 145, 1); IPAddress subnet(255, 255, 255, 0); wm.setAPStaticIPConfig(ip, gateway, subnet); wm.setConnectTimeout(120); wm.addParameter(&custom_SERVER_IP); wm.addParameter(&custom_SERVER_PORT); if (!wm.autoConnect("ESP32-AP")) { Serial.println("failed to connect and hit timeout"); delay(3000); ESP.restart(); delay(5000); } Serial.println("Init Config Wifi"); strcpy(SERVER_IP, custom_SERVER_IP.getValue()); strcpy(SERVER_PORT, custom_SERVER_PORT.getValue()); Serial.println("The values in the file are: "); Serial.println("\tSERVER_IP : " + String(SERVER_IP)); Serial.println("\tSERVER_PORT : " + String(SERVER_PORT)); if (shouldSaveConfig) { Serial.println("saving config"); #if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6 //DynamicJsonDocument json(1024); JsonDocument json; #else DynamicJsonBuffer jsonBuffer; JsonObject &json = jsonBuffer.createObject(); #endif json["SERVER_IP"] = SERVER_IP; json["SERVER_PORT"] = SERVER_PORT; File configFile = SPIFFS.open("/config.json", "w"); if (!configFile) { Serial.println("failed to open config file for writing"); } #if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6 serializeJson(json, Serial); serializeJson(json, configFile); #else json.printTo(Serial); json.printTo(configFile); #endif configFile.close(); } Serial.println("local ip"); Serial.println(WiFi.localIP()); WiFi.onEvent(wifiEvent); } void configSaveCallback() { strcpy(SERVER_IP, custom_SERVER_IP.getValue()); strcpy(SERVER_PORT, custom_SERVER_PORT.getValue()); Serial.println("The values in the file are: "); Serial.println("\tSERVER_IP : " + String(SERVER_IP)); Serial.println("\tSERVER_PORT : " + String(SERVER_PORT)); /* if (shouldSaveConfig) { Serial.println("saving config"); #if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6 //DynamicJsonDocument json(1024); JsonDocument json; #else DynamicJsonBuffer jsonBuffer; JsonObject &json = jsonBuffer.createObject(); #endif json["SERVER_IP"] = SERVER_IP; json["SERVER_PORT"] = SERVER_PORT; File configFile = SPIFFS.open("/config.json", "w"); if (!configFile) { Serial.println("failed to open config file for writing"); } #if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6 serializeJson(json, Serial); serializeJson(json, configFile); #else json.printTo(Serial); json.printTo(configFile); #endif configFile.close(); } */ Serial.println("Config Saved"); Serial.println("Should save config"); shouldSaveConfig = true; } void setup() { Serial.begin(115200); Serial.println("\n Starting"); initWifi(); pinMode(TRIGGER_PIN, INPUT); pinMode(MUTEPIN, OUTPUT); digitalWrite(MUTEPIN, LOW); audioSampler = new AudioSampler(); TaskHandle_t transmitHandle; xTaskCreate(transmitTask, "transmitTask", 10240, audioSampler, 1, &transmitHandle); audioSampler->start(i2sConfig, i2SPinConfig, 2048, transmitHandle); touchAttachInterrupt(T0, muteTouch, TOUCH_THRESHOLD); inited = true; } void loop() { /* if (digitalRead(TRIGGER_PIN) == HIGH) { Serial.println("Triggered"); Serial.println(String(digitalRead(TRIGGER_PIN))); // wm.addParameter(&custom_SERVER_IP); // wm.addParameter(&custom_SERVER_PORT); delay(50); if (!wm.startConfigPortal("OnDemandAP")) { Serial.println("failed to connect and hit timeout"); delay(3000); ESP.restart(); delay(5000); } Serial.println("connected...yeey :)"); } */ } #END ``` ### Debug Messages [ 18356][E][WebServer.cpp:638] _handleRequest(): request handler not found
kerem closed this issue 2026-02-28 01:30:16 +03:00
Author
Owner

@tablatronix commented on GitHub (Aug 15, 2024):

I have never figured out what this is, I have seen it mentioned in the esp repo also with the same question

<!-- gh-comment-id:2291162260 --> @tablatronix commented on GitHub (Aug 15, 2024): I have never figured out what this is, I have seen it mentioned in the esp repo also with the same question
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/WiFiManager#1487
No description provided.