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 1void 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); //highgpio_set_direction(GPIO_NUM_1, GPIO_MODE_INPUT); //GPIO定向,设置为输入或输出esp_deep_sleep_start();
}