软 wdt 重置 - ESP8266/NodeMCU
Soft wdt Reset - ESP8266/NodeMCU
当我上传我的代码时,在 loop() 的 3 次迭代之后,我得到一个软 wdt 重置并且 NodeMCU 重新启动。它每次都会发生。会出现什么错误?
#include <dummy.h>
#include <elapsedMillis.h>
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
// Set these to run example.
#define FIREBASE_HOST "plugmatebeta.firebaseio.com"
#define FIREBASE_AUTH "zQtW9gVXzNuz1tD8OzaTCoFpIx7MbFjwyncsWnGC"
#define WIFI_SSID "6LowPAN"
#define WIFI_PASSWORD "rashmin0703"
#define WifiAlertLED D3
#define pushButton D6
#define outsideButton D7
#define relay D8
#define connectedLED D2
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting: ");
delay(5000);
// while (WiFi.status()!=WL_CONNECTED){
// Serial.print(".");
// delay(100);
// }
// Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
// delay(1000);
pinMode(WifiAlertLED,OUTPUT);
pinMode(connectedLED,OUTPUT);
pinMode(pushButton,INPUT);
pinMode(outsideButton,INPUT);
pinMode(relay,OUTPUT);
}
void loop() {
if (WiFi.status() != WL_CONNECTED){
digitalWrite(connectedLED, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
BlinkLED();
controlOne();
delay(1000);
}
else{
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
delay(500);
Serial.println("inside connected");
controlTwo();
}
}
void BlinkLED(){
digitalWrite(WifiAlertLED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(WifiAlertLED, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
void controlOne(){
if ((digitalRead(pushButton) == HIGH) && (digitalRead(outsideButton)==HIGH) ){
digitalWrite(relay, HIGH);
Serial.println("on");
}else{
digitalWrite(relay, LOW);
Serial.println("off");
}
}
void controlTwo(){
String firebaseResult = firebaseAction();
if ((digitalRead(pushButton) == HIGH) && ( (firebaseResult=="1") || (digitalRead(outsideButton)==HIGH) ) ){
digitalWrite(relay, HIGH);
Serial.println("onnnnnnnnn");
publishtoFirebase("ON");
}else{
digitalWrite(relay, LOW);
Serial.println("onnnnnnnnn");
publishtoFirebase("OFF");
}
}
String firebaseAction(){
String x =Firebase.getString("/plgm8-1/command");
yield();
delay(200);
Serial.println(x);
return x;
delay(100);
}
void publishtoFirebase(String x){
Firebase.setString("/plgm8-1/status", x);
delay(200);
yield();
}
我尝试搜索有关 , soft wdt reset more 的错误,但似乎资源非常少。是不是NodeMCU定时器的问题?
您不应多次调用 WiFi.begin 或 Firebase.begin。
ESP 在设置中连接后,如果连接断开,它将自行 re-connect,您无需在循环中处理此问题。
我认为你应该 un-comment 设置函数中的代码,然后在循环中调用你的 controlTwo();
有一点需要注意。如果您花费太多时间什么都不做,特别是在设置函数中,有一个看门狗定时器会触发,因此请尽量避免 un-needed 调用过多延迟或设置中的无限循环。
这是我认为应该可以使用的代码的破解版本。
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting: ");
delay(5000);
while (WiFi.status()!=WL_CONNECTED){
Serial.print(".");
BlinkLED();
controlOne();
delay(100);
}
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
delay(1000);
pinMode(WifiAlertLED, OUTPUT);
pinMode(connectedLED, OUTPUT);
pinMode(pushButton, INPUT);
pinMode(outsideButton, INPUT);
pinMode(relay, OUTPUT);
}
void loop() {
Serial.println("inside connected");
controlTwo();
delay(500);
}
它会重置,因为您处理 Wi-Fi 连接的方式有误。当我尝试在连接到服务器之前发出 http 请求时,我遇到过一次。编译器看不到这个,所以你需要知道你在做什么。
在 setup()
中尝试 运行 WiFi.begin()
函数一次,并在完成后关闭与 firebase 服务器的连接,或者只是 运行如果你想让它连接到服务器 24/7,它一次。
当我上传我的代码时,在 loop() 的 3 次迭代之后,我得到一个软 wdt 重置并且 NodeMCU 重新启动。它每次都会发生。会出现什么错误?
#include <dummy.h>
#include <elapsedMillis.h>
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
// Set these to run example.
#define FIREBASE_HOST "plugmatebeta.firebaseio.com"
#define FIREBASE_AUTH "zQtW9gVXzNuz1tD8OzaTCoFpIx7MbFjwyncsWnGC"
#define WIFI_SSID "6LowPAN"
#define WIFI_PASSWORD "rashmin0703"
#define WifiAlertLED D3
#define pushButton D6
#define outsideButton D7
#define relay D8
#define connectedLED D2
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting: ");
delay(5000);
// while (WiFi.status()!=WL_CONNECTED){
// Serial.print(".");
// delay(100);
// }
// Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
// delay(1000);
pinMode(WifiAlertLED,OUTPUT);
pinMode(connectedLED,OUTPUT);
pinMode(pushButton,INPUT);
pinMode(outsideButton,INPUT);
pinMode(relay,OUTPUT);
}
void loop() {
if (WiFi.status() != WL_CONNECTED){
digitalWrite(connectedLED, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
BlinkLED();
controlOne();
delay(1000);
}
else{
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
delay(500);
Serial.println("inside connected");
controlTwo();
}
}
void BlinkLED(){
digitalWrite(WifiAlertLED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(WifiAlertLED, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
void controlOne(){
if ((digitalRead(pushButton) == HIGH) && (digitalRead(outsideButton)==HIGH) ){
digitalWrite(relay, HIGH);
Serial.println("on");
}else{
digitalWrite(relay, LOW);
Serial.println("off");
}
}
void controlTwo(){
String firebaseResult = firebaseAction();
if ((digitalRead(pushButton) == HIGH) && ( (firebaseResult=="1") || (digitalRead(outsideButton)==HIGH) ) ){
digitalWrite(relay, HIGH);
Serial.println("onnnnnnnnn");
publishtoFirebase("ON");
}else{
digitalWrite(relay, LOW);
Serial.println("onnnnnnnnn");
publishtoFirebase("OFF");
}
}
String firebaseAction(){
String x =Firebase.getString("/plgm8-1/command");
yield();
delay(200);
Serial.println(x);
return x;
delay(100);
}
void publishtoFirebase(String x){
Firebase.setString("/plgm8-1/status", x);
delay(200);
yield();
}
我尝试搜索有关 , soft wdt reset more 的错误,但似乎资源非常少。是不是NodeMCU定时器的问题?
您不应多次调用 WiFi.begin 或 Firebase.begin。 ESP 在设置中连接后,如果连接断开,它将自行 re-connect,您无需在循环中处理此问题。
我认为你应该 un-comment 设置函数中的代码,然后在循环中调用你的 controlTwo();
有一点需要注意。如果您花费太多时间什么都不做,特别是在设置函数中,有一个看门狗定时器会触发,因此请尽量避免 un-needed 调用过多延迟或设置中的无限循环。
这是我认为应该可以使用的代码的破解版本。
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting: ");
delay(5000);
while (WiFi.status()!=WL_CONNECTED){
Serial.print(".");
BlinkLED();
controlOne();
delay(100);
}
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
delay(1000);
pinMode(WifiAlertLED, OUTPUT);
pinMode(connectedLED, OUTPUT);
pinMode(pushButton, INPUT);
pinMode(outsideButton, INPUT);
pinMode(relay, OUTPUT);
}
void loop() {
Serial.println("inside connected");
controlTwo();
delay(500);
}
它会重置,因为您处理 Wi-Fi 连接的方式有误。当我尝试在连接到服务器之前发出 http 请求时,我遇到过一次。编译器看不到这个,所以你需要知道你在做什么。
在 setup()
中尝试 运行 WiFi.begin()
函数一次,并在完成后关闭与 firebase 服务器的连接,或者只是 运行如果你想让它连接到服务器 24/7,它一次。