【教程】树莓派 + DHT11 温湿度传感器:新版 Adafruit CircuitPython 方案实战
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
如果你正在折腾物联网小项目,用树莓派读取温湿度一定是个经典开局。DHT11 作为最亲民的传感器之一,配合新版 adafruit-circuitpython-dht 库,代码更 Pythonic,异常处理也更优雅。本文只讲新版方案,带你从零到跑通。
硬件清单
| 物品 | 说明 |
|---|---|
| 树莓派 4B/3B+/Zero W | 任意型号均可 |
| DHT11 模块 | 建议买已集成上拉电阻的三针模块 |
| 杜邦线 | 母对母或公对母,至少 3 根 |
接线图
DHT11 与树莓派的连接非常简单:
| DHT11 | 树莓派 GPIO |
|---|---|
| VCC | 5V (Pin 2) 或 3.3V (Pin 1) |
| DATA | GPIO4 (Pin 7) |
| GND | GND (Pin 6) |
注意:如果你的 DHT11 是裸板(非模块),务必在 DATA 和 VCC 之间焊接一个 4.7kΩ ~ 10kΩ 的上拉电阻,否则信号不稳定,读取频繁报错。


环境准备
1. 更新系统与安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip libgpiod2 -y
libgpiod2 是新版库底层依赖,必须安装,否则运行时会报错找不到 libgpiod。
2. 安装新版 Python 库
pip3 install adafruit-circuitpython-dht
这就是新版方案的核心库。它基于 CircuitPython 生态,统一了各类传感器的 API 风格,相比旧版 Adafruit_DHT 更现代、维护更活跃。
核心代码
新建文件 dht11_new.py:
import time
import board
import adafruit_dht
# 初始化传感器,board.D4 对应 GPIO4 (Pin 7)
# 如果接的是 GPIO17,则写 board.D17,以此类推
dht_device = adafruit_dht.DHT11(board.D4)
print("开始读取 DHT11 数据,按 Ctrl+C 退出...")
while True:
try:
# 读取温湿度
temperature = dht_device.temperature # 单位:摄氏度
humidity = dht_device.humidity # 单位:%
print(f"🌡️ 温度: {temperature}°C")
print(f"💧 湿度: {humidity}%")
print("-" * 24)
except RuntimeError as error:
# DHT11 的物理特性决定了它偶尔会读取失败
# 这里捕获异常后继续循环,不用退出程序
print(f"⚠️ 读取异常: {error.args[0]}")
time.sleep(2)
continue
except KeyboardInterrupt:
print("\n👋 程序已退出")
dht_device.exit()
break
except Exception as error:
dht_device.exit()
raise error
# DHT11 最小采样间隔约 1~2 秒,不宜过频
time.sleep(2)
代码亮点解析
| 特性 | 说明 |
|---|---|
board.D4 |
使用 BCM 编码,直观对应 GPIO 编号,再也不用记 Pin 号是几 |
RuntimeError 捕获 |
新版库在读取失败时抛出此异常,属于正常现象,捕获后重试即可 |
dht_device.exit() |
优雅释放资源,避免 GPIO 占用导致下次运行报错 |
运行与测试
python3 dht11_new.py
正常输出应类似:
开始读取 DHT11 数据,按 Ctrl+C 退出...
🌡️ 温度: 25°C
💧 湿度: 60%
------------------------
⚠️ 读取异常: DHT sensor not found, check wiring
🌡️ 温度: 25°C
💧 湿度: 61%
------------------------

看到 DHT sensor not found 不用慌,只要偶尔出现且后续能恢复,就是正常的通信抖动。如果持续报错,请检查接线或补焊上拉电阻。
常见问题速查
Q:提示 No module named 'board' A:确认执行了 pip3 install adafruit-circuitpython-dht,且使用的是 python3 命令运行。
Q:提示 Unable to set line 4 to input A:当前用户没有 GPIO 权限。执行 sudo usermod -a -G gpio $USER 后重新登录,或直接 sudo python3 dht11_new.py 临时解决。
Q:读数一直是 None 或固定不变 A:大概率是 DATA 引脚缺少上拉电阻,或者杜邦线接触不良。换一根线或换一个 GPIO 口试试。
写在最后
新版 adafruit-circuitpython-dht 的 API 设计非常统一,如果你以后升级到 DHT22(AM2302),只需把代码里的 DHT11 改成 DHT22,其余逻辑完全不变。这种一致性正是 CircuitPython 生态的魅力所在。
下一步,你可以把读到的数据写入 InfluxDB、通过 MQTT 上报到 Home Assistant,或者搭一个 Flask 网页实时展示——传感器跑通了,后面的玩法就自由了。
更多推荐

所有评论(0)