使用Arduino Uno、DHT11和0.96寸OLED显示温湿度数据
创作时间:
作者:
@小白创作中心
使用Arduino Uno、DHT11和0.96寸OLED显示温湿度数据
引用
CSDN
1.
https://m.blog.csdn.net/2301_78925693/article/details/145160812
在物联网和智能家居项目中,显示环境的温湿度是一个常见的需求。今天,我们将通过一个简单的项目,使用Arduino Uno、DHT11温湿度传感器和0.96寸OLED显示屏来实现这一功能。这个项目不仅适合初学者,还能为更复杂的项目提供基础。
硬件连接
DHT11 温湿度传感器
- VCC 连接到 Arduino Uno 的 5V 引脚。
- GND 连接到 Arduino Uno 的 GND 引脚。
- DATA 连接到 Arduino Uno 的 D2 引脚。
0.96 寸 OLED 显示屏(I2C)
- VCC 连接到 Arduino Uno 的 5V 引脚。
- GND 连接到 Arduino Uno 的 GND 引脚。
- SCL 连接到 Arduino Uno 的 A5 引脚。
- SDA 连接到 Arduino Uno 的 A4 引脚。
软件准备
在开始编程之前,确保已经安装了以下库:
- Adafruit GFX Library
- Adafruit SSD1306 Library
- DHT Library
可以通过 Arduino IDE 的“库管理器”安装这些库:
- 打开 Arduino IDE,点击“草图”->“包含库”->“管理库...”。
- 在库管理器中搜索并安装 Adafruit GFX Library、Adafruit SSD1306 Library 和 DHT Library。
代码实现
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
// OLED显示屏设置
#define SCREEN_WIDTH 128 // OLED显示宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED显示高度,以像素为单位
// 创建SSD1306显示对象
#define OLED_RESET -1 // 重置引脚(不适用时使用-1)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT11设置
#define DHTPIN 2 // DHT传感器数据引脚连接到Arduino的数字引脚2
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// 初始化串口通信,以便在串行监视器中查看输出(可选)
Serial.begin(9600);
// 初始化DHT11传感器
dht.begin();
// 初始化OLED显示屏
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C是大多数0.96" OLED的默认I2C地址
Serial.println(F("SSD1306 allocation failed"));
for(;;); // 停止执行
}
// 清空显示屏
display.clearDisplay();
// 设置文本大小(可选)
display.setTextSize(1);
// 设置文本颜色(白色)
display.setTextColor(SSD1306_WHITE);
// 设置光标位置
display.setCursor(0,0);
// 显示一些初始文本(可选)
display.println(F("DHT11 Test!"));
// 更新显示屏
display.display();
}
void loop() {
// 等待传感器稳定
delay(2000);
// 读取温度和湿度数据
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 检查是否读取失败,有时传感器需要更长时间来稳定
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// 清空显示屏
display.clearDisplay();
// 设置光标位置
display.setCursor(0,0);
// 显示温度和湿度数据
display.print(F("Temp: "));
display.print(temperature);
display.print(F(" *C Humidity: "));
display.print(humidity);
display.println(F("%"));
// 更新显示屏
display.display();
// 等待一段时间再读取下一次数据
delay(2000);
}
热门推荐
2025年4月/10月份入学,东京大学SGU大学院工学系研究科IME项目
庆大霉素的作用与用途
住房违约责任书:明确房屋主人责任,避免纠纷发生
产妇生完孩子适合吃什么?产后饮食宝典:快速恢复的营养指南
如何让旧衣服焕发新生命
如何分辨MDD三极管的类型和三个引脚
提升《我的世界》体验:如何选择最佳电脑配置
如何有效管理客户的排队?十大实用方法详解
仲裁常识:劳动仲裁中的法定代理和指定代理
新式精神病院,用环境疗愈心灵
猫咪简易医疗知识:必备的健康照护指南
微波炉不只加热!你只用对了它的“冰山一角”?
供应商评估与管理:如何构建稳定高效的供应商体系?
高层次人才是指什么?了解高层次人才的定义与标准
人工智能的伦理考量:道德困境的例子
注意用眼卫生 谨防套路骗局
烘干机是真香还是“鸡肋”?我用了2年,从五个方面说说使用感受
审计应收账款的程序和目标
掌握充电时间,让电动车电池更耐用,小技巧大不同
资源有限的机器人实现实时LiDAR点云压缩与传输
佛教中的"相"到底是什么?为什么修行的核心在破相!
氢能自行车现身中山陵景区,游客通行难有望缓解?
四级英语单词如何高效记忆,不妨试试这几种方法
染了新发色,多久才能安心洗头?一文告诉你!
孩子辅食怎么加?各月龄关键要点要记住
保姆级搬家攻略:这几个打包好物让你0损坏无痛搬家!
如何治疗早醒
从漫画到电影——《进击的巨人》的历程与未来展望
全面解析:哪些刀具适用于玉雕制作及技巧指南
儿童健康需注意!家长必读的儿科疾病防治指南