【问题标题】:How to fix "Guru Meditation Error" caused by http.GET();?如何修复由 http.GET(); 引起的“Guru Meditation Error”?
【发布时间】:2019-06-07 14:55:32
【问题描述】:

我想在我的网络服务器上从 esp32 发送数据。 ESP32 无法访问网站并重新启动。

我使用了 Arduino IDE 中的 exaples。 我试图发布(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 错误:Core 1 panic'ed (LoadProhibited)。异常未处理。

【问题讨论】:

    标签: http-get esp32


    【解决方案1】:

    您传递给 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:// 协议说明符(更改核心调试级别后),这是我看到的日志输出。

    【讨论】:

    • 非常感谢,我之前使用了http前缀,但可能在解决其他问题时,我删除了它。我用msg而不是url,因为之前是TCP连接,我离开了。
    • @PawełStępniak:不客气。添加http:// 前缀和/或检查http.begin() 的返回值是否为您解决了问题?顺便说一句:我已经通过更改 Arduino IDE 中的日志级别来改进调试体验的建议更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多