sevenhh7 2025-08-05 15:25 采纳率: 0%
浏览 13

esp32s-c3 深度睡眠后无法用引脚唤醒。

esp32s-c3 深度睡眠后无法用引脚唤醒。
用的ide是Thonny。
esp32s-c3固件是官方最新的micropython。

import machine, esp32
from machine import Pin, deepsleep
# 配置唤醒引脚 (GPIO2)
wake_pin = Pin(2, Pin.IN, Pin.PULL_UP)
esp32.wake_on_ext0(wake_pin, esp32.WAKEUP_ALL_LOW)
print("进入深度睡眠")
deepsleep()  # 进入深度睡眠

img

输出:

img

操作:深度睡眠后,将对应的gpio 2接GND。此时无法唤醒esp32c3

我尝试了只执行定时唤醒时,是可以唤醒的。
如:machine.deepsleep(5000)
这样在五秒后是可以唤醒的。

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-08-05 15:29
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你遇到的问题是:ESP32-S3 在深度睡眠后无法通过引脚唤醒,但使用定时器唤醒可以成功。这表明问题可能出在 唤醒引脚的配置或硬件连接 上。


    ✅ 问题分析

    1. ESP32-S3 的 wake_on_ext0 接口限制

      • ESP32-S3 支持通过 wake_on_ext0wake_on_ext1 来配置外部唤醒。
      • 注意wake_on_ext0 只能使用特定的 GPIO 引脚(通常是 GPIO4 到 GPIO15),而 GPIO2 不在支持范围内
      • 所以你尝试用 GPIO2 唤醒是无效的。
    2. 代码中使用了错误的 GPIO 引脚

      • 你使用了 Pin(2, Pin.IN, Pin.PULL_UP),这是 GPIO2,而它不支持 wake_on_ext0
    3. 正确的唤醒引脚范围

      • ESP32-S3 的 wake_on_ext0 支持的 GPIO 范围为:
        • GPIO4 ~ GPIO15
      • 因此你需要将唤醒引脚设置为这些范围内的一个。

    🔧 解决方案

    1. 更换唤醒引脚

    将唤醒引脚从 GPIO2 更换为 GPIO4 到 GPIO15 中的一个,比如 GPIO5。

    import machine, esp32
    
    # 配置唤醒引脚 (GPIO5)
    wake_pin = Pin(5, Pin.IN, Pin.PULL_UP)
    esp32.wake_on_ext0(wake_pin, esp32.WAKEUP_ALL_LOW)
    
    print("进入深度睡眠")
    machine.deepsleep()  # 进入深度睡眠
    

    重点说明:
    ESP32-S3 的 wake_on_ext0 仅支持 GPIO4 ~ GPIO15。
    如果使用其他引脚(如 GPIO2、GPIO3 等)则无法唤醒。


    2. 检查硬件连接

    确保你使用的唤醒引脚(例如 GPIO5)正确连接到 GND,并且没有短路或断路。

    • 使用万用表测试引脚是否正常。
    • 确保在唤醒时,该引脚确实被拉低(GND)。

    3. 验证唤醒逻辑

    你可以添加一些调试输出来确认是否进入了唤醒流程:

    import machine, esp32
    
    # 检查唤醒原因
    if machine.reset_cause() == machine.DEEPSLEEP_RESET:
        print("从深度睡眠唤醒")
    
    # 配置唤醒引脚 (GPIO5)
    wake_pin = Pin(5, Pin.IN, Pin.PULL_UP)
    esp32.wake_on_ext0(wake_pin, esp32.WAKEUP_ALL_LOW)
    
    print("进入深度睡眠")
    machine.deepsleep()
    

    重点说明:
    使用 machine.reset_cause() 可以判断是否是从深度睡眠唤醒。


    4. 使用定时唤醒作为测试

    你已经发现定时唤醒是有效的,这说明系统本身没有问题。因此问题一定出在 唤醒引脚的配置或硬件上


    ✅ 总结

    | 步骤 | 内容 | |------|------| | 1 | 更换唤醒引脚为 GPIO4 ~ GPIO15 中的一个(如 GPIO5)。 | | 2 | 确保硬件连接正确(引脚拉低至 GND)。 | | 3 | 添加唤醒检测逻辑(使用 machine.reset_cause())。 | | 4 | 确认代码无误(避免语法或逻辑错误)。 |


    📌 最终建议

    如果你仍然无法唤醒,请尝试以下步骤:

    1. 使用 GPIO5GPIO6 作为唤醒引脚。
    2. 使用 USB 串口监控 查看日志,确认是否进入唤醒状态。
    3. 尝试使用 wake_on_ext1(如果需要多个引脚唤醒)。

    如果你需要我帮你修改完整代码示例,请告诉我你的目标引脚和用途。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月5日