ESP32唤醒模式——多个GPIO模式

外部唤醒 – 多个 GPIO

现在,您应该能够使用不同的按钮唤醒 ESP32,并确定哪个按钮导致唤醒。在此示例中,我们将使用GPIO 2和GPIO 15作为唤醒源。

图解的

将两个按钮连接到 ESP32。在这个例子中,我们使用的是GPIO 2和GPIO 15,但您可以将按钮连接到任何 RTC GPIO。

在这里插入图片描述

法典

您需要对我们之前使用的示例代码进行一些修改:

  • 创建要使用的位掩码GPIO 15和GPIO 2.我们之前已经向您展示了如何执行此操作;
  • 启用 ext1 作为唤醒源;
  • 使用esp_sleep_get_ext1_wakeup_status()函数来获取触发唤醒的 GPIO。

下一个草图实现了所有这些更改。

/*
Deep Sleep with External Wake Up
=====================================
This code displays how to use deep sleep with
an external trigger as a wake up source and how
to store data in RTC memory to use it over reboots

This code is under Public Domain License.

Hardware Connections
======================
Push Button to GPIO 33 pulled down with a 10K Ohm
resistor

NOTE:
======
Only RTC IO can be used as a source for external wake
source. They are pins: 0,2,4,12-15,25-27,32-39.

Author:
Pranav Cherukupalli <cherukupallip@gmail.com>
*/

#define BUTTON_PIN_BITMASK 0x8004 // GPIOs 2 and 15

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
   
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
   
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 首先,要设置GPIO输出模式,你需要调用ESP32内部函数gpio_set_direction()。要使用该函数,你需要指定GPIO口,以及你想要设置的模式(输入/输出)。 例如,假设你想设置GPIO口23为输出模式,你可以使用下面的代码:gpio_set_direction(23, GPIO_MODE_OUTPUT); ### 回答2: 当使用ESP32开发板进行GPIO的配置时,需要借助ESP-IDF开发框架来实现。下面给出一个示例代码,用于配置ESP32GPIO口为输出模式: #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" void app_main() { gpio_config_t gpioConfig; gpioConfig.pin_bit_mask = GPIO_SEL_0; //配置GPIO0 gpioConfig.mode = GPIO_MODE_OUTPUT; //输出模式 gpioConfig.pull_up_en = GPIO_PULLUP_DISABLE; //禁用上拉 gpioConfig.pull_down_en = GPIO_PULLDOWN_DISABLE; //禁用下拉 gpioConfig.intr_type = GPIO_INTR_DISABLE; //禁用中断 gpio_config(&gpioConfig); //将配置应用于GPIO while(1) { gpio_set_level(GPIO_NUM_0, 1); //设置GPIO0输出高电平 vTaskDelay(1000 / portTICK_RATE_MS); //延时1秒 gpio_set_level(GPIO_NUM_0, 0); //设置GPIO0输出低电平 vTaskDelay(1000 / portTICK_RATE_MS); //延时1秒 } } 以上是一个简单的示例代码。首先通过`gpio_config_t`结构体来配置需要使用的GPIO。其中,`pin_bit_mask`表示要配置的GPIO位,通过宏`GPIO_SEL_0`来指定为GPIO0;`mode`表示GPIO模式,这里配置为输出模式;`pull_up_en`和`pull_down_en`分别表示启用上拉和下拉,默认禁用;`intr_type`表示中断类型,这里禁用中断。 然后,通过`gpio_config()`函数将配置应用于GPIO。接下来,使用`gpio_set_level()`函数来设置GPIO0的输出电平,通过循环实现高低电平交替输出。 请注意,以上代码仅供参考,实际使用时可能需要根据具体的硬件连接和需求进行适配和修改。 ### 回答3: 当我们使用ESP32来配置GPIO输出模式时,我们可以使用ESP-IDF (ESP32 IoT Development Framework),它是专门为ESP32开发的开发框架。下面是一个示例代码,用于配置GPIO 2为输出模式: #include "driver/gpio.h" void app_main() { gpio_pad_select_gpio(GPIO_NUM_2); // 配置GPIO 2作为一个GPIO引脚 gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT); // 配置GPIO 2为输出模式 while(1) { gpio_set_level(GPIO_NUM_2, 1); // 将GPIO 2设置为高电平 vTaskDelay(1000 / portTICK_PERIOD_MS); // 延迟1秒 gpio_set_level(GPIO_NUM_2, 0); // 将GPIO 2设置为低电平 vTaskDelay(1000 / portTICK_PERIOD_MS); // 延迟1秒 } } 首先,我们使用gpio_pad_select_gpio()函数配置GPIO_NUM_2为一个GPIO引脚。然后,我们使用gpio_set_direction()函数将GPIO_NUM_2配置为输出模式。在while循环中,我们使用gpio_set_level()函数将GPIO_NUM_2设置为高电平或低电平,并使用vTaskDelay()函数延迟1秒。 这样,我们就成功配置了ESP32GPIO 2引脚为输出模式,并可以通过设置电平控制外部设备。根据需要,你可以使用相同的方法配置其他GPIO引脚

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值