arduino - 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
。这可能是上拉电阻不起作用的原因吗?
解决方案
对于正在和将要为此苦苦挣扎的每个人来说,最终的解决方案或多或少是先前解决方案的组合。
首先,您需要包含库:
#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
.
推荐阅读
- html - 非常基本的媒体查询不适用于移动设备
- android - 如何解决问题:无法解析符号“CreateTodoInput”?
- python - Pandas DataFrame 字符串替换后跟拆分并设置交集
- javascript - 为什么 if 语句不起作用并使用 display: none 使我的元素消失?
- design-patterns - 这是“合法”的微服务设计吗?
- emacs - 当 emacs 加载 hello.tex 时,latex-preview-pane-update 找不到“pdflatex”目录
- file-upload - 使用 Angular HTTP 上传 Ionic 4 图像
- jakarta-ee - 显示应用程序的版本
- android - 如何正确修改或删除领域中的对象?
- python - 如何根据列中字符串的长度有条件地从 PySpark Dataframe StringType() 列中删除字符的子字符串?