如何修复由http.GET();引起的“大师冥想错误”?

时间:2019-06-07 14:55:32

标签: http-get esp32

我想从esp32在我的Web服务器上发送数据。 ESP32无法进入网站并重启。

我使用了Arduino IDE的实例。 我试图发布(htt.POST(“ X”))一些东西,并得到相同的错误。 我标记了代码以查找导致问题的行。 谷歌搜索。

...
msg="192.168.4.22/parametr";
if(WiFi.status() == WL_CONNECTED){ 

   if(client.connect(host,httpPort)){
      http.begin(msg); 
      Serial.print("0");
      Serial.print("[HTTP] GET...\n");
      int httpCode = http.GET();
      Serial.print("1");    
...

我希望进入网站,但现在esp32在实现http.GET()时会重新启动,并且从不打印“ 1”。 错误消息:Guru Meditation错误:核心1出现紧急情况(LoadProhibited)。未处理异常。

1 个答案:

答案 0 :(得分:0)

您传递给http.begin()的URL不正确。您需要包括http://前缀(请参见here)。从语义上讲,命名此变量url而不是msg更有意义。

还...检查http.begin()的返回值-以防仍然失败。

    const char *url = "http://192.168.4.22/parametr";
    // Check Wi-Fi connected, etc.

    if (!http.begin(url)) {
        Serial.println("HTTP client failed to connect ...");
    }
    else {
        int httpCode = http.GET();
        // etc.
    }

LoadProhibited致命错误表示尝试读取或写入无效的内存位置。当库无法解析您提供的URL时,HTTPClient对象的某些成员可能未被初始化。

日志输出

为协助调试,请尝试将Arduino IDE中的“核心调试级别”设置为“调试”。

  

Arduino IDE->工具->核心调试级别->调试

这将确保ESP日志消息(例如可能打印if initialization of the HTTP client fails)将在串行端口上打印。

例如,这是日志输出,我看到我是否未能在URL中包含http://协议说明符(更改核心调试级别之后)。

ESP32 log output for HTTP client