mobizt / Firebase-ESP32

[DEPRECATED]đŸ”¥ Firebase RTDB Arduino Library for ESP32. The complete, fast, secured and reliable Firebase Arduino client library that supports CRUD (create, read, update, delete) and Stream operations.
MIT License
414 stars 119 forks source link

ESP32 :REALTIME DATABASE :FAILED to read from Firebase: connection refused #329

Closed Drinso closed 1 week ago

Drinso commented 1 week ago

HI, I'm doing our school project and I encounter an error message it is FAILED to read from Firebase: connection refused its working if push the reset button but a few seconds later its now working and in arduino serial monitor says FAILED to read from Firebase: connection refused if i didn't push the rst button it will be not working .

Screenshot 2024-06-28 114640

here my code:

include

include

include "addons/TokenHelper.h"

include "addons/RTDBHelper.h"

define WIFI_SSID "B310_D71AA"

define WIFI_PASSWORD "Mariya<3"

define API_KEY " " // i remove my api key

define DATABASE_URL " " // i remove my database_url

define LIGHT_PIN 12

define LIGHT2_PIN 13

define LIGHT3_PIN 14

define LIGHT4_PIN 27

define SWITCH_PIN 19

define SWITCH2_PIN 4

define SWITCH3_PIN 5

define SWITCH4_PIN 18

define MAINSWITCH_PIN 33

FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config;

unsigned long sendDataPrevMillis = 0; unsigned long wifiReconnectPrevMillis = 0; unsigned long wifiConnectTimeout = 10000; // 10 seconds WiFi connection timeout unsigned long wifiConnectStartTime = 0;

unsigned long switchDebouncePrevMillis = 0; unsigned long switch2DebouncePrevMillis = 0; unsigned long switch3DebouncePrevMillis = 0; unsigned long switch4DebouncePrevMillis = 0;

unsigned long mainswitchDebounceMillis = 0;

const unsigned long debounceDelay = 50; // debounce delay in milliseconds

bool signupOK = false;

bool lightStatus = false; bool light2Status = false; bool light3Status = false; bool light4Status = false;

bool lastSwitchStatus = HIGH; bool lastSwitch2Status = HIGH; bool lastSwitch3Status = HIGH; bool lastSwitch4Status = HIGH;

bool lastMainswitchStatus = HIGH; bool wifiConnected = false; bool mainswitchStatus = false;

void connectToWiFi() { WiFi.disconnect(true); delay(1000); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to WiFi..."); wifiConnectStartTime = millis(); }

void setup() { pinMode(LIGHT_PIN, OUTPUT); pinMode(LIGHT2_PIN, OUTPUT); pinMode(LIGHT3_PIN, OUTPUT); pinMode(LIGHT4_PIN, OUTPUT);

pinMode(SWITCH_PIN, INPUT_PULLUP); pinMode(SWITCH2_PIN, INPUT_PULLUP); pinMode(SWITCH3_PIN, INPUT_PULLUP); pinMode(SWITCH4_PIN, INPUT_PULLUP);

pinMode(MAINSWITCH_PIN, INPUT_PULLUP);

Serial.begin(115200); connectToWiFi(); }

void controlLights() { bool switchStatus = digitalRead(SWITCH_PIN) == LOW; // Assume active low switch bool switch2Status = digitalRead(SWITCH2_PIN) == LOW; // Assume active low switch bool switch3Status = digitalRead(SWITCH3_PIN) == LOW; // Assume active low switch bool switch4Status = digitalRead(SWITCH4_PIN) == LOW; // Assume active low switch

bool MainSwitchStatus = digitalRead(MAINSWITCH_PIN) == LOW;

if (MainSwitchStatus != lastMainswitchStatus && (millis() - mainswitchDebounceMillis)) { mainswitchDebounceMillis = millis(); lastMainswitchStatus = MainSwitchStatus;

if (MainSwitchStatus != mainswitchStatus) {
  mainswitchStatus = MainSwitchStatus;
  Serial.print("Mainswitch turned ");
  Serial.println(mainswitchStatus ? "ON" : "OFF");

  if (!mainswitchStatus) {
    lightStatus = false;
    light2Status = false;
    light3Status = false;
    light4Status = false;

    digitalWrite(LIGHT_PIN, LOW);
    digitalWrite(LIGHT2_PIN, LOW);
    digitalWrite(LIGHT3_PIN, LOW);
    digitalWrite(LIGHT4_PIN, LOW);
    Serial.println("ALL Lights turned OFF due to main switch OFF");
  }

  if (wifiConnected && Firebase.ready() && signupOK) {
    if (Firebase.RTDB.setBool(&fbdo, "MAINSWITCH/digital/", mainswitchStatus)) {
      Serial.println("Successful WRITE to Firebase");
    } else {
      Serial.println("FAILED to write to Firebase: " + fbdo.errorReason());
    }
  }
}

}

if (mainswitchStatus) { if (switchStatus != lastSwitchStatus && (millis() - switchDebouncePrevMillis)) { switchDebouncePrevMillis = millis(); lastSwitchStatus = switchStatus;

  if (switchStatus != lightStatus) {
    lightStatus = switchStatus;
    digitalWrite(LIGHT_PIN, lightStatus);
    Serial.print("Light turned ");
    Serial.println(lightStatus ? "ON" : "OFF");

    if (wifiConnected && Firebase.ready() && signupOK) {
      if (Firebase.RTDB.setBool(&fbdo, "LIGHT/digital/", lightStatus)) {
        Serial.println("Successful WRITE to Firebase");
      } else {
        Serial.println("FAILED to write to Firebase: " + fbdo.errorReason());
      }
    }
  }
}

if (switch2Status != lastSwitch2Status && (millis() - switch2DebouncePrevMillis)) {
  switch2DebouncePrevMillis = millis();
  lastSwitch2Status = switch2Status;

  if (switch2Status != light2Status) {
    light2Status = switch2Status;
    digitalWrite(LIGHT2_PIN, light2Status);
    Serial.print("Light2 turned ");
    Serial.println(light2Status ? "ON" : "OFF");

    if (wifiConnected && Firebase.ready() && signupOK) {
      if (Firebase.RTDB.setBool(&fbdo, "LIGHT2/digital/", light2Status)) {
        Serial.println("Successful WRITE to Firebase");
      } else {
        Serial.println("FAILED to write to Firebase: " + fbdo.errorReason());
      }
    }
  }
}

if (switch3Status != lastSwitch3Status && (millis() - switch3DebouncePrevMillis)) {
  switch3DebouncePrevMillis = millis();
  lastSwitch3Status = switch3Status;

  if (switch3Status != light3Status) {
    light3Status = switch3Status;
    digitalWrite(LIGHT3_PIN, light3Status);
    Serial.print("Light3 turned ");
    Serial.println(light3Status ? "ON" : "OFF");

    if (wifiConnected && Firebase.ready() && signupOK) {
      if (Firebase.RTDB.setBool(&fbdo, "LIGHT3/digital/", light3Status)) {
        Serial.println("Successful WRITE to Firebase");
      } else {
        Serial.println("FAILED to write to Firebase: " + fbdo.errorReason());
      }
    }
  }
}

if (switch4Status != lastSwitch4Status && (millis() - switch4DebouncePrevMillis)) {
  switch4DebouncePrevMillis = millis();
  lastSwitch4Status = switch4Status;

  if (switch4Status != light4Status) {
    light4Status = switch4Status;
    digitalWrite(LIGHT4_PIN, light4Status);
    Serial.print("Light4 turned ");
    Serial.println(light4Status ? "ON" : "OFF");

    if (wifiConnected && Firebase.ready() && signupOK) {
      if (Firebase.RTDB.setBool(&fbdo, "LIGHT4/digital/", light4Status)) {
        Serial.println("Successful WRITE to Firebase");
      } else {
        Serial.println("FAILED to write to Firebase: " + fbdo.errorReason());
      }
    }
  }
}

} }

void checkFirebase() { if (wifiConnected && Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 1000 || sendDataPrevMillis == 0)) { sendDataPrevMillis = millis();

if (Firebase.RTDB.getBool(&fbdo, "LIGHT/digital/")) {
  if (fbdo.dataType() == "boolean") {
    bool firebaseLightStatus = fbdo.boolData();
    if (firebaseLightStatus != lightStatus && mainswitchStatus) {
      lightStatus = firebaseLightStatus;
      Serial.println("Successful READ from " + fbdo.dataPath() + ": " + (lightStatus ? "ON" : "OFF") + " (" + fbdo.dataType() + ")");
      digitalWrite(LIGHT_PIN, lightStatus);
    }
  }
} else {
  Serial.println("FAILED to read from Firebase: " + fbdo.errorReason());
}

if (Firebase.RTDB.getBool(&fbdo, "LIGHT2/digital/")) {
  if (fbdo.dataType() == "boolean") {
    bool firebaseLight2Status = fbdo.boolData();
    if (firebaseLight2Status != light2Status && mainswitchStatus) {
      light2Status = firebaseLight2Status;
      Serial.println("Successful READ from " + fbdo.dataPath() + ": " + (light2Status ? "ON" : "OFF") + " (" + fbdo.dataType() + ")");
      digitalWrite(LIGHT2_PIN, light2Status);
    }
  }
} else {
  Serial.println("FAILED to read from Firebase: " + fbdo.errorReason());
}

if (Firebase.RTDB.getBool(&fbdo, "LIGHT3/digital/")) {
  if (fbdo.dataType() == "boolean") {
    bool firebaseLight3Status = fbdo.boolData();
    if (firebaseLight3Status != light3Status && mainswitchStatus) {
      light3Status = firebaseLight3Status;
      Serial.println("Successful READ from " + fbdo.dataPath() + ": " + (light3Status ? "ON" : "OFF") + " (" + fbdo.dataType() + ")");
      digitalWrite(LIGHT3_PIN, light3Status);
    }
  }
} else {
  Serial.println("FAILED to read from Firebase: " + fbdo.errorReason());
}

if (Firebase.RTDB.getBool(&fbdo, "LIGHT4/digital/")) {
  if (fbdo.dataType() == "boolean") {
    bool firebaseLight4Status = fbdo.boolData();
    if (firebaseLight4Status != light4Status && mainswitchStatus) {
      light4Status = firebaseLight4Status;
      Serial.println("Successful READ from " + fbdo.dataPath() + ": " + (light4Status ? "ON" : "OFF") + " (" + fbdo.dataType() + ")");
      digitalWrite(LIGHT4_PIN, light4Status);
    }
  }
} else {
  Serial.println("FAILED to read from Firebase: " + fbdo.errorReason());
}

if (Firebase.RTDB.getBool(&fbdo, "MAINSWITCH/digital/")) {
  if (fbdo.dataType() == "boolean") {
    bool firebaseMainswitchStatus = fbdo.boolData();
    if (firebaseMainswitchStatus != mainswitchStatus) {
      mainswitchStatus = firebaseMainswitchStatus;
      Serial.println("Successful READ from " + fbdo.dataPath() + ": " + (mainswitchStatus ? "ON" : "OFF") + " (" + fbdo.dataType() + ")");

      if (!mainswitchStatus) {
        lightStatus = false;
        light2Status = false;
        light3Status = false;
        light4Status = false;

        digitalWrite(LIGHT_PIN, LOW);
        digitalWrite(LIGHT2_PIN, LOW);
        digitalWrite(LIGHT3_PIN, LOW);
        digitalWrite(LIGHT4_PIN, LOW);

        Serial.println("ALL Lights turned OFF due to main switch OFF");
      }
    }
  }
} else {
  Serial.println("FAILED to read from Firebase: " + fbdo.errorReason());
}

} }

void loop() { controlLights();

if (wifiConnected) { checkFirebase(); } else { if (WiFi.status() == WL_CONNECTED) { wifiConnected = true; Serial.println("Connected to WiFi"); config.api_key = API_KEY; config.database_url = DATABASE_URL; if (Firebase.signUp(&config, &auth, "", "")) { Serial.println("signUp OK"); signupOK = true; } else { Serial.printf("signUp failed: %s\n", config.signer.signupError.message.c_str()); } config.token_status_callback = tokenStatusCallback; Firebase.begin(&config, &auth); Firebase.reconnectWiFi(true); } else if (millis() - wifiConnectStartTime >= wifiConnectTimeout) { Serial.println("Failed to connect to WiFi within timeout. Proceeding with local control."); wifiConnectStartTime = millis() + wifiReconnectPrevMillis; } else if (millis() - wifiReconnectPrevMillis >= 10000) { wifiReconnectPrevMillis = millis(); connectToWiFi(); } } }

mobizt commented 1 week ago

It is network or internet issue, and you should solve on your side.

Anyway, this library was deprecated and not active for development. https://github.com/mobizt/Firebase-ESP32?tab=readme-ov-file#we-have-moved-to-the-new-library

mobizt commented 1 week ago

If you re-connect the WiFi with your own code, you should remove Firebase.reconnectWiFi or use Firebase.reconnectWiFi(false).

This is the user misuse.

The function Firebase.reconnectWiFi is for allowing library to reconnect the WiFi instead of user code or third-party library e.g. WiFi Manager, otherwise, WiFi reconnection interferences conflicts can be occurred.

Drinso commented 1 week ago

what is the best or suitable code for my project ? can you help me ? i'm a beginner in this project

Drinso commented 1 week ago

i remove this Firebase.reconnectWiFi but it same FAILED to read from Firebase: connection refused

mobizt commented 1 week ago

This is for library issue tracking not a community forum.

The cause of the issue I am already told, and you have to solve because it depends on many factors.

You should check internet access because your device cannot connect to internet.

You have to check free Heap of your device because to connect to the server you should have enough Heap memory at least 100k.

The malfunction router and unstable WiFi hotspot are other causes which you have to check.