#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
//Provide the token generation process info.
#include "addons/TokenHelper.h"
//Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"
// Insert your network credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
// Insert Firebase project API Key
#define API_KEY "AIzaSyCrAXv3SGfr9XpDlRqdWSwUqcH-dOGGZxk"
// Insert RTDB URL
#define DATABASE_URL "https://fir-project-1-930ef-default-rtdb.firebaseio.com/"
// Define Firebase Data object
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long sendDataPrevMillis = 0;
unsigned long retrieveDataPrevMillis = 0;
int intValue = 123; // Sample integer value to send
float floatValue = 45.67; // Sample float value to send
bool firebaseReady = false;
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi
// WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
WiFi.begin("Wokwi-GUEST", "", 6);
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();
// Assign the API key (required)
config.api_key = API_KEY;
// Assign the RTDB URL (required)
config.database_url = DATABASE_URL;
// Assign the user authentication credentials
auth.user.email = "";
auth.user.password = "";
// Initialize Firebase
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
if (auth.token.uid.length() > 0) {
Serial.println("Signed in successfully");
firebaseReady = true;
} else {
Serial.println("Failed to sign in");
}
config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
}
void loop() {
if (Firebase.ready() && firebaseReady) {
// Send data every 10 seconds
if (millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0) {
sendDataPrevMillis = millis();
// Send integer value to Firebase
if (Firebase.RTDB.setInt(&fbdo, "/test/int", intValue)) {
Serial.println("Integer data sent successfully");
} else {
Serial.println(fbdo.errorReason());
}
// Send float value to Firebase
if (Firebase.RTDB.setFloat(&fbdo, "/test/float", floatValue)) {
Serial.println("Float data sent successfully");
} else {
Serial.println(fbdo.errorReason());
}
}
// Retrieve data every 15 seconds
if (millis() - retrieveDataPrevMillis > 10000 || retrieveDataPrevMillis == 0) {
retrieveDataPrevMillis = millis();
// Retrieve integer value from Firebase
if (Firebase.RTDB.getInt(&fbdo, "/test/int")) {
intValue = fbdo.intData();
Serial.print("Retrieved integer: ");
Serial.println(intValue);
} else {
Serial.println(fbdo.errorReason());
}
// Retrieve float value from Firebase
if (Firebase.RTDB.getFloat(&fbdo, "/test/float")) {
floatValue = fbdo.floatData();
Serial.print("Retrieved float: ");
Serial.println(floatValue);
} else {
Serial.println(fbdo.errorReason());
}
}
}
}