当前位置:首页 > 物联网 > 智能应用
[导读]做物联网传感器节点,传统嵌入式开发往往被C语言、交叉编译、烧录工具链拖慢。MicroPython的出现改变了这一局面——它在ESP32上内置Python解释器和REPL,让你能像写脚本一样开发嵌入式设备。本文带你半小时跑通"固件烧录→传感器读取→WiFi数据上报"的完整链路。



做物联网传感器节点,传统嵌入式开发往往被C语言、交叉编译、烧录工具链拖慢。MicroPython的出现改变了这一局面——它在ESP32上内置Python解释器和REPL,让你能像写脚本一样开发嵌入式设备。本文带你半小时跑通"固件烧录→传感器读取→WiFi数据上报"的完整链路。


一、固件烧录:让ESP32学会Python


首先从MicroPython官网下载对应ESP32的固件bin文件。注意区分:常规版本、SPIRAM版本(支持外部PSRAM的型号),初学者使用稳定版固件即可。然后用esptool擦除Flash并烧录:

pip install esptool

# 擦除旧固件(避免残留数据干扰)

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash

# 烧录MicroPython,0x1000是ESP32的标准起始地址

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 \

          write_flash -z 0x1000 esp32-20220618-v1.19.1.bin



烧录完成后,用串口终端连接开发板(波特率115200),按复位键应看到>>>提示符。开发工具推荐Thonny IDE,其提供了简洁的代码编辑器和直接的设备交互界面,在解释器设置中选择ESP32对应的串口端口即可开始编程。


二、硬件连接:DHT11温湿度传感器


ESP32的GPIO工作电压为3.3V,连接传感器时务必注意电压电平匹配。以DHT11为例:


DHT11 VCC → ESP32 3.3V

DHT11 DATA → ESP32 GPIO4

DHT11 GND → ESP32 GND



DATA线需接上拉电阻。若使用多个传感器或读数异常,建议单独给DHT11供电,避免供电不足。


三、读取传感器数据


在Thonny中新建文件,编写如下代码并运行:

import machine, dht, time


sensor = dht.DHT11(machine.Pin(4))


while True:

   try:

       sensor.measure()

       temp = sensor.temperature()

       hum = sensor.humidity()

       print("温度: {}°C, 湿度: {}%".format(temp, hum))

   except OSError as e:

       print("传感器读取失败:", e)

   time.sleep(2)



DHT11的测量范围是20-90%RH和0-50℃,精度±5%。如需更高精度可换用DHT22,仅需将dht.DHT11改为dht.DHT22即可。


四、连接WiFi并上报数据


物联网节点的核心是数据上云。下面示例连接WiFi,并通过socket搭建一个轻量HTTP服务,浏览器访问即可看到实时数据:

import network, socket, dht

from machine import Pin


# 1. 连接WiFi

def connect_wifi(ssid, pwd):

   wlan = network.WLAN(network.STA_IF)

   wlan.active(True)

   wlan.connect(ssid, pwd)

   while not wlan.isconnected():

       pass

   print("IP地址:", wlan.ifconfig()[0])


connect_wifi("你的SSID", "你的密码")


# 2. 启动HTTP服务

sensor = dht.DHT11(Pin(4))

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()

s.bind(addr)

s.listen(1)

print("HTTP服务已启动")


while True:

   cl, _ = s.accept()

   sensor.measure()

   resp = """HTTP/1.0 200 OK

Content-type: text/html


<h1>温度: {t}°C</h1><h1>湿度: {h}%</h1>""".format(

       t=sensor.temperature(), h=sensor.humidity())

   cl.send(resp)

   cl.close()



将代码保存为main.py并上传到ESP32,设备每次上电便会自动运行。


五、进阶:MQTT上报


若需要管理数百个设备,HTTP轮询效率太低,应改用MQTT。通过umqtt.simple库,每10秒向Broker推送一次数据:

from umqtt.simple import MQTTClient

client = MQTTClient("ESP32_01", "192.168.1.50")

client.connect()

client.publish(b"home/sensors/temp_hum", "temp:{},hum:{}".format(temp, hum))



注意MicroPython中MQTT主题必须是bytes对象,这是新手最常踩的坑。


六、开发调试技巧


三个实战经验:


1. 主动GC:处理完大JSON或长HTML后调用gc.collect(),避免内存碎片


2. 循环让出CPU:while True中务必加time.sleep_ms(10),否则芯片温度会飙升5-10°C


3. 异常处理:WiFi/I2C代码必须用try...except包裹,一次网络抖动就可能导致设备挂死


写在最后


MicroPython的价值不仅是"不用写C",更在于它把嵌入式开发迭代速度提升了三倍——改代码、保存、立即在板子上运行,没有编译等待。从环境搭建到WiFi数据上报,整个流程可控制在30分钟内。对于智能家居、环境监测、工业传感等场景,ESP32+MicroPython是当前性价比最高的组合:硬件成本不到50元,软件开发效率却堪比云端。当你熟悉这套套路后,还可以进一步探索蓝牙BLE、MQTT、WebREPL无线升级等高级玩法,让传感器节点真正融入物联网大生态。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭