news 2026/3/5 22:54:47

MicroPython+ESP32项目应用:温湿度监测系统搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MicroPython+ESP32项目应用:温湿度监测系统搭建

用 MicroPython 玩转 ESP32:手把手搭建一个温湿度监测系统

你有没有试过在夏天走进一间闷热的房间,第一反应就是“这湿度得有80%了吧”?或者担心家里的绿植是不是缺水了?其实这些日常问题,都可以通过一个小小的温湿度监测系统来解决。更酷的是——不用懂复杂的嵌入式编程,也能快速做出这样一个智能小设备。

今天,我们就用MicroPython + ESP32 + DHT传感器,从零开始打造一套完整的无线环境监控系统。整个过程不需要编译、不用配SDK、不写Makefile,就像写Python脚本一样简单直接。即使是刚入门的新手,也能在几小时内看到自己的数据飞到网络上。


为什么选择 MicroPython 而不是 Arduino?

说到给ESP32编程,很多人第一反应是打开Arduino IDE,然后写一堆setup()loop()。但如果你已经会Python,为什么要回到C++那种“指针+头文件”的世界呢?

MicroPython 的出现,就是为了让嵌入式开发变得更“友好”。它把 Python 带到了微控制器上,保留了我们熟悉的语法和逻辑结构,同时又能直接操控GPIO、WiFi、I2C这些底层硬件。

举个例子:你想让ESP32连上Wi-Fi,传统方式可能要查十几页文档,而用 MicroPython,只需要几行代码:

import network wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("你的WiFi名字", "密码")

就这么简单。而且你还可以通过串口进入REPL(交互式命令行),一边敲代码一边看结果,就像调试普通Python程序一样直观。

这种“所见即所得”的开发体验,特别适合快速验证想法、教学演示,甚至是做毕业设计。


ESP32:不只是Wi-Fi模块,它是物联网的核心引擎

ESP32 不是简单的Wi-Fi传输芯片,它是一块真正的“全能选手”。

  • 双核Xtensa处理器,主频高达240MHz
  • 内置Wi-Fi和蓝牙(BLE),省去外接模块
  • 支持多种通信协议:SPI、I2C、UART、PWM……应有尽有
  • 34个可编程IO引脚,足够接多个传感器或执行器
  • 支持深度睡眠模式,电池供电下能撑好几天

更重要的是,它便宜!一块开发板也就二三十块钱,比一顿外卖还便宜。

这意味着你可以把它部署在家里、温室里、仓库里,甚至塞进宠物笼子当环境哨兵,完全不用担心成本问题。


DHT传感器:最接地气的温湿度方案

要说最容易上手的温湿度传感器,那必须是DHT系列,尤其是 DHT22。

别看它长得像个小塑料头插着三根线,但它内部集成了:
- 电阻式湿敏元件(测湿度)
- NTC热敏电阻(测温度)
- 专用ASIC芯片(负责信号处理和校准)

所以你拿到的数据已经是经过补偿的数字量,不需要自己做ADC转换,也不用查表修正。

关键参数一览(以DHT22为例):

参数数值
工作电压3.3V ~ 6V
温度范围-40℃ ~ 80℃
湿度范围0% ~ 100% RH
温度精度±0.5℃
湿度精度±2% @ 25℃
数据间隔≥2秒

价格不到5元,性能却足以应付大多数民用场景,性价比爆棚。

⚠️ 注意:DHT11虽然更便宜,但精度低很多(±5℃/±5%RH),建议优先选DHT22。


接线很简单:三根线搞定一切

DHT22只有三个引脚:
- VCC → 接3.3V电源
- GND → 接地
- DATA → 接任意GPIO(比如GPIO4),并加一个4.7kΩ上拉电阻

小贴士:有些模块自带上拉电阻,可以省掉外部电阻;不确定的话加上更稳。

ESP32这边随便找个可用的IO口连过去就行。我习惯用GPIO4(D4),因为不会和内置Flash冲突。


核心代码来了:读取温湿度只要5行

MicroPython 自带dht模块,简直是为这类传感器量身定制的。

from machine import Pin import dht import time # 初始化传感器(接在GPIO4) sensor = dht.DHT22(Pin(4)) while True: sensor.measure() # 启动测量 t = sensor.temperature() # 获取温度 h = sensor.humidity() # 获取湿度 print("温度: %0.1f°C, 湿度: %0.1f%%" % (t, h)) time.sleep(3) # 每3秒读一次

运行后你会看到类似输出:

温度: 26.3°C, 湿度: 58.7% 温度: 26.4°C, 湿度: 58.5% ...

整个过程无需手动解析时序波形,所有底层通信都被封装好了。哪怕你是第一次接触单总线协议,也能轻松驾驭。


加个异常处理,让它更皮实

现实世界可不像实验室那么理想。偶尔一次通信失败很正常,不能因为读错一次就让整个系统崩溃。

所以我们加上 try-except:

def read_environment(): try: sensor.measure() temp = sensor.temperature() humi = sensor.humidity() print("✅ 温度: %0.1f°C, 湿度: %0.1f%%" % (temp, humi)) return temp, humi except OSError as e: print("❌ 读取失败:", e) return None, None

这样即使某次采集出错,程序也不会中断,继续下一轮循环即可。


让它联网!上传数据就这么办

光本地打印没意思,我们要让它“说话”——把数据发出去。

方案一:HTTP POST 到本地服务器

假设你有个树莓派或者PC跑着一个接收服务,可以用urequests发送JSON:

import urequests import time def send_data(temp, humi): url = "http://192.168.1.100/api/sensor" payload = { 'device': 'esp32_dht', 'temperature': temp, 'humidity': humi, 'timestamp': time.time() } try: res = urequests.post(url, json=payload) print("📤 上传成功,状态码:", res.status_code) res.close() except Exception as e: print("⚠️ 上传失败:", e)

只要你的服务器监听对应端口,就能实时收到数据。

方案二:走 MQTT,更适合多设备管理

MQTT 是物联网领域的“标准语言”,轻量、高效、支持发布/订阅模型。

使用 umqtt.simple 库:

from umqtt.simple import MQTTClient client = MQTTClient("esp32_client", "broker.emqx.io") client.connect() def publish_data(temp, humi): msg = '{"temp":%f, "humi":%f}' % (temp, humi) client.publish(b"sensor/dht", msg.encode())

连上公共MQTT代理(如broker.emqx.io),手机App或Web页面就可以实时订阅数据显示曲线了。


完整流程:从开机到上传全自动化

现在我们把所有环节串起来,做成一个自启动系统。

第一步:烧录 MicroPython 固件

  1. 下载 MicroPython for ESP32 的.bin文件
  2. 使用esptool.py烧录:
    bash esptool.py --port /dev/ttyUSB0 erase_flash esptool.py --port /dev/ttyUSB0 write_flash 0 firmware.bin
  3. 重启后可通过串口进入 REPL

第二步:上传脚本(main.py)

保存以下内容为main.py并上传到ESP32根目录:

# main.py - 温湿度监测主程序 import network import time from machine import Pin import dht import urequests # 配置信息 WIFI_SSID = "your_wifi_name" WIFI_PASS = "your_password" SERVER_URL = "http://192.168.1.100/data" # 初始化 sensor = dht.DHT22(Pin(4)) wlan = None def connect_wifi(): global wlan wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print("🔌 正在连接Wi-Fi...", end="") wlan.connect(WIFI_SSID, WIFI_PASS) while not wlan.isconnected(): print(".", end="") time.sleep(1) print("\n🎉 Wi-Fi已连接,IP地址:", wlan.ifconfig()[0]) # 主循环 def run(): connect_wifi() while True: # 断线重连机制 if not wlan.isconnected(): connect_wifi() temp, humi = read_environment() if temp is not None: send_data(temp, humi) time.sleep(5) # 采样间隔 run()

下次通电后,设备会自动连接Wi-Fi并开始上传数据,真正实现“无人值守”。


实战技巧:让你的系统更稳定可靠

我在实际项目中踩过不少坑,总结几个关键优化点:

✅ 开启垃圾回收(GC)

长期运行容易内存泄漏,定期清理很重要:

import gc gc.collect() # 手动触发回收 print("内存占用:", gc.mem_free(), "bytes")

建议每轮循环调用一次。

✅ 添加看门狗(WDT)

防止程序卡死导致失联:

from machine import WDT wdt = WDT(timeout=8000) # 8秒内必须喂狗 # 在循环中记得刷新 wdt.feed()

一旦程序卡住超过8秒,自动重启。

✅ 使用 boot.py 做初始化配置

创建boot.py文件(自动最先运行):

# boot.py import gc import esp esp.osdebug(None) # 关闭调试输出,节省资源 gc.threshold(512*1024) # 设置GC触发阈值

这是提升稳定性的小细节,但很有效。


还能怎么玩?扩展思路给你安排上

这个系统只是起点,接下来你可以轻松升级:

🌐 接入云平台

  • 使用BlynkThingsBoard做可视化仪表盘
  • 上传到阿里云IoT腾讯连连,实现远程查看
  • 结合微信小程序推送报警消息

🔔 加个OLED屏,本地也能看

用I2C接个0.96寸OLED,实时显示当前温湿度,断网也不怕。

⚡ 低功耗改造

如果用电池供电,可以让ESP32每分钟唤醒一次读数,其余时间进入深度睡眠,续航轻松过周。

🔄 多传感器融合

除了DHT,还可以加上光照、CO₂、PM2.5等传感器,变成空气质量监测站。


写在最后:技术的价值在于解决问题

这套系统的意义,从来不只是“我会做了”。它的真正价值在于:

  • 孩子发烧时提醒卧室太干燥;
  • 温室种植户知道何时该通风加湿;
  • 快递员确认冷链包裹是否超温;
  • 老人独居家里突然湿度飙升,可能是漏水……

每一个数字背后,都是对真实世界的感知与回应。

而你只需要一块几十块的开发板、一段简洁的Python代码,就能构建这样的守护者。

如果你正在找一个既能练手又有实用价值的入门项目,那就从这个温湿度监测系统开始吧。动手试试,说不定明天你就想给全家都装上一个。

有问题欢迎留言交流,也欢迎分享你的改进版本!

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

PaddlePaddle在阿里云上的部署优化方案

PaddlePaddle在阿里云上的部署优化方案 部署前的思考:为什么选择PaddlePaddle 阿里云? 在当前AI工程化落地加速的背景下,企业不再满足于“能跑模型”,而是追求“高效、稳定、可运维”的生产级部署。尤其是在中文场景下&#xff…

作者头像 李华
网站建设 2026/2/23 0:09:10

【2025最新】基于SpringBoot+Vue的可信捐赠系统管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展和社会公益意识的提升,可信捐赠系统成为公益领域的重要工具。传统的捐赠方式存在信息不透明、流程繁琐等问题,难以满足公众对透明度和便捷性的需求。基于此,开发一个高效、透明且用户友好的捐赠管理系统显得尤…

作者头像 李华
网站建设 2026/3/5 17:58:38

MacOS用户必看:Whisper-WebUI兼容性终极指南与快速解决方案

还在为MacOS上运行Whisper-WebUI时遇到的崩溃问题而烦恼吗?当你的M2 Max芯片设备显示"cpu"检测而非GPU加速,Python进程意外终止,那些令人沮丧的内存访问错误是否让你束手无策?别担心,这份指南将带你彻底解决…

作者头像 李华
网站建设 2026/3/5 14:18:02

树莓派运行pymodbus的串口通信设置:深度剖析

树莓派 pymodbus 串口通信实战:从踩坑到稳定运行的全链路指南你有没有遇到过这种情况——树莓派接上 RS-485 模块,代码写得一丝不苟,pymodbus安装无误,结果一运行,要么超时、要么返回空数据、甚至直接报Permission de…

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

Markn轻量级Markdown查看器:5个理由让你告别传统预览模式

Markn轻量级Markdown查看器:5个理由让你告别传统预览模式 【免费下载链接】markn Lightweight markdown viewer. 项目地址: https://gitcode.com/gh_mirrors/ma/markn Markn是一款专注于阅读体验的轻量级Markdown查看器,让你能够自由搭配任何喜欢…

作者头像 李华
网站建设 2026/3/3 19:23:27

抖音视频下载器:3步解决你的内容获取难题

还在为无法下载抖音视频而烦恼吗?这款抖音视频下载工具正是你需要的解决方案。通过智能解析技术,它能够绕过平台限制,直接获取原始视频文件,让你轻松拥有纯净的视频素材! 【免费下载链接】douyin-downloader 项目地…

作者头像 李华