#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// 初始化OLED显示屏(地址为0x3C,128x64像素)
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
// 初始化DHT22传感器(连接到数字引脚2)
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 初始化OLED显示屏
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Enviro Monitor");
display.display();
// 初始化DHT22传感器
dht.begin();
}
void loop() {
// 读取温湿度数据
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 检查DHT22传感器是否读取失败
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 读取光照强度数据
int lightValue = analogRead(A0);
// 显示数据到OLED显示屏
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.println("Temp: " + String(temperature) + " C");
display.println("Humidity: " + String(humidity) + " %");
display.println("Light: " + String(lightValue));
display.display();
// 打印数据到串口监视器(用于调试)
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print("C, Humidity: ");
Serial.print(humidity);
Serial.print("%, Light: ");
Serial.println(lightValue);
// 每2秒更新一次数据
delay(2000);
}