首页 > 解决方案 > ESP32 外部引脚唤醒,带内部上拉电阻

问题描述

我对使用 Arduino 和任何类型的电路都很陌生。

我正在尝试使用命令设置 ESP32 板以使用外部触发器唤醒esp_sleep_enable_ext0_wakeup

void setup(){
    int MY_PIN = 13;
    pinMode(MY_PIN, INPUT_PULLUP);

    int reading = digitalRead(MY_PIN);
    if(reading == 1) {
        esp_sleep_enable_ext0_wakeup(GPIO_NUM_13,0);
    }
    else {
        esp_sleep_enable_ext0_wakeup(GPIO_NUM_13,1);
    }

    // I want the board to wake up every time the state of the switch changes.

    esp_deep_sleep_start();
}

我遇到了麻烦。唤醒并没有在我期望的时候发生。我认为这与使用外部上拉电阻有关。我没有连接一个。

有没有办法为此目的使用内部上拉电阻?

我会很感激任何能解释这通常是如何工作的人。

文档说:

@note 此函数不会修改引脚配置。该管脚在 esp_sleep_start 中配置,在进入睡眠模式之前。

也许我需要正确配置它esp_sleep_pd_config。这可能是上拉电阻不起作用的原因吗?

标签: arduinoesp32

解决方案


对于正在和将要为此苦苦挣扎的每个人来说,最终的解决方案或多或少是先前解决方案的组合。

首先,您需要包含库:

#include "driver/rtc_io.h"

现在您需要启用上拉/下拉并同时禁用相反的。像这样:

rtc_gpio_pullup_en(GPIO_NUM_13);
rtc_gpio_pulldown_dis(GPIO_NUM_13);
esp_sleep_enable_ext0_wakeup(GPIO_NUM_13,0);

而已。您不需要启用rtc_gpio_hold_en.


推荐阅读