ESP8266 больше не связывается с базой данных Google Firebase после повторного подключения к WiFi
У меня есть ESP8266, который подключается к WiFi и получает значение переменных из Google Firebase. Затем он включает или выключает свет с помощью значения переменной.
Каждые несколько часов ESP теряет соединение, поэтому я написал некоторый код, который перезапускает исходные WiFi.begin и Firebase.begin для повторного соединения. Как ни странно, ESP успешно подключается к WiFi, но, похоже, больше не подключен к Firebase.
Для отладки я прикрепил зелено-красный светодиод. Как вы можете видеть в коде, красный включается, когда он отключен от WiFi, и зеленый включается, когда он подключен. Когда я перезагружаю свою точку доступа WiFi, чтобы принудительно подключить ESP, включается красный светодиод, а затем через несколько секунд включается зеленый светодиод, показывая, что он снова подключился. Однако элементы управления Firebase не работают. По какой-то причине единственный способ заставить его работать снова - вручную нажать кнопку сброса на плате. Что я должен делать? Спасибо!
#include <Arduino.h>
#include <Servo.h>
#include <ESP8266WiFi.h>
//#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
#include <FirebaseArduino.h>
//WiFi
#define WIFI_SSID "iMac"
#define WIFI_PASSWORD ""
//Firebase
#define FIREBASE_HOST "-----" //taken out for security
#define FIREBASE_AUTH "-----" //taken out for security
//Servo
#define ON_PIN 2 //GPIO2
#define OFF_PIN 15 //GPIO15
#define GREEN_LED 3
#define RED_LED 4
Servo myservo_ON;
Servo myservo_OFF;
/*-----( FUNCTIONS )-----*/
void wifiConnect() {
WiFi.begin(WIFI_SSID); //there is no password
Serial.print("Connecting");
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("Connected!");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void turn_on() {
//ON
myservo_ON.attach(ON_PIN);
myservo_ON.write(0);
delay(200);
myservo_ON.write(75);
delay(800);
myservo_ON.write(0);
delay(800);
myservo_ON.detach();
}
void turn_off() {
//OFF
myservo_OFF.attach(OFF_PIN);
myservo_OFF.write(0);
delay(200);
myservo_OFF.write(85);
delay(800);
myservo_OFF.write(0);
delay(800);
myservo_OFF.detach();
}
/*-----( MAIN )-----*/
void setup() {
Serial.begin(9600);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
wifiConnect();
}
int currentStatus = 2;
void loop() {
if(WiFi.status() != WL_CONNECTED || WiFi.status() != 3) {
//disconnected
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
wifiConnect();
} else if(WiFi.status() == 3) {
//connected
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
}
int Main_Light_Status = Firebase.getInt("Main_Light_Status");
if(Main_Light_Status == 1 && currentStatus != 1) { //if the the command is to turn on and you are not already on...
currentStatus = 1;
turn_on();
if(Firebase.success()) {
Serial.println("Success!: Light Turned ON");
} else {
Serial.println("Fatal Error, Light NOT Turned ON");
}
} else if(Main_Light_Status == 0 && currentStatus != 0) { //if the command is to turn off and you are not already off...
currentStatus = 0;
turn_off();
if(Firebase.success()) {
Serial.println("Success!: Light Turned OFF");
} else {
Serial.println("Fatal Error, Light NOT Turned OFF");
}
}
}