#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <DHT.h>
// ===== DHT22 =====
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ===== LCD =====
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ===== OLED =====
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found");
while (true);
}
lcd.setCursor(0, 0);
lcd.print("welcome to");
lcd.setCursor(0, 1);
lcd.print("whether System");
delay(3000);
lcd.clear();
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error ");
return;
}
// ===== LCD ROW 0 (Temp + Humidity) =====
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp);
lcd.print("C ");
lcd.print("H:");
lcd.print(hum);
lcd.print("% ");
// ===== OLED =====
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Smart Advice:");
// ===== CONDITIONS =====
if (temp > 35) {
lcd.setCursor(0, 1);
lcd.print("VERY HOT! ");
display.setCursor(0, 20);
display.println("Use Umbrella!");
}
else if (temp >= 15 && temp <= 25) {
lcd.setCursor(0, 1);
lcd.print("NORMAL TEMP ");
display.setCursor(0, 20);
display.println("Use Sunscreen!");
}
else if (temp < 5) {
lcd.setCursor(0, 1);
lcd.print("VERY COLD! ");
display.setCursor(0, 20);
display.println("Wear Jackets!");
}
else {
lcd.setCursor(0, 1);
lcd.print("MODERATE ");
display.setCursor(0, 20);
display.println("Stay Comfort!");
}
display.display();
delay(2000);
}Loading
ssd1306
ssd1306