//DHT22-ESP32 IOT HUMIDITY AND TEMPERATURE MONITORING
//Harley Ramadandy C.431.19.0118
//Mendefinisikan device blynk yang terhubung
#define BLYNK_TEMPLATE_ID "TMPLDK8-2maN"
#define BLYNK_DEVICE_NAME "Smart Temperature Humidity Monitoring and Control"
#define BLYNK_AUTH_TOKEN "_fH09ruFLvQgn4FQEOFQEqgFTDlfLwT_"
#define BLYNK_PRINT Serial
//Menambahkan library yang dipakai
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHTesp.h>
//Mendefinisikan OLED yang dipakai
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//Koneksi ke internet, ganti ssid dan password sesuai wifi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//Mendefinisikan pin yang terhubung dengan data DHT22
const int DHT_PIN = 13;
DHTesp dhtSensor;
//Memulai timer blynk untuk kebutuhan kirim data ke bynk
BlynkTimer timer;
//Mendefinisikan values dan DPIO yang dipakai
float t; //t = Temperatur aktual kandang yang diukur DHT22
float h; //h = Kelembaban aktual kandang yang diukur DHT22
float SP_t; //SP_t = Set poin temperatur kandang dari blynk
float SP_h; //SP_h = Set poin kelembaban kandang dari blynk
const int Exhaust = 19; //DPIO relay kendali exhaust fan
const int Humidifier = 18; //DPIO relay kendali humidifier
const int Heater = 5; //DPIO relay kendali heater
float Upper_t_tolerance = 1; //toleransi temperatur atas (agar exhaust dan heater tidak crash)
float Upper_h_tolerance = 2; //toleransi kelembaban atas (agar exhaust dan humidifier tidak crash)
float Upper_t = 0; //Batas Temperatur Atas, akan dirubah pada loop
float Upper_h = 0; //Batas Kelembaban Atas, akan dirubah pada loop
//pembacaan sensor
void readSensor()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
t = data.temperature;
h = data.humidity;
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}
//pengiriman data hasil pembacaan sensor ke blynk
void sendSensor()
{
Serial.println("Temp: " + String(t, 1) + "°C | SP: " + SP_t + "°C");
Serial.println("Humidity: " + String(h, 1) + "% | SP: " + SP_h + "%");
Serial.println("---");
Blynk.virtualWrite(V0, t);
Blynk.virtualWrite(V1, h);
}
//Mengsinkronisasi datastream yang disinkronkan pada blynk
BLYNK_CONNECTED() {
Blynk.syncAll();
}
//Mengambil data set point V2 dan V3 dari blynk
BLYNK_WRITE(V2) {
SP_t = param.asFloat();
}
BLYNK_WRITE(V3) {
SP_h = param.asFloat();
}
//Menulis OLED
void writeOLED()
{
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Temperatur:");
display.setCursor(70, 0);
display.setTextSize(2);
display.setCursor(0, 10);
display.print(t);
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.setTextSize(1);
display.setCursor(92, 8);
display.print("SP:");
display.setCursor(92, 17);
display.print(SP_t);
display.print("C");
display.drawLine(0, 32, 128, 32, WHITE);
display.setTextSize(1);
display.setCursor(0, 40);
display.print("Kelembaban:");
display.setTextSize(2);
display.setCursor(0, 50);
display.print(h);
display.print("%");
display.setTextSize(1);
display.setCursor(92, 48);
display.print("SP:");
display.setCursor(92, 57);
display.print(SP_h);
display.print("%");
display.display();
}
//Kontrol otomasi temperatur dan kelembaban
void automate() {
if (t < SP_t) {
digitalWrite (Heater, HIGH);
}
else {
digitalWrite (Heater, LOW);
}
if (h < SP_h) {
digitalWrite (Humidifier, HIGH);
}
else {
digitalWrite (Humidifier, LOW);
}
Upper_t = SP_t + Upper_t_tolerance;
Upper_h = SP_h + Upper_h_tolerance;
if ((t >= Upper_t) || (h >= Upper_h)){
digitalWrite (Exhaust, HIGH);
}
else {
digitalWrite (Exhaust, LOW);
}
}
//Setup saat program dijalankan (dibaca sekali)
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
display.clearDisplay();
display.setTextColor(WHITE);
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, sendSensor);
pinMode (Exhaust, OUTPUT);
pinMode (Humidifier, OUTPUT);
pinMode (Heater, OUTPUT);
}
//Loop saat program dijalankan (dibaca berulang2)
void loop() {
readSensor();
writeOLED();
Blynk.run();
timer.run();
sendSensor();
automate();
}
Exhaust
Humidifier
Heater