核心思路:在WiFi保持连接但CPU休眠时,利用ESP32的UART硬件FIFO和Modbus RTU的帧间隙检测来唤醒。具体做法:1) 将UART配置为深度睡眠唤醒源(ESP32支持UART唤醒),并设置RX FIFO阈值(如1字节)触发中断;2) 在中断服务程序中仅做帧接收和CRC校验,若帧完整且地址匹配,则通过esp_wifi_set_sleep(WIFI_PS_MIN_MODEM)临时提高WiFi吞吐,快速响应后恢复;3) 关键是不丢包:需在Modbus帧间隔(3.5字符时间)内完成唤醒和响应,建议将UART波特率设为9600或19200(帧间隔较长),并启用UART的自动波特率检测;4) 实测中,使用Light-sleep模式(保留UART和WiFi)比Modem-sleep更可靠,功耗约1mA左右。注意:若主站轮询间隔小于唤醒时间,需改用ESP32的ulp协处理器辅助处理,但会增加复杂度。
mcuku 阿沐 · 2026-08-27