207| 6
|
[项目] 【花雕学编程】Arduino动手做(230)--深度休眠长延时摄影 |
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】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二百三十:ESP32 CAM开发板 带OV2640摄像头模块 WIFI+蓝牙模块 项目实验之十二:ESP32 CAM 长时延时摄影:在拍摄之间使设备休眠并记住帧号 实验开源代码
|
代码解释: 1、引入库和定义常量
esp_camera.h: 用于摄像头的初始化和操作。 SD_MMC.h: 用于SD卡的初始化和操作。 EEPROM.h: 用于EEPROM的读写操作。 EEPROM_SIZE_IN_BYTES: 定义EEPROM的大小为1字节,用于存储照片编号。 2、选择摄像头型号
CAMERA_MODEL_AI_THINKER: 选择AI Thinker摄像头模块。 camera_pins.h: 包含摄像头引脚定义。 3、定义全局变量和常量
photoPrefix: 照片文件名前缀。 photoNumber: 照片编号,从EEPROM读取。 MICROSECONDS_IN_SECONDS: 每秒的微秒数。 SLEEP_TIME_IN_SECONDS: 睡眠时间(秒)。 sleepTime: 睡眠时间(微秒)。 4、初始化设置
Serial.begin(115200): 初始化串口通信,波特率为115200。 EEPROM.begin(EEPROM_SIZE_IN_BYTES): 初始化EEPROM。 photoNumber = EEPROM.read(0): 从EEPROM读取照片编号。 5、摄像头配置和初始化
camera_config_t config: 定义摄像头配置结构体。 config.pin_xxx: 设置摄像头引脚。 config.xclk_freq_hz: 设置XCLK频率。 config.pixel_format: 设置像素格式为JPEG。 psramFound(): 检查是否存在PSRAM,调整帧大小和JPEG质量。 esp_camera_init(&config): 初始化摄像头。 |
6、传感器设置
sensor_t * s = esp_camera_sensor_get(): 获取摄像头传感器。 s->set_vflip(s, 1): 垂直翻转图像。 s->set_brightness(s, 1): 设置亮度。 s->set_saturation(s, -2): 设置饱和度。 s->set_framesize(s, FRAMESIZE_XGA): 设置帧大小。 7、初始化SD卡
SD_MMC.begin(): 初始化SD卡。 SD_MMC.cardType(): 检查SD卡类型。 ResetPhotoNumbering(): 重置照片编号。 8、拍照和保存照片
TakePhoto(false): 拍摄第一张照片但不保存。 TakePhoto(true): 拍摄第二张照片并保存到SD卡。 esp_sleep_enable_timer_wakeup(sleepTime): 设置ESP32的睡眠时间间隔。 esp_deep_sleep_start(): 让ESP32进入深度睡眠。 9、拍照函数
TakePhoto(bool savePhoto): 拍照函数。 camera_fb_t * fb = esp_camera_fb_get(): 获取摄像头帧缓冲区。 String photoFileName = photoPrefix + String(photoNumber) + “.jpg”: 创建照片文件名。 File file = fs.open(photoFileName.c_str(), FILE_WRITE): 打开文件写入模式。 file.write(fb->buf, fb->len): 写入图像数据。 ++photoNumber: 增加照片编号。 EEPROM.write(0, photoNumber): 更新EEPROM中的照片编号。 EEPROM.commit(): 提交EEPROM更改。 esp_camera_fb_return(fb): 释放帧缓冲区。 |
10、重置照片编号函数
fs::FS &fs = SD_MMC: 使用SD_MMC文件系统。 File sdCardRoot = fs.open(“/”): 打开SD卡根目录。 if (!sdCardRoot): 检查是否成功打开根目录。 if (!sdCardRoot.isDirectory()): 检查根目录是否为目录。 File file = sdCardRoot.openNextFile(): 打开根目录中的下一个文件。 if (file): 检查SD卡是否不为空。 if (!file): 如果SD卡为空,重置照片编号为0,并更新EEPROM。 11、主循环函数
void loop(): 主循环函数。在这个示例中,不需要在循环中执行任何操作,因为所有逻辑都在setup()函数中完成。 总结 这个代码实现了以下功能: 1、初始化ESP32-CAM和SD卡。 2、从EEPROM读取照片编号。 3、配置摄像头参数并初始化摄像头。 4、拍摄照片并保存到SD卡。 5、更新EEPROM中的照片编号。 6、进入深度睡眠以节省电力。 7、在SD卡为空时重置照片编号。 这些功能使你的ESP32-CAM能够定期拍照并保存到SD卡,同时保持低功耗模式。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed