【花雕学编程】Arduino动手做(230)--ESP32-CAM带定时器唤醒
ESP32-CAM 是一款非常小的摄像头模块,配备 ESP32-S 芯片。除了 OV2640 摄像头和几个用于连接外围设备的 GPIO 外,它还具有一个 microSD 卡插槽,可用于存储使用摄像头拍摄的图像或存储文件以提供给客户。包括乐鑫 ESP32-S Wifi + 蓝牙+BLE 芯片、2MP 摄像头模块 OV2640 和带有 CH340 UART 芯片的 USB 编程适配器。
ESP32-Cam 是一款运行在 ESP32-S 芯片上并使用 OV2640 摄像头的小型摄像头模块。ESP32_Cam 也可以 OV7670 摄像头,但 OV2640 更好(更高的分辨率和内置的 JPEG 编码,这消除了 ESP32-S 的处理任务)。
ESP-32 Cam 规格
ESP-32 系列
它支持 Wi-Fi (802.11b/g/n)
支持蓝牙 (4.2 带 BLE)
内置 LED 闪光灯
9 个 IO 端口
支持 UART、SPI、I2C 和 PWM
内置 micro SD 读卡器
输入电源:3.3V / 5V(据报道,5V 供电比 3.3V 更稳定)
OV2640 摄像头
2 百万像素
阵列尺寸:UXGA (1600 x 1200)
镜头尺寸:1/4 英寸(6.35 毫米)
最大图像传输速率:15 帧/秒
【花雕学编程】Arduino动手做(230)--ESP32-CAM带定时器唤醒
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百三十:ESP32 CAM开发板 带OV2640摄像头模块 WIFI+蓝牙模块
项目实验之十八:在ESP32-CAM上带定时器唤醒的简单深度睡眠(这里设置为五秒)
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十:ESP32 CAM开发板 带OV2640摄像头模块 WIFI+蓝牙模块
项目实验之十八:在ESP32-CAM上带定时器唤醒的简单深度睡眠(这里设置为五秒)
*/
#include <Arduino.h>
// 定义微秒到秒的转换因子
#define uS_TO_S_FACTOR 1000000ULL/* 微秒到秒的转换因子 */
// 定义ESP32进入休眠状态的时间(以秒为单位)
#define TIME_TO_SLEEP5
// 使用RTC数据存储引导计数
RTC_DATA_ATTR int bootCount = 0;
/*
打印ESP32从睡眠中唤醒的原因
*/
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("使用 RTC_IO 的外部信号引起的唤醒");
break;
case ESP_SLEEP_WAKEUP_EXT1 :
Serial.println("使用 RTC_CNTL 的外部信号引起的唤醒");
break;
case ESP_SLEEP_WAKEUP_TIMER :
Serial.println("定时器引起的唤醒");
break;
case ESP_SLEEP_WAKEUP_TOUCHPAD :
Serial.println("触摸板引起的唤醒");
break;
case ESP_SLEEP_WAKEUP_ULP :
Serial.println("ULP 程序引起的唤醒");
break;
default :
Serial.printf("唤醒不是由深度睡眠引起的: %d\n", wakeup_reason);
break;
}
}
void setup() {
// 初始化串口通信,波特率设置为115200
Serial.begin(115200);
Serial.println(" ");
Serial.println("ESP32-CAM 准备就绪!");
Serial.println(" ");
delay(1000); // 延时以确保串口监视器打开
// 增加引导计数并打印每次重启时的计数
++bootCount;
Serial.println("Boot number: " + String(bootCount));
// 打印ESP32的唤醒原因
print_wakeup_reason();
/*
首先配置唤醒源
设置ESP32每5秒唤醒一次
*/
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("设置ESP32每 " + String(TIME_TO_SLEEP) + " 秒进入休眠");
/*
接下来决定关闭/保持哪些外设
默认情况下,ESP32会自动关闭唤醒源不需要的外设,
但如果你想成为高级用户,可以自行配置。
详细信息请参阅API文档:
http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
下面的行作为配置外设的示例,已注释。
下面的行关闭了深度睡眠中的所有RTC外设。
*/
//esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
//Serial.println("配置所有RTC外设在睡眠中关闭");
/*
现在我们已经设置了唤醒原因,并在需要时设置了
深度睡眠中的外设状态,现在可以开始进入
深度睡眠。
如果没有提供唤醒源但启动了深度睡眠,
它将永远睡眠,除非发生硬件重置。
*/
Serial.println("现在进入休眠");
Serial.flush();
esp_deep_sleep_start();
Serial.println("这永远不会被打印");
}
void loop() {
// 这永远不会被调用
}
【花雕学编程】Arduino动手做(230)--ESP32-CAM带定时器唤醒
程序解读1、微秒到秒的转换因子:通过#define uS_TO_S_FACTOR 1000000ULL定义微秒到秒的转换因子,方便后续时间计算。
2、休眠时间设置:通过#define TIME_TO_SLEEP 5定义ESP32进入休眠状态的时间(以秒为单位),在代码中使用这个常量设置休眠时间。
3、RTC数据存储:使用RTC_DATA_ATTR关键字定义变量bootCount,用于存储ESP32的引导次数,即使在深度睡眠后也能保留数据。
4、唤醒原因打印:函数print_wakeup_reason根据ESP32的唤醒原因打印相应信息,便于调试和了解设备状态。
5、深度睡眠配置:在setup函数中配置ESP32的唤醒源和外设状态,并调用esp_deep_sleep_start函数使ESP32进入深度睡眠模式,节省电能。
实验串口返回情况
【花雕学编程】Arduino动手做(230)--ESP32-CAM带定时器唤醒
实验场景图
页:
[1]