dht11温湿度系统
时间: 2024-12-27 12:14:41 浏览: 18
### 构建DHT11温湿度传感器系统
#### 硬件需求
为了构建基于DHT11温湿度传感器的环境监测系统,所需硬件组件如下:
- Arduino开发板(如Arduino Uno)
- DHT11温湿度传感器
- SSD1306 OLED显示屏(通常为0.96英寸,支持IIC接口)
- 若干跳线用于连接各个模块[^2]
#### 连接方式
各部件之间的具体连接方法如下表所示:
| 组件 | 引脚 | 对应Arduino引脚 |
|--------------|------------|----------------|
| DHT11 | VCC | 5V |
| | GND | GND |
| | DATA | 数字口2 |
| OLED屏 | VCC | 5V |
| | GND | GND |
| | SCL | A5 (模拟口) |
| | SDA | A4 (模拟口) |
#### 软件准备
在软件方面,需安装两个库来简化编程工作:
- Adafruit_SSD1306 库:用于控制OLED屏幕显示
- DHT库:处理来自DHT11的数据读取
可以通过Arduino IDE中的库管理器轻松找到并安装这两个库。
#### 编程实例
下面是一个简单的程序示例,展示了如何从DHT11获取数据并在OLED屏幕上展示出来。
```cpp
#include <Wire.h>
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "DHT.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
while (!Serial); // Wait until serial port opens
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // Pause for 2 seconds
dht.begin();
}
void loop() {
float h = dht.readHumidity(); // Read humidity as a percentage
float t = dht.readTemperature(); // Read temperature as Celsius
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("Temp:");
display.print(t);
display.print(" C");
display.setCursor(0,10);
display.print("Humi:");
display.print(h);
display.print("%");
display.display();
delay(2000); // Update every two seconds
}
```
此代码实现了每两秒钟更新一次温度和湿度信息到OLED屏幕上,并通过串行端口发送调试消息。如果遇到任何错误,则会打印相应的提示信息。
阅读全文