如何解决 wdt 重置,第一个原因:4,引导模式:(3,6) / NODEMCU 1.0 (ESP 8266) / ThingSpeak
Posted
技术标签:
【中文标题】如何解决 wdt 重置,第一个原因:4,引导模式:(3,6) / NODEMCU 1.0 (ESP 8266) / ThingSpeak【英文标题】:How to solve wdt reset, rst cause:4, boot mode:(3,6) / NODEMCU 1.0 (ESP 8266) / ThingSpeak 【发布时间】:2022-01-23 18:15:49 【问题描述】:问题出在哪里?看门狗复位每次都会触发。我对这种类型的项目有些陌生。在任何地方都找不到解决方案。在某处我发现分解延迟值可能会有所帮助。但这对我来说不起作用。
#include <DHT.h> // Including library for dht
#include <ESP8266WiFi.h>
String apiKey = "******"; // Enter your Write API key from ThingSpeak
const char *ssid = "*********"; // replace with your wifi ssid and wpa2 key
const char *pass = "*************";
const char* server = "api.thingspeak.com";
使用引脚 7 作为 DHT22 传感器的输入
#define DHTPIN 7 //pin where the dht22 is connected
DHT dht(DHTPIN, DHT22);
WiFiClient client;
void setup()
Serial.begin(115200);
delay(10);
dht.begin();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
这个命令有问题吗?我很困惑
while (WiFi.status() != WL_CONNECTED)
delay(50);
Serial.print(".");
Serial.println("");
Serial.println("WiFi connected");
void loop()
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
Serial.println("Failed to read from DHT sensor!");
return;
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius, Humidity: ");
Serial.print(h);
Serial.println("%. Send to Thingspeak.");
client.stop();
Serial.println("Waiting...");
// thingspeak needs minimum 15 sec delay between updates
delay(200);
【问题讨论】:
这很奇怪。我从来没有见过一个 MCU 库,其中看门狗在没有任何关于如何服务的文档的情况下被隐式打开。我试图在 ESP8266 文档中找到 WDT 服务的位置(显然它同时具有 SW 和 HW WDT),但我没有立即得到任何东西。 在收到 WDT 重置消息之前,您会收到什么输出? 您能否提供您正在使用的每个库的哪个版本?我发现的 DHT 库有getTemperature
和 getHumidity
方法,但没有 readTemperate
和 readHumidity
。
【参考方案1】:
This ESP documentation 告诉我们您的应用程序正在被一个硬件看门狗定时器复位,该定时器仅在软件看门狗定时器禁用时间过长时才会打开。可能有一些方法可以禁用硬件 WDT,但我目前不知道那是什么。
您应该能够通过启用软件 WDT 并定期对其进行维护来防止这种情况发生。
#include <Esp.h>
void setup()
ESP.enableWDT();
void loop()
// do useful stuff
ESP.wdtFeed(); // service the WDT here
我不确定默认的 WDT 超时是多少,但代码中的 cmets 表明我们无法指定非默认超时。
Esp.h
on github
【讨论】:
我在代码中看不到任何触发看门狗重置的内容,但它也是通过掉电触发的。通常是射频功率太高的时候,通常是射频校准错误 @juraj WDT 超时是在掉电时触发的?或者这是一个单独的复位源?通常 WDT 和掉电是独立的复位源。 在掉电时,寄存器被损坏,CPU 开始执行废话或挂起。如果产生了损坏的堆栈转储,我们会看到这一点。 @juraj 我明白了。这很可能是 OP 的问题。以上是关于如何解决 wdt 重置,第一个原因:4,引导模式:(3,6) / NODEMCU 1.0 (ESP 8266) / ThingSpeak的主要内容,如果未能解决你的问题,请参考以下文章