利用DHT11温湿度传感器与OLED显示屏构建环境监测系统
在今天的文章中,我们将探索如何使用Arduino平台,结合DHT11温湿度传感器和OLED显示屏(具体型号为SSD1306),来创建一个简易的环境监测装置。此装置能够实时显示当前环境的温度和湿度,非常适合于家庭、办公室或小型温室等场所的环境监控。
准备材料
Arduino开发板(如Arduino Uno)
DHT11温湿度传感器
SSD1315 OLED显示屏(本例中使用的是0.96寸,四针IIC驱动)
跳线若干
硬件连接
DHT11连接:将DHT11的数据引脚连接到Arduino的数字引脚2上。同时,确保DHT11的VCC连接到5V,GND连接到GND。
OLED显示屏连接:对于SSD1306 OLED屏,使用I2C接口与Arduino Uno相连。通常,OLED的SCL针脚连接到Arduino的A5,SDA针脚连接到A4,VCC连接到5V,GND连接到GND。
软件配置
库文件引入
为了简化编程,我们使用了几个外部库:
DHT.h:用于与DHT系列温湿度传感器通信。
Wire.h:I2C通信库,用于与OLED显示屏通信。
Adafruit_GFX.h 和 Adafruit_SSD1306.h:这两个库支持Adafruit的OLED显示屏图形操作。
代码解析
定义引脚和常量
#define DHTPIN 2 // DHT11数据引脚连接至数字2
#define DHTTYPE DHT11 // 使用的DHT型号为DHT11
#define SCREEN_WIDTH 128 // OLED屏幕宽度
#define SCREEN_HEIGHT 64 // OLED屏幕高度
#define OLED_RESET -1 // OLED无需复位引脚,设为-1
初始化对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // OLED显示屏初始化
DHT dht(DHTPIN, DHTTYPE); // DHT11传感器初始化
设置函数
在setup()函数中,我们初始化串行通信、OLED显示屏,并启动DHT11传感器。
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
// OLED初始化检查
Serial.println("SSD1306初始化失败!");
while (true);
}
dht.begin();
}
主循环
loop()函数每隔2秒读取一次DHT11的温湿度数据,并在OLED显示屏上实时更新这些信息。
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
display.clearDisplay(); // 清除屏幕
display.setTextSize(1); // 设置字体大小
display.setTextColor(SSD1306_WHITE); // 文字颜色为白色
display.setCursor(0, 0); // 设置打印起点
// 打印湿度和温度
display.print("humidity: ");
display.print(humidity);
display.println("%");
display.print("temperature: ");
display.print(temperature);
display.println("°C");
display.display(); // 更新显示
}
总结
通过以上步骤,我们成功构建了一个基于Arduino的温湿度监测系统,它能够实时地在OLED显示屏上展示当前环境的温湿度信息。此项目不仅加深了对传感器、显示屏控制以及数据处理的理解,而且提供了实用的环境监测解决方案,适合于各种DIY爱好者和初学者尝试。希望这篇文章能激发你对电子制作的兴趣,并开启更多创意项目的探索之旅!
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 2 // 这里是DHT11数据引脚
#define DHTTYPE DHT11 // 指定使用的DHT型号
#define SCREEN_WIDTH 128 // OLED宽度
#define SCREEN_HEIGHT 64 // OLED高度
#define OLED_RESET -1 // 这里不需要RESET引脚,设置为-1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306初始化失败!"));
for (;;)
;
}
dht.begin();
}
void loop() {
delay(2000); // 等待2秒钟
float humidity = dht.readHumidity(); // 读取湿度
float temperature = dht.readTemperature(); // 读取温度
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("humidity: ");
display.print(humidity);
display.println("%");
display.print("temperature: ");
display.print(temperature);
display.println("'C");
display.display();
}
每日"大饼":
真正的成功,不在于战胜多少人,而在于提升自己的能力和表现,超越昨日的自己。扫描二维码关注公众号,回复: 17492207 查看本文章