#include<WiFi.h>
#include<Firebase_ESP_Client.h>
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#define WIFI_SSID "eppp"
#define WIFI_PASSWORD "mayitbeso21"
#define API_KEY "AIzaSyDb1i5PSrfILuoZW8tNne485WYC8rzVDjM"
#define DATABASE_URL "https://teampla---laboratory-6-default-rtdb.asia-southeast1.firebasedatabase.app/"
#define LED1_GREEN 12
#define LED2_RED 14
#define LDR_PIN 36
#define PWMChannel 0.00
#define SWITCH 13
const int freq = 5000;
const int resolution = 8;
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long sendDataPrevMillis = 0;
bool signupOK = false;
int ldrData = 0;
float voltage = 0.00;
float pwmValue = 0.00;
bool ledStatus = false;
bool switchStatus = false;
void setup() {
pinMode(LED2_RED, OUTPUT);
ledcSetup(PWMChannel, freq, resolution);
ledcAttachPin(LED1_GREEN, PWMChannel);
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Successfully connected with IP: ");
Serial.print(WiFi.localIP());
Serial.println();
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
if(Firebase.signUp(&config, &auth, "", "")){
Serial.println("Sign Up OK");
signupOK = true;
}
else{
Serial.printf("%s\n", config.signer.signupError.message.c_str());
}
config.token_status_callback = tokenStatusCallback;
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
}
void loop() {
switchStatus = digitalRead(SWITCH) == HIGH;
if(Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0)){
sendDataPrevMillis = millis();
//STORE DATA
ldrData = analogRead(LDR_PIN);
voltage = (float)analogReadMilliVolts(LDR_PIN)/1000;
if(Firebase.RTDB.setInt(&fbdo, "Sensor/ldr_data", ldrData)){
Serial.println();
Serial.print(ldrData);
Serial.print(" - Successfully saved to: " + fbdo.dataPath());
Serial.println(" ("+fbdo.dataType() + ")");
}
else{
Serial.print("FAILED: " + fbdo.errorReason());
}
if(Firebase.RTDB.setFloat(&fbdo, "Sensor/voltage", voltage)){
Serial.print(voltage);
Serial.print(" V - Successfully saved to: " + fbdo.dataPath());
Serial.println(" ("+fbdo.dataType() + ")");
}
else{
Serial.print("FAILED: " + fbdo.errorReason());
}
//READ data from RTDM to control devices attached to the ESP32
if(Firebase.RTDB.getFloat(&fbdo, "/LED/analog") || Firebase.RTDB.getInt(&fbdo, "/LED/analog")) {
if(fbdo.dataType() == "float") {
float pwmValueFloat = fbdo.floatData();
Serial.print(pwmValueFloat);
Serial.println(" - Successful READ from " + fbdo.dataPath() + ": " + "(float)");
ledcWrite(PWMChannel, pwmValueFloat);
} else if(fbdo.dataType() == "int") {
int pwmValueInt = fbdo.intData();
Serial.print(pwmValueInt);
Serial.println(" - Successful READ from " + fbdo.dataPath() + ": " + "(int)");
ledcWrite(PWMChannel, pwmValueInt);
}
} else {
Serial.println("FAILED: " + fbdo.errorReason());
}
if(Firebase.RTDB.getBool(&fbdo, "/LED/digital")){
if(fbdo.dataType() == "boolean"){
ledStatus = fbdo.boolData();
Serial.print(ledStatus);
Serial.println(" - Successful READ from " + fbdo.dataPath() + ": " + "(" + fbdo.dataType() + ")");
digitalWrite(LED2_RED, ledStatus);
}
}else{
Serial.println("FAILED: " + fbdo.errorReason());
}
// Store switch status
if (Firebase.RTDB.setBool(&fbdo, "Sensor/switch", switchStatus)) {
Serial.print(switchStatus);
Serial.print(" - Successfully saved switch status to: " + fbdo.dataPath() + ": " + "(" + fbdo.dataType() + ")" );
Serial.println();
} else {
Serial.print("FAILED: " + fbdo.errorReason());
}
}
}