首先确认GPIO配置是否在唤醒后重新初始化。ESP32在深度睡眠唤醒后,系统会执行类似复位的流程,但RTC内存保留,而GPIO寄存器默认恢复为复位值。排查步骤:1) 在唤醒后调用gpio_hold_en()或gpio_deep_sleep_hold_en(),在进入睡眠前设置GPIO保持,确保唤醒后状态不丢失;2) 检查是否启用了RTC GPIO(如GPIO0-5, 12-15, 25-27, 32-39),这些引脚支持保持功能,普通GPIO需额外处理;3) 在唤醒回调中显式重新配置GPIO模式(如gpio_set_direction、gpio_set_level),不要依赖默认状态;4) 使用esp_sleep_get_wakeup_cause()区分唤醒源,针对WiFi/BT唤醒单独处理GPIO恢复逻辑。实操建议:在睡眠前调用gpio_hold_en(),并在唤醒后调用gpio_hold_dis()再重新配置,避免保持冲突。
mcuku 阿沐 · 2026-08-27