问题描述
我正在尝试为ESP32芯片编写代码,该代码从DHT22传感器接收读数,将其打包为json文件,然后将其发送至Flask服务器。一切正常,直到我尝试开机自检,然后收到以下错误:
ListView.builder
我对此问题进行了详尽的搜索,但没有结果,我也不知道发生了什么。谁能提供解决此问题的见识?
这是我的Arduino代码:
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400d3488 PS : 0x00060030 A0 : 0x800d355c A1 : 0x3ffb1bb0
A2 : 0x00000000 A3 : 0x3ffb1bff A4 : 0x00000001 A5 : 0x00000001
A6 : 0x00000000 A7 : 0x00000000 A8 : 0x00000000 A9 : 0x00000000
A10 : 0x00000000 A11 : 0x3ffcb8fc A12 : 0x00000050 A13 : 0x00000001
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x0000000a EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000008 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0xffffffff
这里有一些print语句,这些语句将打印出各种内容,具体取决于它进入代码的距离。它可以很好地打印出json文档,但不会打印出“ Got httpCode”。下面是我的Flask服务器代码:
#include <HTTPClient.h>
#include <WiFi.h>
#include <DHT.h>
#include <ArduinoJson.h>
#define DHTTYPE DHT22
const char* ssid = "ssid";
const char* password = "password";
uint8_t sensor = 16;
DHT dht(sensor,DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected!");
}
void loop() {
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://192.168.10.5:8090/");
http.addHeader("Content-Type","text/plain");
Serial.println("Began http on Flask");
const int cap = JSON_OBJECT_SIZE(2);
StaticJsonDocument<cap> doc;
Serial.println("Created json document");
doc["temperature"] = dht.readTemperature();
doc["humidity"] = dht.readHumidity();
Serial.println("Read temperature and humidity correctly");
char output[256];
serializeJsonPretty(doc,output);
Serial.println(output);
//Code will give back error after trying to POST
int httpCode = http.POST(output);
Serial.println("Got httpCode");
if(httpCode > 0) {
Serial.println(httpCode);
} else Serial.println("Error in Connection");
http.end();
}
delay(10000);
}
预先感谢您的帮助。
解决方法
在使用 WebSockets 时,我也遇到此错误。
事实证明,我用于接收邮件的缓冲区(全局声明)是附加新邮件,而不是覆盖现有内容。因此,进行了非法的内存写入尝试,设备惊慌失措并重新启动。
解决方案: 我只是在 onWebSocketEvent()函数内部本地声明了缓冲区,并且解决了覆盖问题,因为在每个事件上都重新声明了缓冲区,从而防止了非法的内存写入尝试。该设备再也不会惊慌。
,我在回调过程中遇到了Guru错误,原因是因为微型内存不足。解决方案是摆脱未使用的库,并使用指针而不是创建局部变量。