news 2026/4/15 8:53:15

树莓派pico连接DHT11实现环境监测手把手教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派pico连接DHT11实现环境监测手把手教程

树莓派Pico + DHT11:从零开始打造你的第一个环境监测系统

你有没有想过,用不到30元的成本,就能做一个实时监测房间温湿度的小设备?不仅能看数据,还能扩展成自动通风、智能加湿的“土味智能家居”?

今天我们就来动手实现这个项目——树莓派Pico连接DHT11温湿度传感器。整个过程不需要焊接、不依赖复杂工具,连代码都给你写好了,照着接线、复制粘贴就能跑起来。

更重要的是,这不仅仅是个“点亮LED”级别的玩具项目。它会带你深入理解嵌入式开发中最核心的几个概念:GPIO控制、时序通信、数据解析和错误处理。这些技能,正是你迈向物联网、自动化甚至工业控制领域的第一步。


为什么选“Pico + DHT11”这套组合?

在动手之前,先回答一个问题:市面上那么多传感器、那么多开发板,为啥偏偏选它俩?

DHT11:便宜又好用的“入门神U”

别看DHT11精度不算高(±2°C、±5%RH),响应还慢(至少等1秒才能读一次),但它有几个致命优点:

  • 价格感人:单个不到5块钱,摔了也不心疼;
  • 接口极简:只有三根线——电源、地、数据,连I²C都不用配;
  • 出厂校准:插上就能用,不用自己调参数;
  • 社区资源多:随便搜“DHT11”,几百篇教程任你挑。

虽然高端玩家可能更喜欢SHT30或BME280,但对初学者来说,DHT11就是那个让你快速获得正反馈的存在——第一次通电就看到温度数字跳出来,那种成就感,值回票价。

树莓派Pico:性能强、生态好、还不贵

相比Arduino Uno那种“祖传”性能(16MHz单核),Pico简直像是降维打击:

  • 双核ARM Cortex-M0+,主频133MHz;
  • 26个可用GPIO,想接啥都够用;
  • 官方支持MicroPython,写代码像写Python脚本一样轻松;
  • USB即串口又可当U盘,烧程序就像拷文件。

最关键的是——它只要20块左右,而且在国内买得到、不断货。

所以,“Pico + DHT11”这对组合,本质上是用最低成本搭建一个真实可用的技术学习平台。学会了它,后面加Wi-Fi、接屏幕、上云平台,都是顺理成章的事。


硬件怎么连?三根线搞定!

我们先来看最简单的硬件连接方式。

DHT11引脚连接到树莓派Pico
VCC3V3(3.3V电源)
GNDGND
DATAGP16

✅ 小贴士:
- DATA数据线建议加上一个4.7kΩ上拉电阻到3.3V,抗干扰更强;
- 如果只是短距离实验(<30cm),也可以省略,靠DHT11内部弱上拉勉强工作。

接好之后长这样:

DHT11 → Pico │ │ VCC ──── 3V3 GND ──── GND DATA ──┬─ GP16 └─ 4.7kΩ ── 3V3 (推荐外加上拉)

就这么简单。没有复杂的电路,也没有额外芯片。只要你有Pico、DHT11、几根杜邦线,再加上一个面包板,五分钟就能搭起来。


软件怎么做?两种方式任你选

接下来是重点:如何让Pico真正“读懂”DHT11的数据。

方法一:手搓协议 —— 深入理解底层原理

DHT11用的是单总线协议(One-Wire),所有数据都通过一根线传输。它的通信流程非常讲究时序:

  1. 主机(Pico)先拉低DATA线至少18ms,告诉DHT11:“我要开始读了!”
  2. DHT11收到后,回复一个80μs的低电平作为应答;
  3. 然后它连续发40位数据,每一位都是“先低后高”;
  4. 高电平持续时间决定是“0”还是“1”:
    - ≈26–28μs → 表示“0”
    - ≈70μs → 表示“1”

最后这40位数据分别是:

数据段含义
bit 0–7湿度整数部分
bit 8–15湿度小数部分(DHT11固定为0)
bit 16–23温度整数部分
bit 24–31温度小数部分(同样为0)
bit 32–39校验和(前四字节相加取低8位)

下面是完整的MicroPython代码实现,包含了完整的握手、读取、校验逻辑:

import machine import time # 使用GP16作为数据引脚,并配置为开漏输出模式 DATA_PIN = machine.Pin(16, machine.Pin.OPEN_DRAIN) def dht11_read(): """手动读取DHT11数据""" # === 步骤1:发送启动信号 === DATA_PIN.init(machine.Pin.OUT) DATA_PIN.value(0) time.sleep_ms(20) # 至少拉低18ms # === 步骤2:释放总线,切换为输入等待响应 === DATA_PIN.init(machine.Pin.IN) # 等待DHT11拉低(应答开始) count = 0 while DATA_PIN.value() == 1: count += 1 if count > 100: return None # 超时 count = 0 while DATA_PIN.value() == 0: count += 1 if count > 100: return None # 应答低电平超时 count = 0 while DATA_PIN.value() == 1: count += 1 if count > 100: return None # 应答高电平超时 # === 步骤3:读取40位数据 === data = [] for _ in range(40): # 每位以50μs低电平开始 while DATA_PIN.value() == 1: pass while DATA_PIN.value() == 0: pass # 测量高电平宽度判断是0还是1 count = 0 while DATA_PIN.value() == 1: count += 1 time.sleep_us(1) if count > 100: break # 防止死循环 # 若高电平超过30μs,认为是‘1’ data.append(1 if count > 3 else 0) # === 步骤4:数据解析与校验 === if len(data) != 40: return None humidity = 0 temperature = 0 checksum = 0 # 解析湿度(第0–7位) for i in range(8): humidity = (humidity << 1) | data[i] # 解析温度(第16–23位) for i in range(16, 24): temperature = (temperature << 1) | data[i] # 解析校验和(第32–39位) for i in range(32, 40): checksum = (checksum << 1) | data[i] # 校验:湿度 + 温度 是否等于校验和 if (humidity + temperature) & 0xFF != checksum: return None return humidity, temperature # === 主循环 === while True: result = dht11_read() if result: humi, temp = result print("温度: {}°C, 湿度: {}%".format(temp, humi)) else: print("读取失败,请检查接线或电源") time.sleep(2)

这段代码虽然有点长,但它完整展示了如何用软件模拟硬件协议。每一行都在跟时间赛跑,精确控制电平变化和等待时机。这也是嵌入式编程的魅力所在:你不仅要懂逻辑,还得懂“节奏”。

但说实话,每次都要这么写一遍太累了……有没有更省事的办法?

当然有!


方法二:使用内置库 —— 快速投入实战

MicroPython官方早就为我们封装好了dht模块,一行初始化,两行调用,干净利落:

import dht import machine import time # 初始化DHT11对象 sensor = dht.DHT11(machine.Pin(16)) while True: try: sensor.measure() # 触发一次测量 temp = sensor.temperature() # 获取温度 humi = sensor.humidity() # 获取湿度 print("温度: {}°C, 湿度: {}%".format(temp, humi)) except OSError as e: print("读取失败:", e) time.sleep(2)

是不是清爽多了?

这个库已经帮你处理了所有底层细节:时序控制、数据解码、校验验证,甚至连异常捕获都有。对于日常使用和后续项目扩展,强烈推荐这种方式

💡 提示:如果你想深入了解库是怎么工作的,可以把上面的手动版本和库版对比着看,你会发现很多设计思路是一致的。


常见问题与调试技巧(避坑指南)

别以为接上线就能一次成功。以下是新手最容易踩的几个坑:

❌ 问题1:总是返回“读取失败”

可能原因
- 接线松动或反接(尤其是VCC/GND接错)
- 没加上拉电阻,信号不稳定
- 电源电压不足(比如用了劣质USB线)

解决方法
- 用万用表测一下VCC是否稳定在3.3V;
- 外接一个4.7kΩ电阻到3.3V;
- 更换数据线或供电源试试。

❌ 问题2:偶尔能读到,大多数时候失败

这通常是时序不准导致的。MicroPython是解释型语言,在某些情况下延时不精准。

解决方案
- 改用C/C++ SDK开发(牺牲便捷性换取稳定性);
- 或者保持MicroPython,但增加重试机制:

for _ in range(3): # 最多重试3次 try: sensor.measure() break except: time.sleep_ms(500) else: print("三次尝试均失败")

❌ 问题3:数据显示乱码或超出范围

比如湿度显示256%,或者温度负几十度?

那是校验失败但仍被打印的结果。一定要记得做异常捕获!


这个项目还能怎么玩?给点灵感

你以为这就完了?远远不止。

你现在手里握着的,是一个可扩展的微型物联网节点。只要再加点东西,功能立马升级:

🔹 加OLED屏 → 本地显示

用I²C接个小屏幕,不用电脑也能看温湿度,做成桌面气象站。

🔹 加ESP-01S → 上网上传数据

把Pico当主机,通过串口驱动Wi-Fi模块,把数据发到Blynk、ThingsBoard、Home Assistant。

🔹 加继电器 → 实现自动控制

温度太高?自动打开风扇;湿度过低?触发加湿器。闭环控制就这么简单。

🔹 加RTC芯片 → 带时间戳记录

搭配SD卡或内部Flash,做一个带日期时间的日志记录仪。

🔹 挑战PIO → 硬件级优化

RP2040特有的PIO模块可以完全脱离CPU干预来收发DHT11信号,实现更高精度和更低功耗。


写在最后:一个小项目背后的大学问

“Pico + DHT11”看起来很简单,但它其实涵盖了现代嵌入式系统的五大核心环节:

环节在本项目中的体现
感知层DHT11采集环境数据
控制层Pico运行逻辑判断与调度
通信层单总线协议完成设备间对话
表现层串口输出/未来可接屏或联网
能源管理整体功耗仅10–30mA,适合电池供电

更重要的是,它教会我们一种思维方式:从最小可行系统出发,逐步迭代扩展

你可以今天点亮串口,明天加上屏幕,后天连上Wi-Fi,大后天做个网页 dashboard……每一步都不难,合起来却能做出很酷的东西。

所以,别再犹豫了。找一块Pico,买一个DHT11,现在就开始你的第一个嵌入式项目吧!

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

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

PingFangSC字体包:免费商业字体完整使用指南

PingFangSC字体包&#xff1a;免费商业字体完整使用指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 还在为网页字体显示效果不佳而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/4/11 19:31:40

人体姿态搜索的终极指南:让AI精准识别你的每一个动作

人体姿态搜索的终极指南&#xff1a;让AI精准识别你的每一个动作 【免费下载链接】pose-search x6ud.github.io/pose-search 项目地址: https://gitcode.com/gh_mirrors/po/pose-search 你是否曾想过&#xff0c;电脑不仅能识别你的脸&#xff0c;还能看懂你的一举一动&…

作者头像 李华
网站建设 2026/4/15 6:03:52

L298N电机驱动模块在Arduino上的手把手教程(零基础入门)

从零开始玩转电机控制&#xff1a;L298N Arduino实战入门你有没有想过&#xff0c;为什么你的Arduino板子明明能输出信号&#xff0c;却“推不动”一个小电机&#xff1f;或者&#xff0c;你在做一个智能小车项目时&#xff0c;发现轮子只能单向转、速度还调不了&#xff1f;问…

作者头像 李华
网站建设 2026/4/12 2:50:08

5个实用技巧:如何用开源资源快速构建Figma插件

5个实用技巧&#xff1a;如何用开源资源快速构建Figma插件 【免费下载链接】plugin-resources A collection of open source plugins, widgets and other resources for Figma FigJam that have been shared on GitHub. 项目地址: https://gitcode.com/gh_mirrors/pl/plugin…

作者头像 李华
网站建设 2026/4/12 10:37:53

Scribd下载器终极指南:3步实现电子书永久保存

Scribd下载器终极指南&#xff1a;3步实现电子书永久保存 【免费下载链接】scribd-downloader Download your books from Scribd in PDF format for personal and offline use 项目地址: https://gitcode.com/gh_mirrors/scr/scribd-downloader 在数字阅读时代&#xff…

作者头像 李华
网站建设 2026/4/10 19:27:31

Font Awesome 7本地化部署终极指南:5分钟快速配置与性能优化技巧

Font Awesome 7本地化部署终极指南&#xff1a;5分钟快速配置与性能优化技巧 【免费下载链接】Font-Awesome The iconic SVG, font, and CSS toolkit 项目地址: https://gitcode.com/GitHub_Trending/fo/Font-Awesome 还在为网络不稳定导致的图标加载失败而烦恼吗&#…

作者头像 李华