#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_AHTX0.h> // For I2C DHT22 (AHT20 compatible)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// OLED Setup (I2C)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// DHT22 (I2C version - typically AHT10/AHT20 compatible)
Adafruit_AHTX0 aht;
void setup() {
Serial.begin(115200);
// Initialize OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Initialize DHT22 (I2C)
if (!aht.begin()) {
Serial.println(F("Could not find AHT20/DHT22!"));
while (1) delay(10);
}
// Startup display
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2.5);
display.setCursor(0,15);
display.print(F("Budilify"));
display.setTextSize(1);
display.setCursor(0, 40);
display.print(F("T&H Sensor"));
display.display();
delay(3000);
}
void loop() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp); // Populate temp and humidity objects
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,15);
display.print(F("Temperature: "));
display.print(temp.temperature);
display.println(F("°C"));
display.setCursor(0, 35);
display.print(F("Humidity: "));
display.print(humidity.relative_humidity);
display.println(F("%"));
display.display();
// Also print to serial monitor
Serial.print(F("Temperature: "));
Serial.print(temp.temperature);
Serial.println(F("°C"));
Serial.print(F("Humidity: "));
Serial.print(humidity.relative_humidity);
Serial.println(F("%"));
delay(2000); // Update every 2 seconds
}