#include <WiFi.h> // Library untuk koneksi WiFi
#include <FirebaseESP32.h> // Library Firebase untuk ESP32
#include <DHT.h> // Library untuk sensor DHT
#include <Servo.h> // Library untuk motor servo
#define DHT_PIN 13 // Pin koneksi sensor DHT
#define SERVO_PIN 18
#define LDR_PIN 34 // Pin koneksi motor servo
#define LED_PIN 12
const float GAMMA = 0.7;
const float RL10 = 50;
const char* ssid = "Wokwi-GUEST"; // Nama WiFi
const char* password = ""; // Kata sandi WiFi
#define FIREBASE_HOST "https://responsi-iot-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "AIzaSyC5hG7DSV02rGO3kVLZlJtsu_XLPz15AhM" // Kunci API Firebase
FirebaseData fbdo; // Objek untuk koneksi Firebase
unsigned long previousMillis = 0; // Waktu sebelumnya untuk timer
const long interval = 5000; // Interval waktu pengiriman data (ms)
DHT dht(DHT_PIN, DHT22); // Inisialisasi sensor DHT
Servo myservo; // Inisialisasi motor servo
void wifiConnection() {
// Menghubungkan ke WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nWiFi Connected");
Serial.println(WiFi.SSID());
Serial.println(WiFi.RSSI());
Serial.println(WiFi.macAddress());
Serial.println(WiFi.localIP());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.dnsIP());
}
void firebaseSetup() {
// Menginisialisasi Firebase
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void sendDataToFirebase() {
int analogValue = analogRead(LDR_PIN);
Serial.print("Nilai Analog: ");
Serial.println(analogValue);
float voltage = analogValue / 1024.0 * 5.0;
float resistance = 2000.0 * voltage / (5.0 - voltage);
float lux = pow(RL10 * 1000.0 * pow(10.0, GAMMA) / resistance, (1.0 / GAMMA));
Serial.print("Resistansi: ");
Serial.println(resistance);
Serial.print("Kecerahan: ");
Serial.println(lux);
Firebase.setFloat(fbdo, "/kecerahan", lux);
// Kirim data suhu dan kelembaban dari DHT22 ke Firebase
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
if (!isnan(humidity) && !isnan(temperature)) {
Firebase.setFloat(fbdo, "/humidity", humidity);
Firebase.setFloat(fbdo, "/temperature", temperature);
}
// Kirim data posisi servo ke Firebase
// int servoPosition = myservo.read();
// Firebase.setInt(fbdo, "/servoPosition", servoPosition);
}
void receiveDataFromFirebase() {
// Ambil data dari Firebase (contoh pengambilan String)
if (Firebase.getString(fbdo, "/pesan")) {
Serial.println("Data dari Firebase: " + fbdo.stringData());
}
}
void setup() {
// Konfigurasi awal
Serial.begin(115200);
wifiConnection();
firebaseSetup();
dht.begin();
myservo.attach(SERVO_PIN);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Logika utama yang dijalankan secara berulang
unsigned long currentMillis = millis();
// Timer untuk pengiriman data setiap interval
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
sendDataToFirebase();
}
// Terima data dari Firebase
receiveDataFromFirebase();
// Re-connecting jika koneksi WiFi terputus
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected. Reconnecting...");
wifiConnection();
firebaseSetup();
}
// Menerima nilai servo dari Firebase
if (Firebase.getInt(fbdo, "/servoPosition")) {
int servoPosition = fbdo.intData();
Serial.println(servoPosition);
// Mengontrol posisi servo berdasarkan nilai dari Firebase
myservo.write(servoPosition);
}
if (Firebase.getInt(fbdo, "/controlLED")) {
int controlValue = fbdo.intData();
Serial.print("Control Value received: ");
Serial.println(controlValue);
if (controlValue == 1) {
digitalWrite(LED_PIN, HIGH); // Menyalakan LED jika nilai dari Firebase adalah 1
} else {
digitalWrite(LED_PIN, LOW); // Mematikan LED jika nilai dari Firebase bukan 1
}
}
}