#include <FirebaseESP32.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);
#define FIREBASE_USE_PSRAM
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
//firebase
// #define FIREBASE_HOST "realtimearduino-10fec-default-rtdb.asia-southeast1.firebasedatabase.app"
// #define FIREBASE_AUTH "AIzaSyDU9rwq3aVj5cyi770t9B9WLXNjvo8bYfo"
// Define the Firebase Data object
FirebaseData fbdo;
// Define the FirebaseAuth data for authentication data
FirebaseAuth auth;
// Define the FirebaseConfig data for config data
FirebaseConfig config;
//Relay
#define relayPin 12
//ldr
const int ldrPin = 34;
const int doPin = 14;
const float Gamma = 0.7;
const float rl10 = 50;
FirebaseData firebaseData;
FirebaseJson json;
void setup() {
Serial.begin(115200);
delay(10);
// Assign the user sign in credentials
auth.user.email = "[email protected]";
auth.user.password = "qwertyuiop0987654321@#";
// Assign the project host and api key
config.host = "kontrollamp-a116f-default-rtdb.asia-southeast1.firebasedatabase.app";
config.api_key = "AIzaSyCfMvv1ik9nMVhTjsbJY8qhvMLUqIdd6NY";
// Create FirebaseConfig object
// FirebaseConfig firebaseConfig;
// Set Firebase host and auth
//firebaseConfig.host = FIREBASE_HOST;
// firebaseConfig.auth = FIREBASE_AUTH;
LCD.init();
LCD.backlight();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("WiFi Terhubung");
// Initialize the library with the Firebase authen and config.
Firebase.begin(&config, &auth);
// Optional, set AP reconnection in setup()
Firebase.reconnectWiFi(true);
//Firebase.begin(&firebaseConfig, nullptr);
//Firebase.reconnectWiFi(true);
pinMode(relayPin, OUTPUT);
pinMode(doPin, INPUT);
}
void loop() {
int ldrValue = analogRead(ldrPin);
int doValue = digitalRead(doPin);
// Serial.print("LDR value: ");
// Serial.println(ldrValue);
// Serial.print("DO value: ");
// Serial.println(doValue);
ldrValue = map(ldrValue, 4095, 0, 1024, 0); //ubah nilai sensor ke adc
float voltase = ldrValue / 1024.*5;
float resistance = 2000 * voltase / (1 - voltase / 5);
float kecerahan = pow(rl10 * 1e3 * pow(10, Gamma) / resistance, (1 / Gamma));
kecerahan = round(kecerahan * 10) / 10.0;
Serial.print("Kecerahan = ");
Serial.println(kecerahan);
LCD.setCursor(0, 0);
LCD.print("Kecerahan: ");
LCD.print(kecerahan);
Firebase.setFloat(firebaseData, "/kecerahan", kecerahan);
if (Firebase.getBool(firebaseData, "/relayState")) {
bool relayState = firebaseData.boolData();
if (kecerahan < 100) {
relayState = 1;
}
digitalWrite(relayPin, relayState);
if (relayState == 0) {
Serial.println("Kondisi lampu mati");
LCD.setCursor(0, 1);
LCD.print("Lampu mati ");
} else {
Serial.println("Kondisi lampu hidup");
LCD.setCursor(0, 1);
LCD.print("Lampu hidup ");
}
Serial.println("State: " + String(relayState));
} else {
Serial.println("Gagal menerima data dari firebase");
}
if (kecerahan < 100 && Firebase.getBool(firebaseData, "/relayState") == 0) {
delay(10000);
if (kecerahan < 100) {
digitalWrite(relayPin, 1);
Serial.println("Lampu harus hidup karena kecerahan rendah");
}
}
delay(1000);
}