ESP32带内部上拉电阻的外部引脚唤醒

时间:2018-11-15 17:15:25

标签: arduino esp32

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

我试图通过使用命令esp_sleep_enable_ext0_wakeup

设置ESP32板以使用外部触发器唤醒
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();
}

我为此遇到麻烦。当我期望唤醒不会发生。我认为这与使用外部上拉电阻有关。我没有连接。

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

任何人都可以解释其总体工作原理,我将不胜感激。

documentation说:

  

@note此功能不会修改引脚配置。即将进入睡眠模式之前,已在esp_sleep_start中配置了该引脚。

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

4 个答案:

答案 0 :(得分:1)

对于每个正在为此奋斗的人,最终的解决方案或多或少是先前解决方案的组合。

首先,您需要包括库:

#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

答案 1 :(得分:0)

我相信您需要使用

来使睡眠期间保持上拉
    rtc_gpio_pullup_en(GPIO_NUM_13);

在调用esp_sleep_enable_ext0_wakeup()之前。为此,您还需要

#include "driver/rtc_io.h"

答案 2 :(得分:0)

这项工作最终为您完成了吗?我还试图在ESP32上触发内部下拉或上拉以从深度睡眠中唤醒,但它不起作用。 与外部上拉/下拉,正常工作。 鲍勃

答案 3 :(得分:0)

Appart要通过rtc_gpio_pullup_en()rtc_gpio_pulldown_en()启用上拉或下拉,必须通过调用rtc_gpio_hold_en()来启用rtc保持功能。