抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡

【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡

时间:2023-12-02 21:55:12

相关推荐

1.实验目的

部分步骤和截图来源于官网

/esp32-cam-take-photo-save-microsd-card/

使用ESP32-CAM每隔几秒拍一张照片,并存储到SD卡中。

ESP32-CAM成本约为40元,加上用过的MicroSD卡

2.实验方法

格式化MicroSD卡

对MicroSD卡格式化,注意选择FAT32格式,选择NTFS后面不能烧录代码

配置Arduino

1.在Arduino首选项中配置开发板管理器地址

(/dl/package_esp32_index.json)

2.在Arduino开发板管理器中搜索esp32并安装

3.在工具中如下进行选择,主要是选择好开发板

程序烧录

代码主要来源于最开始提到的官方网站,有很多示例,对照稍微修改了下,改成每隔几秒拍照一次,存储到SD卡中

整体代码比较简单主要是在示例上把函数加到了循环里而已

/*********Rui SantosComplete project details at /esp32-cam-take-photo-save-microsd-cardIMPORTANT!!! - Select Board "AI Thinker ESP32-CAM"- GPIO 0 must be connected to GND to upload a sketch- After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing modePermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files.The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.*********/#include "esp_camera.h"#include "Arduino.h"#include "FS.h"// SD Card ESP32#include "SD_MMC.h" // SD Card ESP32#include "soc/soc.h" // Disable brownour problems#include "soc/rtc_cntl_reg.h" // Disable brownour problems#include "driver/rtc_io.h"#include <EEPROM.h> // read and write from flash memory// define the number of bytes you want to access#define EEPROM_SIZE 1// Pin definition for CAMERA_MODEL_AI_THINKER#define PWDN_GPIO_NUM32#define RESET_GPIO_NUM -1#define XCLK_GPIO_NUM0#define SIOD_GPIO_NUM26#define SIOC_GPIO_NUM27#define Y9_GPIO_NUM 35#define Y8_GPIO_NUM 34#define Y7_GPIO_NUM 39#define Y6_GPIO_NUM 36#define Y5_GPIO_NUM 21#define Y4_GPIO_NUM 19#define Y3_GPIO_NUM 18#define Y2_GPIO_NUM 5#define VSYNC_GPIO_NUM 25#define HREF_GPIO_NUM23#define PCLK_GPIO_NUM22int pictureNumber = 0;void setup() {WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detectorSerial.begin(115200);//Serial.setDebugOutput(true);//Serial.println();}void take_pictures(){camera_config_t config;config.ledc_channel = LEDC_CHANNEL_0;config.ledc_timer = LEDC_TIMER_0;config.pin_d0 = Y2_GPIO_NUM;config.pin_d1 = Y3_GPIO_NUM;config.pin_d2 = Y4_GPIO_NUM;config.pin_d3 = Y5_GPIO_NUM;config.pin_d4 = Y6_GPIO_NUM;config.pin_d5 = Y7_GPIO_NUM;config.pin_d6 = Y8_GPIO_NUM;config.pin_d7 = Y9_GPIO_NUM;config.pin_xclk = XCLK_GPIO_NUM;config.pin_pclk = PCLK_GPIO_NUM;config.pin_vsync = VSYNC_GPIO_NUM;config.pin_href = HREF_GPIO_NUM;config.pin_sscb_sda = SIOD_GPIO_NUM;config.pin_sscb_scl = SIOC_GPIO_NUM;config.pin_pwdn = PWDN_GPIO_NUM;config.pin_reset = RESET_GPIO_NUM;config.xclk_freq_hz = 20000000;config.pixel_format = PIXFORMAT_JPEG; if(psramFound()){config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGAconfig.jpeg_quality = 10;config.fb_count = 2;} else {config.frame_size = FRAMESIZE_SVGA;config.jpeg_quality = 12;config.fb_count = 1;}// Init Cameraesp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("Camera init failed with error 0x%x", err);return;}//Serial.println("Starting SD Card");if(!SD_MMC.begin()){Serial.println("SD Card Mount Failed");return;}uint8_t cardType = SD_MMC.cardType();if(cardType == CARD_NONE){Serial.println("No SD Card attached");return;}camera_fb_t * fb = NULL;// Take Picture with Camerafb = esp_camera_fb_get(); if(!fb) {Serial.println("Camera capture failed");return;}// initialize EEPROM with predefined sizeEEPROM.begin(EEPROM_SIZE);pictureNumber = EEPROM.read(0) + 1;// Path where new picture will be saved in SD CardString path = "/picture" + String(pictureNumber) +".jpg";fs::FS &fs = SD_MMC; Serial.printf("Picture file name: %s\n", path.c_str());File file = fs.open(path.c_str(), FILE_WRITE);if(!file){Serial.println("Failed to open file in writing mode");} else {file.write(fb->buf, fb->len); // payload (image), payload lengthSerial.printf("Saved file to path: %s\n", path.c_str());EEPROM.write(0, pictureNumber);mit();}file.close();esp_camera_fb_return(fb); // Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4//pinMode(4, OUTPUT);//digitalWrite(4, LOW);//rtc_gpio_hold_en(GPIO_NUM_4);//低功耗保持状态delay(2000);Serial.println("Going to sleep now");//delay(2000);//esp_deep_sleep_start();//Serial.println("This will never be printed");Serial.println("finished!");}void loop() {take_pictures();delay(5000);}

3.实验结果

成功把照片存储在了SD卡中

4.问题汇总

烧录中出现问题(Failed to connect to ESP32:Timed out waiting for packet header)

解决办法:出现Connecting时,按住开发板的FLASH,再按一下RST,松开显示成功

5.后续计划

后续会刷一下网络摄像头的代码,看看效果联网上传到服务器进行存储添加人体红外感应模块,感应拍照

如果觉得《【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。