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");
    }
  }
}

0 ответов

Другие вопросы по тегам