news 2026/1/8 15:55:41

树莓派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/7 21:54:33

DEAP进化算法在大数据分析中的分布式优化解决方案

DEAP进化算法在大数据分析中的分布式优化解决方案 【免费下载链接】deap Distributed Evolutionary Algorithms in Python 项目地址: https://gitcode.com/gh_mirrors/de/deap 随着大数据时代的到来&#xff0c;传统优化算法在处理海量数据时面临着计算效率低下、内存占…

作者头像 李华
网站建设 2026/1/7 19:20:15

抖音直播下载终极指南:三步永久保存精彩回放

还在为错过心爱主播的直播而懊恼吗&#xff1f;想要随时随地重温那些难忘的直播瞬间吗&#xff1f;今天我要分享一套超级实用的抖音直播下载解决方案&#xff0c;让你轻松掌握视频保存技巧&#xff0c;建立个人专属视频库&#xff01; 【免费下载链接】douyin-downloader 项…

作者头像 李华
网站建设 2026/1/8 7:16:57

C#调用CMD执行Python脚本,间接控制IndexTTS2生成语音

C#调用CMD执行Python脚本&#xff0c;间接控制IndexTTS2生成语音 在智能语音应用日益普及的今天&#xff0c;越来越多的企业开始将高质量文本转语音&#xff08;TTS&#xff09;能力集成到桌面系统、客服平台或辅助工具中。尤其是在Windows环境下&#xff0c;许多传统业务系统…

作者头像 李华
网站建设 2026/1/7 22:41:41

突破音乐枷锁:ncmdump让你的网易云歌曲重获自由

你是否曾经满怀期待地将心爱的歌曲下载到本地&#xff0c;却发现在其他播放器上无法正常播放&#xff1f;这种"看得见却听不着"的尴尬&#xff0c;正是网易云音乐NCM加密格式给用户带来的困扰。今天&#xff0c;我们将为你介绍一款能够彻底解决这一痛点的开源工具——…

作者头像 李华
网站建设 2026/1/7 22:12:47

ChromeDriver下载地址大全,自动化测试IndexTTS2 UI流程

ChromeDriver与IndexTTS2 WebUI自动化测试实战指南 在AI语音合成技术飞速发展的今天&#xff0c;开发者面临的不仅是模型性能的挑战&#xff0c;更有系统稳定性与持续交付能力的考验。以“科哥”主导开发的IndexTTS2 V23为例&#xff0c;这套集成了情感控制增强和多风格语音生…

作者头像 李华
网站建设 2026/1/8 5:56:27

一文说清Arduino控制舵机转动的引脚连接方式

从零搞懂Arduino控制舵机&#xff1a;接线、供电与稳定运行的实战指南你有没有遇到过这种情况——代码写得没问题&#xff0c;舵机却抖个不停&#xff1f;或者一上电&#xff0c;Arduino直接“罢工”重启&#xff1f;更惨的是&#xff0c;刚买的MG996R还没动几下就发烫冒烟&…

作者头像 李华