434浏览
楼主: 驴友花雕

[项目] 【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 5 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

代码解读

这段代码使用 Adafruit DHT Unified 库 读取 DHT22 传感器的温度和湿度数据,核心逻辑如下:

1. 初始化
✅ #define DHTPIN 2 → 数据引脚连接到 Arduino D2
✅ #define DHTTYPE DHT22 → 指定传感器类型(DHT22,可改为 DHT11 或 DHT21)
✅ DHT_Unified dht(DHTPIN, DHTTYPE); → 初始化 DHT 传感器

2. 设备检测
✅ sensor_t sensor; dht.temperature().getSensor(&sensor); → 获取温度传感器详情
✅ dht.humidity().getSensor(&sensor); → 获取湿度传感器详情
✅ 打印传感器信息(型号、分辨率、最大/最小值)

3. 读取温湿度数据
✅ sensors_event_t event; dht.temperature().getEvent(&event); → 获取温度事件
✅ dht.humidity().getEvent(&event); → 获取湿度事件
✅ isnan(event.temperature) → 检测错误数据(避免错误读取)

4. 采集间隔
✅ delayMS = sensor.min_delay / 1000; → 根据传感器特性自动设定读取间隔

5. 输出数据
✅ 打印温度 → Serial.print(event.temperature); Serial.println("°C");
✅ 打印湿度 → Serial.print(event.relative_humidity); Serial.println("%");

这段代码让 DHT22 传感器定期测量温湿度,并打印结果。





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

实验串口返回情况

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  项目之五:将实时温湿度数据显示在 0.96寸 OLED 屏幕上

硬件连接
组件        引脚        连接到 Arduino uno
DHT22
VCC        3.3V
GND        GND
DATA        GPIO2

SSD1306       
VCC        3.3V
GND        GND
SDA            A4
SCL           A5

实验模块接线示意图

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
项目之五:将实时温湿度数据显示在 0.96寸 OLED 屏幕上

实验开源代码


  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  4.   项目之五:将实时温湿度数据显示在 0.96寸 OLED 屏幕上
  5. */
  6. #include <Wire.h>
  7. #include <Adafruit_GFX.h>
  8. #include <Adafruit_SSD1306.h>
  9. #include <DHT.h>
  10. // 定义OLED屏幕尺寸和引脚
  11. #define SCREEN_WIDTH 128
  12. #define SCREEN_HEIGHT 64
  13. #define OLED_RESET -1  // Reset pin # (or -1 if sharing Arduino reset pin)
  14. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  15. // 定义DHT22传感器引脚
  16. #define DHTPIN 2
  17. #define DHTTYPE DHT22
  18. DHT dht(DHTPIN, DHTTYPE);
  19. void setup() {
  20.   Serial.begin(115200);
  21.   
  22.   // 初始化OLED显示屏
  23.   if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
  24.     Serial.println(F("SSD1306 display allocation failed"));
  25.     for(;;);
  26.   }
  27.   display.clearDisplay();
  28.   display.setTextSize(1);
  29.   display.setTextColor(SSD1306_WHITE);
  30.   display.setCursor(0, 0);
  31.   display.println("Initializing...");
  32.   display.display();
  33.   // 初始化DHT22传感器
  34.   dht.begin();
  35.   delay(2000);  // 等待传感器稳定
  36. }
  37. void loop() {
  38.   // 读取温湿度数据
  39.   float h = dht.readHumidity();
  40.   float t = dht.readTemperature();
  41.   
  42.   // 检查读取是否成功
  43.   if (isnan(h) || isnan(t)) {
  44.     Serial.println("Failed to read from DHT sensor!");
  45.     display.clearDisplay();
  46.     display.setCursor(0, 0);
  47.     display.println("DHT22 Error!");
  48.     display.display();
  49.     delay(2000);
  50.     return;
  51.   }
  52.   // 显示数据到OLED
  53.   display.clearDisplay();
  54.   display.setCursor(0, 0);
  55.   display.setTextSize(2);
  56.   display.print("Temp: ");
  57.   display.print(t);
  58.   display.println(" C");
  59.   
  60.   display.setCursor(0, 32);
  61.   display.print("Hum: ");
  62.   display.print(h);
  63.   display.println(" %");
  64.   
  65.   display.display();
  66.   
  67.   // 打印数据到串口
  68.   Serial.print("Temperature: ");
  69.   Serial.print(t);
  70.   Serial.print(" °C, Humidity: ");
  71.   Serial.print(h);
  72.   Serial.println(" %");
  73.   
  74.   delay(2000);  // 每2秒更新一次
  75. }   
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

代码解读

这段代码实现了一个基于Arduino平台的温湿度监测系统,使用DHT22传感器采集环境温湿度数据,并通过OLED显示屏实时显示,同时将数据通过串口输出。

1. 头文件包含
  1. <div>#include <Wire.h></div><div>#include <Adafruit_GFX.h></div><div>#include <Adafruit_SSD1306.h></div><div>#include <DHT.h></div>
复制代码


Wire.h:Arduino的I2C通信库,用于OLED显示屏与Arduino之间的数据传输。
Adafruit_GFX.h:Adafruit图形库的基础库,提供绘图函数,如绘制线条、矩形、文字等,为后续在OLED上显示内容提供基础支持。
Adafruit_SSD1306.h:Adafruit针对SSD1306 OLED显示屏的驱动库,封装了对SSD1306显示屏的各种操作,如初始化、清屏、显示文字等。
DHT.h:DHT传感器库,用于与DHT系列温湿度传感器进行通信,读取温湿度数据。

2. 宏定义与对象创建
  1. <div>// 定义OLED屏幕尺寸和引脚</div><div>#define SCREEN_WIDTH 128</div><div>#define SCREEN_HEIGHT 64</div><div>#define OLED_RESET -1  // Reset pin # (or -1 if sharing Arduino reset pin)</div><div>Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);</div><div>
  2. </div><div>// 定义DHT22传感器引脚</div><div>#define DHTPIN 2</div><div>#define DHTTYPE DHT22</div><div>DHT dht(DHTPIN, DHTTYPE);</div>
复制代码


SCREEN_WIDTH 和 SCREEN_HEIGHT:定义OLED显示屏的宽度和高度,这里使用的是128x64像素的屏幕。
OLED_RESET:OLED显示屏的复位引脚,设为 -1 表示与Arduino的复位引脚共用。
Adafruit_SSD1306 display:创建一个SSD1306显示屏对象,指定屏幕尺寸、I2C通信对象 Wire 和复位引脚。
DHTPIN:定义DHT22传感器的数据引脚连接到Arduino的数字引脚2。
DHTTYPE:指定传感器类型为DHT22。
DHT dht:创建一个DHT对象,用于与DHT22传感器进行通信。

3. setup() 函数
  1. <div>void setup() {</div><div>  Serial.begin(115200);</div><div>  </div><div>  // 初始化OLED显示屏</div><div>  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {</div><div>    Serial.println(F("SSD1306 display allocation failed"));</div><div>    for(;;);</div><div>  }</div><div>  display.clearDisplay();</div><div>  display.setTextSize(1);</div><div>  display.setTextColor(SSD1306_WHITE);</div><div>  display.setCursor(0, 0);</div><div>  display.println("Initializing...");</div><div>  display.display();</div><div>
  2. </div><div>  // 初始化DHT22传感器</div><div>  dht.begin();</div><div>  delay(2000);  // 等待传感器稳定</div><div>}</div>
复制代码


Serial.begin(115200):初始化串口通信,波特率设置为115200,用于将数据通过串口输出到计算机。
display.begin(SSD1306_SWITCHCAPVCC, 0x3C):初始化OLED显示屏,SSD1306_SWITCHCAPVCC 表示使用内部稳压器为显示屏供电,0x3C 是OLED显示屏的I2C地址。
若初始化失败,通过串口输出错误信息,并进入死循环。
清除显示屏内容,设置文字大小为1,文字颜色为白色,设置光标位置为(0, 0),显示“Initializing...”提示信息,然后更新显示屏。
调用 dht.begin() 初始化DHT22传感器,并延迟2秒等待传感器稳定。

4. loop() 函数
  1. <div>void loop() {</div><div>  // 读取温湿度数据</div><div>  float h = dht.readHumidity();</div><div>  float t = dht.readTemperature();</div><div>  </div><div>  // 检查读取是否成功</div><div>  if (isnan(h) || isnan(t)) {</div><div>    Serial.println("Failed to read from DHT sensor!");</div><div>    display.clearDisplay();</div><div>    display.setCursor(0, 0);</div><div>    display.println("DHT22 Error!");</div><div>    display.display();</div><div>    delay(2000);</div><div>    return;</div><div>  }</div><div>
  2. </div><div>  // 显示数据到OLED</div><div>  display.clearDisplay();</div><div>  display.setCursor(0, 0);</div><div>  display.setTextSize(2);</div><div>  display.print("Temp: ");</div><div>  display.print(t);</div><div>  display.println(" C");</div><div>  </div><div>  display.setCursor(0, 32);</div><div>  display.print("Hum: ");</div><div>  display.print(h);</div><div>  display.println(" %");</div><div>  </div><div>  display.display();</div><div>  </div><div>  // 打印数据到串口</div><div>  Serial.print("Temperature: ");</div><div>  Serial.print(t);</div><div>  Serial.print(" °C, Humidity: ");</div><div>  Serial.print(h);</div><div>  Serial.println(" %");</div><div>  </div><div>  delay(2000);  // 每2秒更新一次</div><div>}</div>
复制代码


dht.readHumidity() 和 dht.readTemperature():分别读取DHT22传感器的湿度和温度数据。
使用 isnan() 函数检查读取的数据是否为有效值,若无效则通过串口输出错误信息,在OLED上显示“DHT22 Error!”,延迟2秒后返回。
清除显示屏内容,设置文字大小为2,设置光标位置为(0, 0),显示温度信息;再将光标位置设置为(0, 32),显示湿度信息,然后更新显示屏。
通过串口输出温度和湿度信息。
延迟2秒后再次循环执行。

总结
这段代码实现了一个简单的温湿度监测系统,通过DHT22传感器采集环境温湿度数据,使用OLED显示屏实时显示数据,并通过串口将数据输出到计算机,方便用户查看和分析。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

实验串口返回情况

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(218)--DHT22数字温湿度模块

实验场景图

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 昨天 05:21

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验

【花雕学编程】Arduino动手做(218)--DHT22模块五个小实验图1
回复

使用道具 举报

12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail