#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define LED_PIN 2 // LED indikator bahaya
// Konfigurasi OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* firebaseHost = "https://praktikum12-4997a-default-rtdb.firebaseio.com/server_room.json";
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
WiFi.begin(ssid, password);
Serial.print("Menghubungkan ke WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
// Inisialisasi OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Gagal menginisialisasi OLED!");
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(firebaseHost);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println("Data dari Firebase:");
Serial.println(payload);
// Parsing JSON dari Firebase
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
float suhu = doc["temperature"];
float kelembapan = doc["humidity"];
// Tampilkan di OLED
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.println("Monitoring Server");
display.setTextSize(2);
display.print("T: ");
display.print(suhu);
display.println(" C");
display.print("H: ");
display.print(kelembapan);
display.println(" %");
display.display();
// LED indikator
if (suhu >= 30 || kelembapan >= 70) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
} else {
Serial.println("Gagal parsing JSON!");
}
} else {
Serial.println("Gagal mengambil data dari Firebase!");
}
http.end();
} else {
Serial.println("WiFi terputus!");
}
delay(5000); // Ambil data setiap 5 detik
}