194浏览
查看: 194|回复: 3

[项目] 【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒

[复制链接]
【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒图1

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深度睡眠唤醒图2

驴友花雕  中级技神
 楼主|

发表于 2024-9-21 16:39:34

【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百三十:ESP32 CAM开发板 带OV2640摄像头模块 WIFI+蓝牙模块
  项目实验之十七:ESP32-CAM 深度睡眠触摸唤醒(这里设置T0唤醒)

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百三十:ESP32 CAM开发板 带OV2640摄像头模块 WIFI+蓝牙模块
  4.   项目实验之十七:ESP32-CAM 深度睡眠触摸唤醒(这里设置T0唤醒)  
  5. */
  6. #include <Arduino.h>
  7. // 定义触摸阈值,数值越大,灵敏度更高
  8. #define Threshold 40
  9. // 使用RTC数据存储引导计数
  10. RTC_DATA_ATTR int bootCount = 0;
  11. touch_pad_t touchPin;
  12. // 打印ESP32从睡眠中唤醒的原因
  13. void print_wakeup_reason() {
  14.   // 获取唤醒原因
  15.   esp_sleep_wakeup_cause_t wakeup_reason;
  16.   wakeup_reason = esp_sleep_get_wakeup_cause();
  17.   // 根据唤醒原因打印相应信息
  18.   switch (wakeup_reason) {
  19.     case ESP_SLEEP_WAKEUP_EXT0 :
  20.       Serial.println("使用 RTC_IO 的外部信号引起的唤醒");
  21.       break;
  22.     case ESP_SLEEP_WAKEUP_EXT1 :
  23.       Serial.println("使用 RTC_CNTL 的外部信号引起的唤醒");
  24.       break;
  25.     case ESP_SLEEP_WAKEUP_TIMER :
  26.       Serial.println("定时器引起的唤醒");
  27.       break;
  28.     case ESP_SLEEP_WAKEUP_TOUCHPAD :
  29.       Serial.println("触摸板引起的唤醒");
  30.       break;
  31.     case ESP_SLEEP_WAKEUP_ULP :
  32.       Serial.println("ULP 程序引起的唤醒");
  33.       break;
  34.     default :
  35.       Serial.printf("唤醒不是由深度睡眠引起的: %d\n", wakeup_reason);
  36.       break;
  37.   }
  38. }
  39. // 打印触摸板引起的唤醒原因
  40. void print_wakeup_touchpad() {
  41.   // 获取触摸板唤醒状态
  42.   touchPin = esp_sleep_get_touchpad_wakeup_status();
  43.   // 根据触摸板唤醒状态打印相应信息
  44.   switch (touchPin) {
  45.     case 0  : Serial.println("在 GPIO 0 上检测到触摸"); break;
  46.     case 1  : Serial.println("在 GPIO 1 上检测到触摸"); break;
  47.     case 2  : Serial.println("在 GPIO 2 上检测到触摸"); break;
  48.     case 3  : Serial.println("在 GPIO 3 上检测到触摸"); break;
  49.     case 4  : Serial.println("在 GPIO 4 上检测到触摸"); break;
  50.     case 5  : Serial.println("在 GPIO 12 上检测到触摸"); break;
  51.     case 6  : Serial.println("在 GPIO 13 上检测到触摸"); break;
  52.     case 7  : Serial.println("在 GPIO 14 上检测到触摸"); break;
  53.     case 8  : Serial.println("在 GPIO 15 上检测到触摸"); break;
  54.     case 9  : Serial.println("在 GPIO 16 上检测到触摸"); break;
  55.     default : Serial.println("唤醒不是通过触摸板"); break;
  56.   }
  57. }
  58. // 占位符回调函数
  59. void callback() {
  60.   // 这里可以添加触摸事件处理代码
  61. }
  62. void setup() {
  63.   // 初始化串口通信,波特率设置为115200
  64.   Serial.begin(115200);
  65.   delay(1000); // 延时以确保串口监视器打开
  66.   // 增加引导计数并打印每次重启时的计数
  67.   ++bootCount;
  68.   Serial.println("Boot number: " + String(bootCount));
  69.   // 打印ESP32和触摸板的唤醒原因
  70.   print_wakeup_reason();
  71.   print_wakeup_touchpad();
  72.   // 在触摸板0 (GPIO4) 上设置中断
  73.   touchAttachInterrupt(T0, callback, Threshold);
  74.   // 将触摸板配置为唤醒源
  75.   esp_sleep_enable_touchpad_wakeup();
  76.   // 进入深度睡眠模式
  77.   Serial.println(" 要休眠了");
  78.   esp_deep_sleep_start();
  79.   Serial.println("这永远不会被打印");
  80.   delay(1000);
  81. }
  82. void loop() {
  83.   // 这永远不会到达
  84. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-21 16:41:29

【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒

代码解读
1、触摸阈值设置:通过#define Threshold 40定义触摸阈值,数值越大,触摸灵敏度越高。
2、RTC数据存储:使用RTC_DATA_ATTR关键字定义变量bootCount,用于存储ESP32的引导次数,即使在深度睡眠后也能保留数据。
3、唤醒原因打印:函数print_wakeup_reason和print_wakeup_touchpad分别打印ESP32从睡眠中唤醒的原因和触摸板引起的唤醒原因,便于调试和了解设备状态。
4、触摸中断设置:使用touchAttachInterrupt函数在触摸板0 (GPIO4) 上设置中断,当触摸事件发生时调用回调函数callback。
5、深度睡眠模式:在setup函数中配置触摸板为唤醒源,并调用esp_deep_sleep_start函数使ESP32进入深度睡眠模式,节省电能。

实验串口返回情况

【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-21 16:44:07

【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒

实验场景图

【花雕学编程】Arduino动手做(230)--ESP32-CAM深度睡眠唤醒图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail