#include <WiFi.h>
#include <FirebaseESP32.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <ESPAsync_WiFiManager.h> // Ensure this includes ESPAsyncDNSServer.h internally
#include <ESPAsyncDNSServer.h>
// Define Firebase credentials and Firebase objects
#define API_KEY "your_api_key_here"
#define DATABASE_URL "https://your_project_id.firebaseio.com/"
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
const int ledPin = 4;
struct User {
const char* email;
const char* password;
};
User users[] = {
{"user_email1", "user_password1"},
{"user_email2", "user_password2"},
// Add more users as needed
};
int numUsers = sizeof(users) / sizeof(users[0]);
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(115200);
// Initialize WiFi and use ESPAsync_WiFiManager to handle WiFi connection
AsyncWiFiManager wifiManager(&server, &dns);
// Configure ESPAsyncWebServer
AsyncWebServer server(80);
DNSServer dns;
// Run ESPAsync_WiFiManager
wifiManager.autoConnect("ESP32-AP");
Serial.println("Connected to WiFi");
// Configure Firebase
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
Firebase.begin(config, auth);
// Set SSL buffer sizes and response size
fbdo.setBSSLBufferSize(4096, 1024);
fbdo.setResponseSize(2048);
// Set server response timeout
config.timeout.serverResponse = 10 * 1000;
}
void loop() {
if (Firebase.ready()) {
// Loop through all users and perform actions
for (int i = 0; i < numUsers; i++) {
auth.user.email = users[i].email;
auth.user.password = users[i].password;
if (Firebase.begin(config, auth)) {
// Successfully authenticated with Firebase, perform actions
int ledState;
String path = "/users/" + String(i) + "/led/state";
if (Firebase.RTDB.getInt(&fbdo, path.c_str(), &ledState)) {
digitalWrite(ledPin, ledState);
} else {
Serial.println("Failed to get LED state: " + fbdo.errorReason());
}
Firebase.end(); // End current Firebase connection
} else {
Serial.println("Firebase connection failed: " + fbdo.errorReason());
}
}
}
delay(1000); // Delay before checking again
}