/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include "DHTesp.h"
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET LED_BUILTIN
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
const int DHT_PIN = 15;
const int BUZZER = 13;
const int RED = 5;
const int YELLOW = 18;
const int BLUE = 19;
unsigned long timeScale = 1000;
unsigned long routineTime = 1;
unsigned long routineTimepoint = 0;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
pinMode(BUZZER, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(YELLOW, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
if (millis() - routineTimepoint > (routineTime * timeScale)) {
readDHT22 ();
routineTimepoint = millis();
}
}
void readDHT22 () {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
display.clearDisplay();
oledDisplayHeader();
display.setCursor(35, 0);
display.print(String(data.temperature, 2)+ " C");
display.setCursor(73, 10);
display.print(String(data.humidity, 1) + " %");
if (data.temperature <=29) {
display.setCursor(45, 25);
display.print("SUHU RENDAH");
Serial.println ("SUHU RENDAH");
Serial.println("---");
digitalWrite(BLUE, HIGH);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, LOW);
digitalWrite(BUZZER, LOW);
} else if (data.temperature >= 29 && data.temperature <= 35 ){
display.setCursor(45, 25);
display.print("SUHU CUKUP");
Serial.println ("SUHU CUKUP");
Serial.println("---");
digitalWrite(BLUE, LOW);
digitalWrite(YELLOW, HIGH);
digitalWrite(RED, LOW);
digitalWrite(BUZZER, LOW);
} else if (data.temperature >= 35 ) {
display.setCursor(45, 25);
display.print("SUHU PANAS");
Serial.println ("SUHU PANAS" );
Serial.println("---");
digitalWrite(BLUE, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, HIGH);
digitalWrite(BUZZER,HIGH);
tone(BUZZER, 100, 1000);
}
display.display();
}
void oledDisplayHeader(){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Suhu:");
display.setCursor(0, 10);
display.print("Kelembapan:");
display.setCursor(0, 25);
display.print("Status:");
}
void oledDisplay(int size, int x,int y, float value, String unit){
int charLen=12;
int xo=x+charLen*3.1;
int xunit=x+charLen*3.6;
int xval = x;
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(xval, y);
display.print(value,0);
if(unit=="C"){
display.drawCircle(xo, y+2, 2, WHITE);
display.setCursor(xunit, y);
}
display.print(unit);
}