#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <DHT.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
char ssid[] = "Wokwi-GUEST"; //nama hotspot yang digunakan
char pass[] = "";
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define DHTPIN 15 // Mention the digital pin where you connected
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define OLED_RESET 4 // Pin reset
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);//deklarasi OLED
#define Saklar 27
#define Relay 2
//deklarasi nomor pin dht
const int ledbiru = 19;//deklarasi nomor pin ledx
const int ledhijau = 18;
const int ledoren = 5;
const int ledsaklar = 26;
const int Buzzer = 14;
unsigned int button_status = 0; // untuk deklarasi status button
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
dht.begin();
pinMode(ledbiru, OUTPUT); //inisiasi pin ledx sebagai OUTPUT
pinMode(ledhijau, OUTPUT);
pinMode(ledoren, OUTPUT);
pinMode(ledsaklar, OUTPUT);
pinMode(Relay, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Saklar, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // membaca alamat OLED
Serial.println(F("SSD1306 allocation failed"));// mencetak gagal jika OLED tidak terbaca
for (;;); // perintah jangan untuk tetap jalankan program diatasnya
}
display.clearDisplay();// membersihkan tampilan oled
delay(2000);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
// put your main code here, to run repeatedly:
delay(500); // this speeds up the simulation
button_status = digitalRead(Saklar); //status button diambil dari input pushbutton api atau yang digunakan
digitalWrite(Relay, LOW);
if (button_status == 0) { // apabila status button = 0 atau mati
digitalWrite(ledsaklar, HIGH);
// untuk tampilan suhu di oled
display.setTextSize(1); // ukuran teks 1 atau kecil
display.setCursor(0, 0); // posisi teks di layar nanti
display.print("Suhu: ");//mencetak tulisan suhu:
display.setTextSize(2);
display.setCursor(0, 10);
display.print(t);//mencetak data suhu real time
display.print(" ");
display.setTextSize(1);
display.cp437(true); //membuat bulat kecil icon derajat
display.write(167);
display.setTextSize(2);
display.print("C"); //c sebagai celcius
display.display();
} else {
digitalWrite(ledsaklar, LOW);
}
if (( t < 23) && (button_status == 0)) { // perintah jika suhu kurang dari 23
digitalWrite(ledbiru, HIGH); // hanya led biru yang akan menyala sebagai tanda dingin
digitalWrite(ledhijau, LOW);
digitalWrite(ledoren, LOW);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(25, 35);
display.println(F("Dingin"));
display.display();
}
else if (( t > 26) && (t < 33) && (button_status == 0)) { // serta jika suhu berada antara 26 dan 33
digitalWrite(ledbiru, LOW);
digitalWrite(ledhijau, HIGH); //led hiijau akan menyala sebagai tanda suhu normal
digitalWrite(ledoren, LOW);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(25, 35);
display.println(F("Normal"));
display.display();
}
else if (( t > 34) && (button_status == 0)) { // serta jika suhu diatas 34
digitalWrite(ledbiru, LOW);
digitalWrite(ledhijau, LOW);
digitalWrite(ledoren, HIGH); //led oren akan menyala sebagai tanda suhu panas
digitalWrite(Buzzer, HIGH);
digitalWrite(Relay, HIGH);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(25, 35);
display.println(F("Panas"));
display.display();
tone_panas();
}
display.clearDisplay();
}
void tone_panas() {
tone(Buzzer, 1000);
delay(1000);
tone(Buzzer, 0);
delay(50);
tone(Buzzer, 1000);
delay(500);
tone(Buzzer, 0);
delay(20);
}
void sendSensor() {
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}