Firebase.RTDB.getInt slow execution time

I have a small project using Firebase, ESP32
Android app has 5 switch button, when I click it, Firebase will receive that value, then esp32 will read the value and output signal

if(Firebase.RTDB.getInt(&fbdo, "/control/relay0"))
   newStatus_relay0 = fbdo.intData();

Esp32 always get value on firebase and it slow execution time and make delay. So I want when the value changes, esp32 will get it
I had read example of DataChangesListener, but I dont understand it
And this is my code
Firebase lib: GitHub - mobizt/Firebase-ESP32: 🔥 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.

#define RELAY0 19
#define RELAY1 18
#define RELAY2 5
#define RELAY3 17
#define RELAY4 16
//FIREBASE
#include <WiFi.h>
#include <FirebaseESP32.h>

#include <addons/TokenHelper.h>
#include <addons/RTDBHelper.h>

#define WIFI_SSID "****"
#define WIFI_PASSWORD "****"

#define API_KEY "****"
#define DATABASE_URL "****"

FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

int oldStatus_door = 0; 
int newStatus_door = 0;
int oldStatus_relay0 = 0; 
int newStatus_relay0 = 0;
int oldStatus_relay1 = 0; 
int newStatus_relay1 = 0;
int oldStatus_relay2 = 0; 
int newStatus_relay2 = 0;
int oldStatus_relay3 = 0; 
int newStatus_relay3 = 0;
int oldStatus_relay4 = 0; 
int newStatus_relay4 = 0;
unsigned long time1 = millis();

void setup()
{
  Serial.begin(115200);
  pinMode(RELAY0,OUTPUT);
  pinMode(RELAY1,OUTPUT);
  pinMode(RELAY2,OUTPUT);
  pinMode(RELAY3,OUTPUT);
  pinMode(RELAY4,OUTPUT);
  pinMode(CTHT,INPUT);

  Serial.println();
  Serial.println();

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);

  config.api_key = API_KEY;

  config.database_url = DATABASE_URL;
  config.signer.tokens.legacy_token = "***";
  config.token_status_callback = tokenStatusCallback;

  Firebase.begin(&config, &auth);

  Firebase.reconnectWiFi(true);
}

void loop(){
  controlRelay();
}

void controlRelay(){
  if(Firebase.RTDB.getInt(&fbdo, "/control/relay0"))
    newStatus_relay0 = fbdo.intData();
  if(Firebase.RTDB.getInt(&fbdo, "/control/relay1"))
    newStatus_relay1 = fbdo.intData();
  if(Firebase.RTDB.getInt(&fbdo, "/control/relay2"))
    newStatus_relay2 = fbdo.intData();
  if(Firebase.RTDB.getInt(&fbdo, "/control/relay3"))
    newStatus_relay3 = fbdo.intData();
  if(Firebase.RTDB.getInt(&fbdo, "/control/relay4"))
    newStatus_relay4 = fbdo.intData();

  oldStatus_relay0 = digitalRead(RELAY0);
  oldStatus_relay1 = digitalRead(RELAY1);
  oldStatus_relay2 = digitalRead(RELAY2);
  oldStatus_relay3 = digitalRead(RELAY3);
  oldStatus_relay4 = digitalRead(RELAY4);
  

  if (oldStatus_relay0 != newStatus_relay0){
    oldStatus_relay0 = newStatus_relay0;
    digitalWrite(RELAY0, oldStatus_relay0);
  }
  if (oldStatus_relay1 != newStatus_relay1){
    oldStatus_relay1 = newStatus_relay1;
    digitalWrite(RELAY1, oldStatus_relay1);
  }
  if (oldStatus_relay2 != newStatus_relay2){
    oldStatus_relay2 = newStatus_relay2;
    digitalWrite(RELAY2, oldStatus_relay2);
  }
  if (oldStatus_relay3 != newStatus_relay3){
    oldStatus_relay3 = newStatus_relay3;
    digitalWrite(RELAY3, oldStatus_relay3);
  }
  if (oldStatus_relay4 != newStatus_relay4){
    oldStatus_relay4 = newStatus_relay4;
    digitalWrite(RELAY4, oldStatus_relay4);
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.