当前位置:服务支持 >  软件文章 >  ESP32-CAM拍照功能详解:如何保存至MicroSD卡

ESP32-CAM拍照功能详解:如何保存至MicroSD卡

阅读数 9
点赞 0
article_banner

ESP32-CAM拍照并保存到MicroSD卡 了解如何使用ESP32-CAM板拍照并使用Arduino IDE将其保存到microSD卡中。按下ESP32-CAM RESET按钮时,它会醒来并拍照,并将其保存在microSD卡中。 我们将使用名称为AI-Thinker模块的ESP32-CAM开发板,但其它模块也应通过在代码中进行正确的引脚分配来工作。 ESP32-CAM板是其结合了ESP32-S芯片,OV2640相机,microSD卡插槽和几个GPIO引脚。

有关ESP32-CAM的介绍,您可以按照以下教程: 目录

  • ESP32-CAM AI-Thinker引脚指南:GPIO使用说明

  • ESP32-CAM视频流和Arduino IDE的人脸识别

  • ESP32-CAM 视频流web服务器

  • ESP32-CAM与Assistant家庭助理集成

  • 所需零件

  • 项目概述

  • 格式化MicroSD卡

  • 安装ESP32附加组件

  • 一、ESP32开发环境搭建(arduino)

  • 拍摄并保存照片

  • ESP32-CAM上传代码

  • 示范

  所需零件 要遵循本教程,您需要以下组件:

  • 带OV2640的ESP32-CAM

  • MicroSD卡

  • FTDI编程器

  • 母对母连接线

  • 用于ESP32-CAM的移动电源或5V电源(可选)

 项目概述 以下是有关该项目工作原理的快速概述。

  • ESP32-CAM处于深度睡眠模式

  • 按RESET按钮唤醒开发板

  • 相机拍照

  • 照片以以下名称保存在microSD卡中:pictureX.jpg,其中X对应于图片编号

  • 图片编号将保存在ESP32闪存中,以便在RESET期间不会被擦除,我们可以跟踪拍摄的照片数量。

格式化MicroSD卡我们建议做的第一件事是格式化microSD卡。您可以使用Windows格式化程序工具或任何其它microSD格式化程序软件。 1. 将microSD卡插入计算机。转到 我的电脑, 然后右键单击SD卡。选择 格式 ,如下图所示。

2. 弹出一个新窗口。选择 FAT32,按 开始 以初始化格式化过程,然后按照屏幕上的说明进行操作。

注意:根据产品规格,ESP32-CAM只应支持4 GB SD卡。但是,我们已经使用16 GB SD卡进行了测试,并且效果很好。 安装ESP32附加组件 我们将使用Arduino IDE对ESP32开发板进行编程。因此,您需要安装Arduino IDE以及ESP32附加组件。如果尚未安装ESP32附加组件,则可以按照以下教程之一进行操作: 一、ESP32开发环境搭建(arduino)Code_Mouse

  • 5 年前

  • 2

  • 10.8k

拍摄并保存照片将以下代码复制到您的Arduino IDE中:   该代码首先包括使用相机所需的库。我们还包括与microSD卡交互所需的库:

  1. #include "esp_camera.h"

  2. #include "Arduino.h"

  3. #include "FS.h" // SD Card ESP32

  4. #include "SD_MMC.h" // SD Card ESP32

  5. #include "soc/soc.h" // Disable brownour problems

  6. #include "soc/rtc_cntl_reg.h" // Disable brownour problems

  7. #include "driver/rtc_io.h"

  8. #include <EEPROM.h> // read and write from flash memory

和 EEPROM 库将永久数据保存在闪存中。

  1. #include <EEPROM.h>

 定义要在闪存中访问的字节数。在这里,我们将仅使用一个字节,该字节最多可以生成256个图片编号。

  1. #define EEPROM_SIZE 1

然后,定义AI-THINKER摄像机模块的插针。

  1. // Pin definition for CAMERA_MODEL_AI_THINKER

  2. #define PWDN_GPIO_NUM 32

  3. #define RESET_GPIO_NUM -1

  4. #define XCLK_GPIO_NUM 0

  5. #define SIOD_GPIO_NUM 26

  6. #define SIOC_GPIO_NUM 27

  7. #define Y9_GPIO_NUM 35

  8. #define Y8_GPIO_NUM 34

  9. #define Y7_GPIO_NUM 39

  10. #define Y6_GPIO_NUM 36

  11. #define Y5_GPIO_NUM 21

  12. #define Y4_GPIO_NUM 19

  13. #define Y3_GPIO_NUM 18

  14. #define Y2_GPIO_NUM 5

  15. #define VSYNC_GPIO_NUM 25

  16. #define HREF_GPIO_NUM 23

  17. #define PCLK_GPIO_NUM 22

注意:您可能需要根据所使用的板来更改引脚定义。错误的引脚分配将导致无法启动摄像机。初始化一个名为的int变量 pictureNumber 将生成照片名称的图片:picture1.jpg,picture2.jpg等。

  1. int pictureNumber = 0;

我们所有的代码都在 setup() 。该代码仅在ESP32唤醒时运行一次(在这种情况下,当您按板载的RESET按钮时)。定义相机设置:

  1. camera_config_t config;

  2. config.ledc_channel = LEDC_CHANNEL_0;

  3. config.ledc_timer = LEDC_TIMER_0;

  4. config.pin_d0 = Y2_GPIO_NUM;

  5. config.pin_d1 = Y3_GPIO_NUM;

  6. config.pin_d2 = Y4_GPIO_NUM;

  7. config.pin_d3 = Y5_GPIO_NUM;

  8. config.pin_d4 = Y6_GPIO_NUM;

  9. config.pin_d5 = Y7_GPIO_NUM;

  10. config.pin_d6 = Y8_GPIO_NUM;

  11. config.pin_d7 = Y9_GPIO_NUM;

  12. config.pin_xclk = XCLK_GPIO_NUM;

  13. config.pin_pclk = PCLK_GPIO_NUM;

  14. config.pin_vsync = VSYNC_GPIO_NUM;

  15. config.pin_href = HREF_GPIO_NUM;

  16. config.pin_sscb_sda = SIOD_GPIO_NUM;

  17. config.pin_sscb_scl = SIOC_GPIO_NUM;

  18. config.pin_pwdn = PWDN_GPIO_NUM;

  19. config.pin_reset = RESET_GPIO_NUM;

  20. config.xclk_freq_hz = 20000000;

  21. config.pixel_format = PIXFORMAT_JPEG;

对于具有PSRAM的相机,请使用以下设置(例如本教程中使用的设置)。

  1. if(psramFound()){

  2. config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA

  3. config.jpeg_quality = 10;

  4. config.fb_count = 2;

  5. }

如果该开发板没有PSRAM,请进行以下设置:

  1. else {

  2. config.frame_size = FRAMESIZE_SVGA;

  3. config.jpeg_quality = 12;

  4. config.fb_count = 1;

  5. }

初始化相机:

  1. // Init Camera

  2. esp_err_t err = esp_camera_init(&config);

  3. if (err != ESP_OK) {

  4. Serial.printf("Camera init failed with error 0x%x", err);

  5. return;

  6. }

初始化microSD卡:

  1. //Serial.println("Starting SD Card");

  2. if(!SD_MMC.begin()){

  3. Serial.println("SD Card Mount Failed");

  4. return;

  5. }

  6. uint8_t cardType = SD_MMC.cardType();

  7. if(cardType == CARD_NONE){

  8. Serial.println("No SD Card attached");

  9. return;

  10. }

 以下几行用相机拍摄照片:

  1. camera_fb_t * fb = NULL;

  2. // Take Picture with Camera

  3. fb = esp_camera_fb_get();

  4. if(!fb) {

  5. Serial.println("Camera capture failed");

  6. return;

  7. }

之后,使用先前定义的大小初始化EEPROM:

  1. EEPROM.begin(EEPROM_SIZE);

图片编号是通过在闪存中保存的当前编号加1生成的。

  1. pictureNumber = EEPROM.read(0) + 1;

要将照片保存在microSD卡中,请创建文件的路径。我们将照片保存在microSD卡的主目录中,文件名将为(picture1.jpg,picture2.jpg,picture3.jpg等)。

  1. String path = "/picture" + String(pictureNumber) +".jpg";

接下来的几行将照片保存在microSD卡中:

  1. fs::FS &fs = SD_MMC;

  2. Serial.printf("Picture file name: %sn", path.c_str());

  3. File file = fs.open(path.c_str(), FILE_WRITE);

  4. if(!file){

  5. Serial.println("Failed to open file in writing mode");

  6. }

  7. else {

  8. file.write(fb->buf, fb->len); // payload (image), payload length

  9. Serial.printf("Saved file to path: %sn", path.c_str());

  10. EEPROM.write(0, pictureNumber);

  11. EEPROM.commit();

  12. }

  13. file.close();

保存照片后,我们将当前照片编号保存在闪存中,以跟踪拍摄的照片数量。

  1. EEPROM.write(0, pictureNumber);

  2. EEPROM.commit();

ESP32-CAM拍照时,其板上的LED闪烁。拍照后,LED保持点亮,因此我们发送指示将其关闭。LED连接到GPIO 4。

  1. pinMode(4, OUTPUT);

  2. digitalWrite(4, LOW);

  3. rtc_gpio_hold_en(GPIO_NUM_4);

最后,我们将ESP32置于深度睡眠状态。

  1. esp_deep_sleep_start();

因为我们没有向深度睡眠函数传递任何参数,所以ESP32板将无限期地睡眠直到RESET。ESP32-CAM上传代码 要将代码上传到ESP32-CAM开发板,请使用FTDI编程器将其连接到您的计算机。请遵循下一个原理图:

许多FTDI编程器都有一个连接线,可让您选择3.3V或5V。确保连接线在正确的位置以选择5V。 重要的: GPIO 0 需要连接到 GND 这样您就可以上传代码。

要上传代码,请按照以下步骤操作: 1)转到工具>主板,然后选择AI-Thinker ESP32-CAM。 2)进入工具>端口,选择ESP32连接的COM端口。 3)然后,点击上传按钮上传代码。

4)当您开始在调试窗口中看到这些点时,如下所示,请按ESP32-CAM板载RST按钮。

几秒钟后,该代码应成功上传到您的电路板上。 示范 上传代码后,从GND移除连接GPIO 0的连接线。 以115200的波特率打开串行监视器。按ESP32-CAM复位按钮。它应该初始化并拍照。拍照时,它会打开闪光灯(GPIO 4)。

检查Arduino IDE串行监视器窗口,看一切是否按预期工作。如您所见,图片已成功保存在microSD卡中。

  确保一切正常后,您可以从FTDI编程器断开ESP32-CAM的连接,并使用独立的电源为其供电。

要查看拍摄的照片,请从microSD卡插槽中取出microSD卡,然后将其插入计算机。您应该已经保存了所有照片。

照片的质量取决于照明条件。太多的光线会破坏您的照片,而黑暗的环境会导致许多黑色像素。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空