1092浏览
查看: 1092|回复: 30

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

[复制链接]
本帖最后由 驴友花雕 于 2025-5-12 05:18 编辑

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块

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

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

驴友花雕  中级技神
 楼主|

发表于 2025-5-9 07:12:41

【花雕学编程】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显示屏实时显示数据,并通过串口将数据输出到计算机,方便用户查看和分析。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 20:19:24

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  项目之四:使用 Adafruit DHT Unified 库读取 DHT22 数据

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  4.   项目之四:使用 Adafruit DHT Unified 库读取 DHT22 数据
  5. */
  6. #include <Adafruit_Sensor.h>
  7. #include <DHT.h>
  8. #include <DHT_U.h>
  9. #define DHTPIN 2     // Digital pin connected to the DHT sensor
  10. // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
  11. // Pin 15 can work but DHT must be disconnected during program upload.
  12. // Uncomment the type of sensor in use:
  13. //#define DHTTYPE    DHT11     // DHT 11
  14. #define DHTTYPE    DHT22     // DHT 22 (AM2302)
  15. //#define DHTTYPE    DHT21     // DHT 21 (AM2301)
  16. DHT_Unified dht(DHTPIN, DHTTYPE);
  17. uint32_t delayMS;
  18. void setup() {
  19.   Serial.begin(9600);
  20.   // Initialize device.
  21.   dht.begin();
  22.   Serial.println(F("DHTxx Unified Sensor Example"));
  23.   // Print temperature sensor details.
  24.   sensor_t sensor;
  25.   dht.temperature().getSensor(&sensor);
  26.   Serial.println(F("------------------------------------"));
  27.   Serial.println(F("Temperature Sensor"));
  28.   Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  29.   Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  30.   Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  31.   Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
  32.   Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
  33.   Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
  34.   Serial.println(F("------------------------------------"));
  35.   // Print humidity sensor details.
  36.   dht.humidity().getSensor(&sensor);
  37.   Serial.println(F("Humidity Sensor"));
  38.   Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  39.   Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  40.   Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  41.   Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));
  42.   Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));
  43.   Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));
  44.   Serial.println(F("------------------------------------"));
  45.   // Set delay between sensor readings based on sensor details.
  46.   delayMS = sensor.min_delay / 1000;
  47. }
  48. void loop() {
  49.   // Delay between measurements.
  50.   delay(delayMS);
  51.   // Get temperature event and print its value.
  52.   sensors_event_t event;
  53.   dht.temperature().getEvent(&event);
  54.   if (isnan(event.temperature)) {
  55.     Serial.println(F("Error reading temperature!"));
  56.   }
  57.   else {
  58.     Serial.print(F("Temperature: "));
  59.     Serial.print(event.temperature);
  60.     Serial.println(F("°C"));
  61.   }
  62.   // Get humidity event and print its value.
  63.   dht.humidity().getEvent(&event);
  64.   if (isnan(event.relative_humidity)) {
  65.     Serial.println(F("Error reading humidity!"));
  66.   }
  67.   else {
  68.     Serial.print(F("Humidity: "));
  69.     Serial.print(event.relative_humidity);
  70.     Serial.println(F("%"));
  71.   }
  72. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 20:01:27

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  项目之三:使用 DHT22 传感器读取温湿度数据并计算热指数

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  4.   项目之三:使用 DHT22 传感器读取温湿度数据并计算热指数
  5. */
  6. #include "DHT.h"
  7. #define DHTPIN 2     // Digital pin connected to the DHT sensor
  8. // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
  9. // Pin 15 can work but DHT must be disconnected during program upload.
  10. // Uncomment whatever type you're using!
  11. //#define DHTTYPE DHT11   // DHT 11
  12. #define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
  13. //#define DHTTYPE DHT21   // DHT 21 (AM2301)
  14. // Connect pin 1 (on the left) of the sensor to +5V
  15. // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
  16. // to 3.3V instead of 5V!
  17. // Connect pin 2 of the sensor to whatever your DHTPIN is
  18. // Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
  19. // Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
  20. // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
  21. // Initialize DHT sensor.
  22. // Note that older versions of this library took an optional third parameter to
  23. // tweak the timings for faster processors.  This parameter is no longer needed
  24. // as the current DHT reading algorithm adjusts itself to work on faster procs.
  25. DHT dht(DHTPIN, DHTTYPE);
  26. void setup() {
  27.   Serial.begin(9600);
  28.   Serial.println(F("DHTxx test!"));
  29.   dht.begin();
  30. }
  31. void loop() {
  32.   // Wait a few seconds between measurements.
  33.   delay(2000);
  34.   // Reading temperature or humidity takes about 250 milliseconds!
  35.   // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  36.   float h = dht.readHumidity();
  37.   // Read temperature as Celsius (the default)
  38.   float t = dht.readTemperature();
  39.   // Read temperature as Fahrenheit (isFahrenheit = true)
  40.   float f = dht.readTemperature(true);
  41.   // Check if any reads failed and exit early (to try again).
  42.   if (isnan(h) || isnan(t) || isnan(f)) {
  43.     Serial.println(F("Failed to read from DHT sensor!"));
  44.     return;
  45.   }
  46.   // Compute heat index in Fahrenheit (the default)
  47.   float hif = dht.computeHeatIndex(f, h);
  48.   // Compute heat index in Celsius (isFahreheit = false)
  49.   float hic = dht.computeHeatIndex(t, h, false);
  50.   Serial.print(F("Humidity: "));
  51.   Serial.print(h);
  52.   Serial.print(F("%  Temperature: "));
  53.   Serial.print(t);
  54.   Serial.print(F("°C "));
  55.   Serial.print(f);
  56.   Serial.print(F("°F  Heat index: "));
  57.   Serial.print(hic);
  58.   Serial.print(F("°C "));
  59.   Serial.print(hif);
  60.   Serial.println(F("°F"));
  61. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 16:37:29

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

DHT22 是一款常用的单总线数字温湿度传感器,以下是关于它的详细介绍:
1、基本概述
DHT22 采用单总线通信协议,能够实时测量环境中的温度和湿度,并将测量结果以数字信号的形式输出。它具有体积小、功耗低、精度高、稳定性强等优点,广泛应用于智能家居、气象监测、农业温室等领域。

2、主要特性
高精度测量:温度测量范围为 - 40℃至 80℃,精度可达 ±0.5℃;湿度测量范围为 0% 至 100% RH,精度可达 ±2% RH。
单总线接口:仅需一个引脚即可与微控制器进行通信,简化了硬件连接,降低了成本。
数字输出:直接输出数字信号,无需额外的模数转换电路,方便微控制器进行读取和处理。
低功耗:工作电流通常在 0.5mA 至 2mA 之间,适合电池供电的设备使用。
响应速度快:能够在短时间内快速测量并更新温湿度数据,一般响应时间在 1 秒以内。

3、应用场景
智能家居:用于监测室内温湿度,实现自动调节空调、加湿器、除湿器等设备的运行,提供舒适的居住环境。
气象监测:可以作为小型气象站的温湿度传感器,实时监测环境温湿度变化,为气象预报和研究提供数据支持。
农业温室:帮助农民监测温室内的温湿度,及时采取措施调节环境,为农作物生长提供最佳条件,提高农作物产量和质量。
工业生产:在一些对温湿度要求较高的工业生产环境中,如电子制造、药品生产等,用于监测和控制生产环境的温湿度,确保产品质量。

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 16:40:32

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

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 16:56:00

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 16:57:36

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 16:59:05

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:00:38

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:02:13

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

实验模块接线示意图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:33:12

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

搜索并安装《DHT》库

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:35:24

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  项目之一:最简单的测试

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  4.   项目之一:最简单的测试
  5. */
  6. #include <DHT.h>
  7. #define DHTPIN 2          // 数据引脚连接到 D2
  8. #define DHTTYPE DHT22     // 使用 DHT22 传感器
  9. DHT dht(DHTPIN, DHTTYPE);
  10. void setup() {
  11.     Serial.begin(9600);
  12.     dht.begin();
  13. }
  14. void loop() {
  15.     float temp = dht.readTemperature();  // 读取温度
  16.     float hum = dht.readHumidity();      // 读取湿度
  17.    
  18.     Serial.print("温度: "); Serial.print(temp); Serial.println(" °C");
  19.     Serial.print("湿度: "); Serial.print(hum); Serial.println(" %RH");
  20.     delay(2000);  // 每 2 秒读取一次
  21. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:39:00

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

代码解读

这段代码使用 DHT22 传感器 通过 单总线数字通信 读取 温度和湿度数据,核心逻辑如下:

1. 初始化
✅ #define DHTPIN 2 → 将数据引脚连接到 Arduino 的 D2
✅ #define DHTTYPE DHT22 → 指定传感器类型为 DHT22
✅ DHT dht(DHTPIN, DHTTYPE); → 创建 DHT 传感器对象
✅ Serial.begin(9600); → 启动串口通信
✅ dht.begin(); → 初始化 DHT22 传感器

2. 读取温湿度数据
✅ float temp = dht.readTemperature(); → 获取温度数据
✅ float hum = dht.readHumidity(); → 获取湿度数据

3. 输出数据
✅ Serial.print("温度: "); Serial.print(temp); Serial.println(" °C"); → 在串口打印温度
✅ Serial.print("湿度: "); Serial.print(hum); Serial.println(" %RH"); → 在串口打印湿度

4. 采集间隔
✅ delay(2000); → 每 2 秒读取一次数据,适合定期监测

这段代码让 DHT22 传感器定期采集温湿度数据,并显示在串口监视器上。





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:40:19

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 17:42:02

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

实验场景图

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 18:26:07

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  项目之二:串口绘图器显示温湿度波形曲线

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十八:DHT22 单总线数字温湿度传感器 AM2302电子积木模块
  4.   项目之二:串口绘图器显示温湿度波形曲线
  5. */
  6. #include <DHT.h>
  7. #define DHTPIN 2          // 数据引脚连接到 D2
  8. #define DHTTYPE DHT22     // 使用 DHT22 传感器
  9. DHT dht(DHTPIN, DHTTYPE);
  10. void setup() {
  11.   Serial.begin(9600);
  12.   dht.begin();
  13. }
  14. void loop() {
  15.   float temp = dht.readTemperature();  // 读取温度
  16.   float hum = dht.readHumidity();      // 读取湿度
  17.   if (isnan(temp) || isnan(hum)) {
  18.     Serial.println("Sensor is not available right now");
  19.   } else {
  20.     // **只输出数值,适配 Arduino Serial Plotter**
  21.     Serial.print(temp);
  22.     Serial.print(",");
  23.     Serial.println(hum);
  24.   }
  25.   delay(150);  // **降低刷新间隔,使波形更流畅**
  26. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 18:29:02

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

代码简单解读

这段代码使用 DHT22 传感器 测量温度和湿度,并通过 Arduino Serial Plotter 显示波形,核心逻辑如下:

1. 初始化
✅ #define DHTPIN 9 → 数据引脚连接到 Arduino 的 D2
✅ #define DHTTYPE DHT22 → 指定传感器类型为 DHT22
✅ DHT dht(DHTPIN, DHTTYPE); → 初始化 DHT 传感器
✅ Serial.begin(9600); → 启动串口通信
✅ dht.begin(); → 激活传感器

2. 采集温湿度数据
✅ float temp = dht.readTemperature(); → 获取温度数据
✅ float hum = dht.readHumidity(); → 获取湿度数据

3. 处理数据
✅ if (isnan(temp) || isnan(hum)) → 检查数据是否有效
✅ 如果传感器未检测到数据,打印“传感器不可用”

4. 显示波形
✅ Serial.print(temp); Serial.print(","); Serial.println(hum); → 以逗号分隔数据,适配 Arduino Serial Plotter
✅ 绘图器会自动将温度和湿度转换成两条曲线

5. 采集间隔
✅ delay(500); → 每 500 毫秒更新数据,提高波形流畅度

这段代码让 DHT22 传感器不断测量温湿度,并在 Arduino Serial Plotter 生成实时波形。




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 18:31:43

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 18:43:04

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

实验串口绘图器返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 20:04:49

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

代码解读

这段代码使用 DHT22 传感器 读取 温度和湿度数据,并计算 热指数,核心逻辑如下:

1. 传感器连接
✅ #define DHTPIN 2 → 数据线连接 Arduino 的 D2 引脚
✅ #define DHTTYPE DHT22 → 指定传感器类型(DHT22,可更换为 DHT11 或 DHT21)
✅ 供电连接 → 5V 或 3.3V(根据开发板逻辑电压选择)
✅ 上拉电阻 → 使用 10kΩ 电阻连接数据线与电源,确保信号稳定

2. 初始化
✅ Serial.begin(9600); → 启动串口通信
✅ dht.begin(); → 初始化 DHT22 传感器

3. 读取温湿度
✅ float h = dht.readHumidity(); → 获取湿度
✅ float t = dht.readTemperature(); → 获取温度(摄氏度)
✅ float f = dht.readTemperature(true); → 获取温度(华氏度)

4. 数据处理
✅ 检测读取失败 → isnan(h) || isnan(t) || isnan(f) 确保数据有效
✅ 计算热指数(体感温度) → dht.computeHeatIndex(t, h, false); 以摄氏度计算
✅ dht.computeHeatIndex(f, h); 以华氏度计算

5. 输出数据
✅ 湿度 → Serial.print(h); Serial.print("%");
✅ 温度(摄氏 & 华氏) → Serial.print(t); Serial.print("°C "); Serial.print(f); Serial.print("°F");
✅ 热指数 → Serial.print(hic); Serial.print("°C "); Serial.print(hif); Serial.println("°F");

6. 循环采集
✅ delay(2000); → 每 2 秒采集一次数据,适合定期监测

这段代码让 DHT22 传感器不断测量环境温湿度,并计算体感温度后输出到串口。





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-8 20:08:15

【花雕学编程】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