GPIO 唤醒深度睡眠的esp32-c3
经实验,led 必须接入c3 的gpio 20,21 脚,接入0-10脚led不亮。1脚接高电平,led亮5秒。特别注意,c3 刷入代码后,要按an键退出下载模式单片机才能正常运行。
代码
#include <stdio.h>
#include "esp_sleep.h"
#include "esp_log.h"
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_timer.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "nvs_flash.h"
#include "nvs.h"
#define LED 21 //led 不能接入0-10脚
#define AJ 1
void app_main(void) {
// 配置 LED GPIO 为输出模式 gpio 0 脚为1,led 亮
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_OUTPUT;
io_conf.pin_bit_mask = (1ULL << LED);
io_conf.pull_down_en = 0;
io_conf.pull_up_en = 0;
gpio_config(&io_conf);
// esp_sleep_enable_timer_wakeup(5 * 1000000);
esp_sleep_wakeup_cause_t hxbz = esp_sleep_get_wakeup_cause(); //取得唤醒的类型,第一次开机类型不属于gpio,led不亮
// 判断是否是深度睡眠唤醒
if (hxbz == ESP_SLEEP_WAKEUP_GPIO) { //GPIO唤醒 if条件内的语句就是唤醒后要执行的语句,如连接WiFi都行
gpio_set_level(LED,1);
vTaskDelay(5000/portTICK_PERIOD_MS); //延时5秒
gpio_set_level(LED,0);
}
//配置唤醒源
gpio_deep_sleep_hold_dis(); //在深度睡眠时禁用所有数字gpio pad保持功能。
esp_deep_sleep_enable_gpio_wakeup((1ULL<<AJ), ESP_GPIO_WAKEUP_GPIO_HIGH); //high
gpio_set_direction(GPIO_NUM_1, GPIO_MODE_INPUT); //GPIO定向,设置为输入或输出
esp_deep_sleep_start();
}