news 2026/4/17 1:14:23

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/4/15 21:54:03

PL2303驱动终极修复:5步搞定Windows兼容问题

PL2303驱动终极修复:5步搞定Windows兼容问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为老旧PL2303芯片在Windows系统上无法识别而烦恼吗&#x…

作者头像 李华
网站建设 2026/4/16 17:11:07

Java SpringBoot+Vue3+MyBatis 考务报名平台系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,传统的考务报名管理方式逐渐暴露出效率低下、数据冗余、信息孤岛等问题。教育机构和考试管理部门亟需一种高效、安全、可扩展的考务报名平台,以实现报名流程的数字化、自动化和智能化。考务报名平台系统的开发旨在解决传统报…

作者头像 李华
网站建设 2026/4/15 22:27:53

Qwen3-8B-MLX:双模式切换的AI推理神器

Qwen3-8B-MLX:双模式切换的AI推理神器 【免费下载链接】Qwen3-8B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-8B-MLX-6bit 导语 Qwen3-8B-MLX-6bit作为Qwen系列最新一代大语言模型的MLX量化版本,首次实现了单一模型内&q…

作者头像 李华
网站建设 2026/4/16 17:40:16

PaddlePaddle线下 meetup 活动回顾:北京站精彩瞬间

PaddlePaddle线下Meetup北京站回顾:从技术实践到产业落地的深度洞察 在AI开发日益平民化的今天,一个框架能否真正“用起来”,早已不再仅仅取决于它的理论性能,而是看它能不能让开发者少踩坑、快上线、稳运行。最近参加的PaddlePad…

作者头像 李华
网站建设 2026/4/16 12:57:11

树莓派更新系统卡住或报错?入门级完整示例

树莓派更新卡住?别急,一文搞懂从报错到修复的全过程 你有没有过这样的经历:刚入手树莓派,兴致勃勃打开终端想更新系统,结果输入 sudo apt update 后——屏幕卡住不动了?或者跳出一堆红字错误:…

作者头像 李华
网站建设 2026/4/16 12:51:58

GridPlayer多视频同步播放器:突破传统播放限制的专业解决方案

GridPlayer多视频同步播放器:突破传统播放限制的专业解决方案 【免费下载链接】gridplayer Play videos side-by-side 项目地址: https://gitcode.com/gh_mirrors/gr/gridplayer 在视频内容创作和多媒体教学日益普及的今天,如何高效管理多个视频源…

作者头像 李华