Arduino+dht11温湿度传感器+OLED屏幕
4. 其余Adafruit_GFX.h、Adafruit_SSD1306.h、Wire.h使用同样方法安装。” by Adafruit(由Adafruit提供的DHT传感器库)3. 确保选择的版本是最新的稳定版本,然后点击 “1.打开Arduino IDE并转到 “
·
使用Arduino uno开发板连接dht11温湿度传感器并将温湿度显示在oled屏幕上。
连线
dht11 | Arduino uno |
---|---|
VCC(+) | 5v |
out | 13引脚 |
GND(-) | GND |
oled | Arduino uno |
---|---|
VCC | 3.3v |
GND | GND |
SCL | A5 |
SDA | A4 |
安装库
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
1.打开Arduino IDE并转到 “工具” >“ 管理库”
2. 在“搜索”框中搜索“DHT”,找到并选择 “DHT sensor library” by Adafruit(由Adafruit提供的DHT传感器库)
3. 确保选择的版本是最新的稳定版本,然后点击 “install”(安装)按钮。
4. 其余Adafruit_GFX.h、Adafruit_SSD1306.h、Wire.h使用同样方法安装。
完整代码:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define SCREEN_WIDTH 128 // OLED显示屏宽度
#define SCREEN_HEIGHT 64 // OLED显示屏高度
#define OLED_RESET -1 // 使用内部复位
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DHTPIN 13
#define DHTTYPE DHT11 // 定义传感器类型
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
// 初始化OLED显示屏
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址0x3C
Serial.println(F("OLED初始化失败"));
for(;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
// 读取温湿度数据
float h = dht.readHumidity();
float t = dht.readTemperature();
// 检查读取是否成功
if (isnan(h) || isnan(t)) {
Serial.println("传感器读取失败!");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Error Reading");
display.print(" Sensor!");
display.display();
delay(2000);
return;
}
// 显示数据到OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Temp: ");
display.print(t);
display.print(" C");
display.setCursor(0, 16);
display.print("Hum: ");
display.print(h);
display.print(" %");
display.display();
// 同时通过串口打印数据
Serial.print("湿度: ");
Serial.print(h);
Serial.print(" 温度: ");
Serial.print(t);
Serial.println(" C");
delay(2000); // 每2秒刷新一次数据
}
代码讲解
1.引入库
// An highlighted block
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
- Wire.h:用于I2C通信,OLED显示屏通过I2C接口连接。
- Adafruit_GFX.h 和 Adafruit_SSD1306.h:用于控制OLED显示屏,提供图形和文本显示功能。
- DHT.h:专门用于与DHT系列温湿度传感器通信的库。
2.定义显示屏参数
// An highlighted block
#define SCREEN_WIDTH 128 // OLED显示屏宽度
#define SCREEN_HEIGHT 64 // OLED显示屏高度
#define OLED_RESET -1 // 使用内部复位
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- 定义OLED显示屏的尺寸(128x64像素)。
- OLED_RESET 设置为-1表示使用内部复位电路。
- 创建一个Adafruit_SSD1306对象display,用于控制显示屏
3.定义DHT11传感器
// An highlighted block
#define DHTPIN 13 // DHT11连接到数字引脚13
#define DHTTYPE DHT11 // 定义传感器类型
DHT dht(DHTPIN, DHTTYPE);;
- 将DHT11传感器的数据引脚连接到Arduino的数字引脚13。
- 创建一个DHT对象dht,用于与DHT11传感器通信。
4.初始化函数(setup())
// An highlighted block
void setup() {
Serial.begin(9600);
dht.begin();
// 初始化OLED显示屏
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址0x3C
Serial.println(F("OLED初始化失败"));
for(;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
}
- 初始化串口通信:用于调试和显示数据。
- 初始化DHT传感器:准备传感器进行数据读取。
- 初始化OLED显示屏:检查显示屏是否成功初始化,如果失败则进入死循环。 清除显示屏内容。 设置文本颜色为白色(WHITE)。
5.主循环函数(loop())
// An highlighted block
void loop() {
// 读取温湿度数据
float h = dht.readHumidity();
float t = dht.readTemperature();
// 检查读取是否成功
if (isnan(h) || isnan(t)) {
Serial.println("传感器读取失败!");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Error Reading");
display.print(" Sensor!");
display.display();
delay(2000);
return;
}
// 显示数据到OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Temp: ");
display.print(t);
display.print(" C");
display.setCursor(0, 16);
display.print("Hum: ");
display.print(h);
display.print(" %");
display.display();
// 同时通过串口打印数据
Serial.print("湿度: ");
Serial.print(h);
Serial.print(" 温度: ");
Serial.print(t);
Serial.println(" C");
delay(2000); // 每2秒刷新一次数据
}
- 读取温湿度数据:使用dht.readHumidity()和dht.readTemperature()函数读取湿度和温度。
- 检查数据有效性:如果读取失败(返回NAN),在串口和OLED上显示错误信息,并等待2秒后重新尝试。
- 显示数据到OLED:清除显示屏内容、设置文本大小和颜色、在指定位置显示温度和湿度数据、更新显示屏显示。
- 通过串口打印数据:在串口监视器上打印湿度和温度数据,便于调试和记录。
- 延迟:每2秒刷新一次数据,避免数据更新过于频繁。
实物连接图
更多推荐
所有评论(0)