#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHTesp.h> // Library untuk sensor DHT22
#define SCREEN_WIDTH 128 // lebar display OLED dalam pixel
#define SCREEN_HEIGHT 64 // tinggi display OLED dalam pixel
// Pin untuk DHT22
#define pinDHT 27 // mendefinisikan pin dimana sensor DHT terhubung
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dhtSensor; // mendeklarasikan objek dhtSensor
void setup() {
Serial.begin(9600); // memulai koneksi serial
dhtSensor.setup(pinDHT, DHTesp::DHT22);
/* memulai setup DHT dengan memasukan pin dan jenis DHT sebagai
argumen */
// inisialisasi display OLED dengan alamat I2C = 0x3C
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (true);
}
delay(2000); // delay 2s untuk inisialisasi
oled.clearDisplay(); // clear display
oled.setTextSize(1); // mengatur ukuran text
oled.setTextColor(WHITE); // mengatur warna text
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // mendapatkan data suhu dan kelembapan
oled.clearDisplay(); // membersihkan layar OLED
float temp = data.temperature;
float hum = data.humidity;
/* menampilkan pesan kesalahan apabila sensor DHT tidak
terhubung atau tidak memberikan output angka */
if (isnan(hum) || isnan(temp)) {
Serial.println(F("Pembacaan sensor DHT tidak berhasil!"));
return;
}
oled.setCursor(0, 0);
oled.print("Suhu: ");
oled.print(temp);
oled.println(" C");
oled.setCursor(0, 10);
oled.print("Kelembapan: ");
oled.print(hum);
oled.println(" %");
// Cek kondisi untuk menampilkan peringatan
if (temp > 30) {
oled.setCursor(0, 35);
oled.setTextColor(WHITE);
oled.println("Warning: Suhu Tinggi!");
}
if (hum < 20) {
oled.setCursor(0, 45);
oled.setTextColor(WHITE);
oled.println("Warning: Kelembapan Rendah!");
}
oled.display(); // update OLED display
delay(2000); // tunggu 2 detik sebelum update lagi
}