#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <DHT.h>
// Define pins
#define PIR 2
#define Led 4
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT sensor setup
#define DHTPIN 15
#define DHTTYPE DHT22
DHT Sensor(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
// initialize OLED display with I2C address 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
// Initialize other components
pinMode(PIR, INPUT);
pinMode(Led, OUTPUT);
// Initialize DHT sensor
Sensor.begin();
}
void loop() {
delay(1000); // It takes 1000ms to wait for the device to read
// Read temperature and humidity
float tempr = Sensor.readTemperature();
float humid = Sensor.readHumidity();
// Clear the display before writing new data
display.clearDisplay();
// Display temperature
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("T = ");
display.print(tempr);
display.println(" C");
// Display humidity
display.print("H = ");
display.print(humid);
display.println(" %");
if (digitalRead(PIR))
display.println("Occupied");
else
display.println("Free");
// Update the display with new data
display.display();
}