news 2026/2/2 23:59:45

树莓派pico MicroPython DHT11温湿度读取实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派pico MicroPython DHT11温湿度读取实践

树莓派Pico遇上DHT11:用MicroPython轻松玩转温湿度监测

你有没有试过刚进家门,发现屋里闷得像蒸笼?或者担心阳台的绿植是不是渴了?如果有一个小设备能实时告诉你温度和湿度,甚至自动提醒你开窗通风——听起来是不是很酷?

其实,这样的“智能环境管家”并不需要复杂的硬件或高昂的成本。今天我们就来动手实现一个超低成本、极易上手的温湿度监测系统:使用树莓派Pico + DHT11传感器 + MicroPython,三者联手,在不到30元的成本下,完成一次真实的物联网感知实践。

这不是实验室里的高深课题,而是一个你可以今晚就动手做的项目。不需要编译器、不用写寄存器配置、不必面对满屏报错的Makefile。我们只用几行Python代码,就能让这个小小的组合开始工作。


为什么选这套组合?因为它真的够简单

在嵌入式世界里,“简单”本身就是一种强大的竞争力。

树莓派Pico 搭载的是双核ARM Cortex-M0+的RP2040芯片,性能远超许多同类MCU,但价格却低至十几元。更关键的是,它原生支持MicroPython—— 这意味着你写的不是C语言那种“先定义再声明最后还可能段错误”的代码,而是像写脚本一样,直接控制硬件。

而DHT11呢?它是传感器界的“入门神U”。便宜(不到5块钱)、接口少(就一根数据线)、协议公开、资料齐全。虽然精度不如SHT30这类高端货,但对于日常环境监测来说,完全够用。

最关键的一点是:MicroPython 内置了dht驱动模块。也就是说,你不需要自己去数微秒级的脉冲宽度,也不用手动解析40位二进制数据。一切都被封装好了,调用几个函数就能拿到干净的数据。

这就像开车时有人已经帮你把发动机、变速箱、ECU都调校好,你只需要踩油门就行。


DHT11是怎么“说话”的?揭秘它的单总线通信

别看DHT11只有三个有效引脚(VCC、GND、DATA),它可是靠一根数据线就把温湿度信息传出来的。这种通信方式叫做单总线(One-Wire)协议,整个过程有点像一场严格的“对讲机对话”。

对话流程是这样的:

  1. 你先喊一声:“喂!我要读数据!”
    - 方法:把数据引脚拉低至少18毫秒,然后释放。
  2. DHT11听到后回应:“我在线,请接收。”
    - 它会主动拉低线路约80微秒,再拉高80微秒,表示应答成功。
  3. 接着它开始发数据:一共40位
    - 每一位通过“高电平持续时间”来区分是0还是1:
    • 约26–28μs → 表示“0”
    • 约70μs → 表示“1”

这40位具体是什么内容呢?

数据段含义
第1字节湿度整数部分
第2字节湿度小数部分(DHT11固定为0)
第3字节温度整数部分
第4字节温度小数部分(DHT11固定为0)
第5字节校验和(前四字节相加取低八位)

收到数据后,程序会自动验证校验和。如果匹配不上,说明传输出错了,这时候返回异常而不是垃圾数据。

🛠️ 小贴士:建议两次读取间隔不少于2秒。频繁唤醒会让DHT11发热,反而影响准确性。


接线有多简单?三根线搞定

实物连接比你想的还要容易。以下是推荐接法:

DHT11 引脚连接到 Pico 的
VCC3.3V
GNDGND
DATAGPIO15
NC(第3脚)不接

⚠️ 特别注意:不要将DHT11接到5V电源!尽管有些模块标称支持5V逻辑,但树莓派Pico IO口最大耐压为3.3V,接5V有烧毁风险。

另外,为了提高稳定性,强烈建议在DATA与VCC之间加一个10kΩ上拉电阻。虽然很多时候不加上也能工作,但在干扰较强的环境中,这个小小电阻能大幅降低通信失败的概率。


代码只有10行?没错,这就是MicroPython的魅力

现在进入最激动人心的部分——写代码。打开Thonny IDE(专为初学者设计的Python编辑器),粘贴以下内容并保存为main.py

import dht import machine import time sensor = dht.DHT11(machine.Pin(15)) while True: try: sensor.measure() temp = sensor.temperature() humi = sensor.humidity() print("温度: {}°C, 湿度: {}%RH".format(temp, humi)) except OSError as e: print("读取失败:", e) time.sleep(2)

就这么短,而且几乎每一行都能看懂:

  • dht.DHT11(machine.Pin(15)):告诉Pico,“我在GPIO15上接了一个DHT11”
  • sensor.measure():发出启动信号,等待传感器响应并采集数据
  • temperature()humidity():直接获取数值,单位已处理好
  • try-except:防止因信号干扰导致程序崩溃
  • time.sleep(2):遵守最小采样间隔规范

上传后重启Pico,串口终端就会每隔两秒输出一行数据:

温度: 26°C, 湿度: 58%RH 温度: 26°C, 湿度: 57%RH 读取失败: [Errno 110] ETIMEDOUT 温度: 26°C, 湿度: 57%RH

看到那个ETIMEDOUT了吗?别慌,这是正常的。传感器偶尔没响应,捕获异常后程序继续运行,这才是健壮系统的做法。

💡 如果你想升级到更高精度的DHT22(AM2302),只需把DHT11改成DHT22即可,其他代码一行都不用改!


实际应用中常见的坑和应对策略

理论很美好,现实总有意外。以下是我在多个项目中总结出的实战经验:

❌ 问题1:总是读取失败或数据跳变大

  • 可能原因:电源不稳定、数据线过长、缺少上拉电阻
  • 解决方案
  • 使用Pico的3.3V供电,避免外接不可靠电源
  • 数据线尽量短(<30cm)
  • 加装10kΩ上拉电阻
  • 在代码中加入简单的滤波逻辑:
# 示例:三次数值取平均 values = [] for _ in range(3): try: sensor.measure() values.append((sensor.temperature(), sensor.humidity())) time.sleep(0.5) except: pass if values: avg_temp = sum(t for t,h in values) / len(values) avg_humi = sum(h for t,h in values) / len(values) print(f"平均温度: {avg_temp:.1f}°C, 平均湿度: {avg_humi:.1f}%RH")

❌ 问题2:程序跑着跑着卡住了

  • 可能原因:长时间运行导致内存碎片化或死循环
  • 解决方案
  • 添加看门狗定时器(Watchdog Timer)保底:
from machine import WDT wdt = WDT(timeout=8000) # 8秒内必须喂狗 while True: wdt.feed() # 别忘了喂! # 其他逻辑... time.sleep(2)

还能怎么玩?让它变得更聪明

基础功能实现了,接下来就是扩展时刻。这套系统天生具备极强的可扩展性:

🔹 加个OLED屏幕,本地显示数据

用I²C接口接一块0.96寸OLED屏,无需电脑也能查看当前环境状态。

from ssd1306 import SSD1306_I2C i2c = machine.I2C(0, sda=machine.Pin(4), scl=machine.Pin(5)) oled = SSD1306_I2C(128, 64, i2c) oled.fill(0) oled.text('Temp: {}C'.format(temp), 0, 20) oled.text('Humi: {}%'.format(humi), 0, 40) oled.show()

🔹 接Wi-Fi模块,把数据传上云端

搭配ESP-01S模块,通过MQTT协议发送到Home Assistant、ThingsBoard或Blynk平台,实现远程监控。

🔹 做个自动控制系统

连上继电器,当湿度超过阈值时自动开启除湿机;温度过高则触发风扇。真正的“感知-判断-执行”闭环。

🔹 记录历史数据

插入microSD卡模块,定期将数据写入CSV文件,后期可以用Python绘图分析趋势。


写在最后:从一个小项目出发,通往更大的世界

很多人觉得嵌入式开发门槛很高,要懂电路、会调试JTAG、能看懂数据手册里的时序图……但时代变了。

今天的树莓派Pico + MicroPython 组合,正在重新定义“谁可以做硬件开发”。学生、教师、设计师、甚至文科生,都可以借助高级语言快速构建原型。你不再需要成为“全能战士”,也能做出有价值的作品。

这个DHT11项目看似简单,但它涵盖了物联网节点的核心要素:
- 传感器接入
- 数据采集
- 错误处理
- 用户交互
- 可靠性设计

掌握了这些思维模式,下一步无论是换成PM2.5传感器、土壤湿度计,还是搭建LoRa远距离传输网络,都会变得水到渠成。

所以,别再犹豫了。找一块Pico,买一个DHT11,花半小时搭起来,看看你的房间此刻到底是干是湿、是冷是热。

也许,改变生活的智能系统,就始于这一行print()

如果你在实现过程中遇到了其他挑战,欢迎在评论区分享讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 6:34:20

仿写Prompt:ESLyric逐字歌词插件深度配置指南

仿写Prompt&#xff1a;ESLyric逐字歌词插件深度配置指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 请基于ESLyric-LyricsSource项目&#xff0c;创…

作者头像 李华
网站建设 2026/1/30 3:45:25

RS485多机通信实战案例:手把手教程(从零实现)

RS485多机通信实战&#xff1a;从硬件到协议&#xff0c;手把手教你构建工业级主从系统在工厂车间的PLC控制柜里&#xff0c;在楼宇自控系统的弱电井中&#xff0c;甚至在偏远的光伏电站监控箱内——你总能看到几根红黑双绞线默默连接着各种设备。它们传输的&#xff0c;很可能…

作者头像 李华
网站建设 2026/2/3 10:45:28

TinyMCE插件开发文档翻译:对接IndexTTS2语音服务

TinyMCE插件开发文档翻译&#xff1a;对接IndexTTS2语音服务 在内容创作日益智能化的今天&#xff0c;一个简单的“朗读当前文本”功能&#xff0c;可能比你想象中更有价值。试想&#xff1a;一位视障用户正依赖屏幕阅读器浏览网页文章&#xff0c;却发现系统自带的TTS机械得难…

作者头像 李华
网站建设 2026/2/3 18:26:50

IndexTTS2与PyCharm开发环境结合使用指南(附激活码提示)

IndexTTS2与PyCharm开发环境集成实战指南 在AI语音技术日益渗透到智能客服、虚拟主播和教育产品的今天&#xff0c;开发者面临的不再只是“能不能说话”&#xff0c;而是“能不能说得好、说得有感情”。传统TTS系统输出的语音常常像机器人念稿——字正腔圆却毫无情绪。而IndexT…

作者头像 李华
网站建设 2026/1/31 19:42:24

基于树莓派的控制系统升级故障排查从零实现

树莓派升级翻车实录&#xff1a;一次无显示、无网络的极限救援最近帮一个农业物联网项目维护温室控制系统&#xff0c;主控是树莓派 4B。某天凌晨自动升级后&#xff0c;现场反馈“设备失联”——SSH 连不上&#xff0c;HDMI 也没输出。远程站点没人值守&#xff0c;重启无效&a…

作者头像 李华
网站建设 2026/1/30 14:58:15

git commit 规范模板分享:参与IndexTTS2开源项目的前提

git commit 规范模板分享&#xff1a;参与IndexTTS2开源项目的前提 在当今AI语音技术快速演进的背景下&#xff0c;越来越多开发者开始关注并参与到高质量的开源项目中。像 IndexTTS2 这样基于深度学习的情感可控文本到语音&#xff08;TTS&#xff09;系统&#xff0c;正逐步…

作者头像 李华