Пробуждение внешних контактов 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. Может быть, это причина того, что подтягивающий резистор не работает?


person Morten Twellmann    schedule 15.11.2018    source источник


Ответы (4)


Для всех, кто борется и будет с этим бороться, окончательное решение - это более или менее комбинация предыдущих решений.

Сначала вам нужно подключить библиотеку:

#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.

person cicicok    schedule 11.06.2020

Я считаю, что вам нужно поддерживать подтягивание во время сна, используя

    rtc_gpio_pullup_en(GPIO_NUM_13);

перед вызовом esp_sleep_enable_ext0_wakeup (). Для этого вам также необходимо

#include "driver/rtc_io.h"
person William    schedule 13.12.2018

В конечном итоге это сработало для вас? Я также пытаюсь запустить внутренние подтягивания или подтягивания на ESP32, чтобы проснуться от глубокого сна, и это не работает. С внешними подтягиваниями / опусканием работает нормально. Боб

person BobDenis    schedule 11.03.2019

Помимо включения подтягивания или опускания через rtc_gpio_pullup_en() или rtc_gpio_pulldown_en(), вы должны включить удержание rtc, вызвав rtc_gpio_hold_en().

person Peluko    schedule 27.05.2020