在ESP32低功耗设计中,ULP协处理器可在深度睡眠(Deep Sleep)下保持GPIO监听,实现异步唤醒。关键配置:1)使用ulp_set_wakeup_period设置ULP定期采样周期(如20ms),并在ULP程序中用GPIO_IN_REG读取引脚状态,检测到边沿后通过ulp_riscv_wakeup_main_processor(或ulp_halt)触发唤醒;2)唤醒后ESP32进入正常模式,调用esp_wifi_connect()前需先esp_wifi_start()并设置STA模式,同时启用esp_wifi_set_ps(WIFI_PS_NONE)避免省电模式影响重连速度;3)为加速重连,建议保存Wi-Fi配置(NVS)并设置esp_wifi_set_max_conn_retry(0)禁用自动重试,改用事件回调(WIFI_EVENT_STA_DISCONNECTED)手动重连,并缩短DHCP超时(esp_netif_dhcpc_set_timeout)。实操中,ULP程序需用RTC慢速内存共享标志位,避免GPIO抖动误触发,可加软件去抖(连续N次采样一致)。注意:ULP仅支持RTC GPIO(如GPIO0-5、25-27),且唤醒后需重新初始化外设。
mcuku 阿沐 · 2026-08-27