首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

DHT11环境温湿度传感器 采集温度与湿度数据Python/C++编程 树莓派与ESP32使用例程

  9164 
 0
RASPI   ydxhuo.com 

一:DHT11传感器介绍


DHT11 是一款低成本温湿度一体化传感器,包含一个电阻式湿度检测元件和一个 NTC 温度测量元件,通过内部 8 位单片机将采集到的数据转换为数字信号输出。DHT11 采用自定义单总线协议。

1.传感器原理

传感器通信过程分为三个阶段:

阶段 1:主机发送起始信号树莓派 Pico(主机)将 DATA 线拉低至少 18ms然后释放总线,等待 20-40us

阶段 2:传感器响应信号DHT11 检测到起始信号后,会拉低总线 80us接着拉高总线 80us,表明传感器已准备好发送数据

阶段 3:数据传输DHT11 会连续发送 40 位数据(高位在前)


数据格式:8 位湿度整数 + 8 位湿度小数 + 8 位温度整数 + 8 位温度小数 + 8 位校验和校验和为前 4 个字节的和(DHT11 实际只使用整数部分,小数部分固定为 0)


数据读取原理

位数据判断:传感器发送 0 时:拉低总线 50us,拉高总线 26-28us,传感器发送 1 时:拉低总线 50us,拉高总线 70us,树莓派 Pico 通过测量高电平持续时间来判断数据位是 0 还是 1

数据处理:将 40 位数据拆分为 5 个字节验证校验和是否正确(前 4 字节之和等于校验和字节)提取温度和湿度的整数部分(DHT11 精度为 ±2℃和 ±5% RH)


编程要点

使用 GPIO 的输入输出模式切换来发送和接收信号

通过精确的延时函数(如 utime.sleep_us ())控制信号时序

采用中断或轮询方式检测总线电平变化

进行校验和验证,确保数据有效性

由于 DHT11 的通信时序要求严格(微秒级),在代码实现时需要精确控制延时,这也是为什么在程序中会频繁使用 utime 模块的延时函数。如果时序控制不当,会导致读取失败或数据错误。

2.参数原理图

芯片型号:DHT11

工作电压:3.3-5V

信号输出:数字信号

温度范围:0-50°C(精度±2°C)

湿度测量:20%-95%RH(精度±5%RH)

模块尺寸:30.5 x 12 x 7.2mm

模块特点:数据端口带上拉电阻


DHT11传感器原理图DHT11传感器资料


Image

二:树莓派例程

1.树莓派接线

以树莓派Pico为例,请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁!

Image

2.Python程序

dht11 下载这个dht11的源代码上传至树莓派pico文件内,直接运行查看数据(如下图)


如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境



Image


可以对着传感器吹口热气或手捂着观察温湿度数据是否发生变化

在程序中我们加入了环境状态判断

当温度低于18.5℃时状态为:“温度偏低”,

当温度在18.5℃~27.5℃之间状态为:“舒适温度”

当温度高于29℃时状态为:“舒适温度”


3.进阶显示报警功能

上面的程序只是测试传感器功能是否正常,我们要再次升级功能让其脱离电脑也能使用,那么我们加个显示屏和报警器。实现将温度展现在显示屏上并且温度高了自动报警。请严格按下图的引脚标识进行连接,务必不能接错,接错会损坏设备!

Image


4.进阶Python程序

DHT11传感器+显示屏源代码下载这个源代码Zip压缩包,在解压出来将里面所有文件全部上传至树莓派pico文件内,直接运行查看数据(如下图)


如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image


5.视频演示

程序全部上传后,运行直接观察结果。后续只需要给主板单独供电即可正常显示! 无需再次连接电脑。(参考下面演示视频)


 

三:ESP32/Arduino例程

1.ESP32接线图

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁传感器。


Image


2.C++程序

dht11 下载dht11这个源代码直接用Arduino IDE编译上传程序打开串口监视查看(如下图)


需要在Arduino IDE中点击左侧栏的 库管理器(Library Manager)(或按 Ctrl + Shift + I),搜索并安装以下两个库:

DHT sensor library 
Adafruit Unified Sensor


Image


3.逻辑解析

这段代码的逻辑清晰且模块化,核心在于调用成熟的 Adafruit DHT 库来处理温湿度传感器复杂的单总线(One-Wire)通信时序。

库引入与实例化:引入 Adafruit 官方库后,定义引脚为 GPIO 14,类型指定为 DHT11。DHT dht(...) 创建了一个传感器操作对象。

数据读取:直接调用库函数发起一次单总线通信读取。由于 DHT11 内部将数据打包传输,这两个函数分别将原始二进制字节转换为可读的浮点数(Float)。

容错与异常拦截:isnan() 用于判断变量是否为“非数字(Not a Number)”。如果通信受干扰、接线松动或未接上拉电阻,读取函数会返回 NaN。此条件分支能有效防止输出非法数据。

采样率限制:DHT11 内部湿敏电阻与热敏电阻的硬件响应较慢,芯片自身更新数据的周期约为 1 秒。设置 2000 毫秒(2 秒)的延时可避免过于频繁的发起请求导致传感器发热或通信失败。

四:技术支持

联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意

提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...



作者签名: www.ydxhuo.com   楼主  2025-08-26 23:14:48
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.217.50 , 2026-07-27 07:34:29
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(11) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏