آموزش آردوینو اینترنت اشیا IOT برد Esp32 برد ESP8266 ماژول دوربین

عکاسی با دوربین ESP32 و ذخیره تصویر در کارت حافظه ESP-CAM

ذخیره تصاویر در کارت حافظه ESP32-CAM
نوشته شده توسط CiferTech

برد esp-cam دارای دوربین بسیار کوچک از مدل OV2640 است. توانایی عکاسی و تصویر برداری در محیط‌های مختلف را دارد. این برد با داشتن تراشه وای فای و بلوتوث قابلیت انتشار تصاویر در بستر وب را دارد. همچنین به کمک اسلات میکرو SD روی برد، میتوانیم تصاویر را در کارت حافظه ذخیره کنیم. در این آموزش قصد داریم به شما فرآیند ثیت تا ذخیره تصاویر را در Micro SD به وسیله برد ESP32-CAM آموزش دهیم. در آموزش های قبلی توانستیم براحتی این برد را راه اندازی کنیم و اطلاعات را به مقصد ایمیل خود ارسال کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


تراشه ESP-32 وای فای بلوتوث


ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش می‌باشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC می‌باشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی می‌باشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته می‌شود.

دخیره تصاویر در micro sd esp32-cam

از دیگر امکانات ماژول ESP32-cam می‌توان به دوربین OV2640 با قابلیت ثبت تصویر با فرمت JPEG, BMP, grayscale اشاره کرد. همچنین با LED flash مونتاژ شده بر روی این ماژول قادر به تصویر برداری در مکان‌های تاریک نیز خواهید بود. یکی از ویژگی‌های کاربردی این ماژول ورودی micro SD با قابلیت ارتقا تا ۴GB است که به کاربر اجازه ذخیره تصاویر را هم می‌دهد.

 


دوربین OV2640 برد ESP-Cam


شاید برای شما سوال پیش آمده باشد که دوربین مورد استفاده در ESP-32cam چند مگاپیکسل کیفیت دارد، ولتاژ راه اندازی آن چقدر است و یا اصلا اسم این ذوربین چیست؟! خب این دوربین با پارت OV2640 یافت می شود و ولتاژ ورودی ۳٫۳ ولت دارد و کیفیت آن نیز ۲ مگاپیکسل می باشد. کمترین فریم ریت این دوربین در حالت UXGA/SXGA ، پانزده فریم بر ثانیه و بیشترین فریم ریت آن در حالت CIF شصت فریم بر ثانیه می باشد. از سری دیگر دوربین های OV می توان به OV5640 اشاره کرد با کیفیت ۵ مگاپیکسل.

دخیره تصاویر در micro sd esp32-cam


کارت حافظه Micro SD برد ESP-Cam


Micro SD یاSecure Digital” که یک کارت حافظه غیرفرار است که به‌طور وسیعی در وسایل قابل حمل مانند تلفن همراه، دوربین دیجیتال، جی پی اس استفاده می شوند. همانطور که اشاره شد ما نیز در این آموزش به منظور ذخیر تصاویر ثبت شده توسط برد از یک Micro sd استفاده می کنیم.

دخیره تصاویر در micro sd esp32-cam

در ضمن لازم به ذکر است با توجه به اطلاعات دیتاشیت های ارائه شده برای برد ESP32-cam، تنها SD های با حافظه حداکثر ۴گیگ را پشتیبانی میکند.

 


این پروژه چطور کار می کند؟!


فرآیند تصویربرداری تا ذخیره در SD تقسیم به چهار مرحله می شود. ابتدا برد در حالت Deep Sleep قرار دارد که این حالت به این معناست که ماژول تا زمانی که ما به آن دستوری ندهیم هیچ کاری انجام نمی دهد و انرژی مصرف نمی کند و به محض Reset کردن برد بوسیله میکرو سوییچ و یا پین های خروجی، برد از حالت خواب بیرون آمده تصویر را ثبت و در SD ذخیره می کند؛ فرمت تصاویر ذخیره شده نیز .jpg می باشند.

 


آماده کردن Micro SD


قبل شروع به راه اندازی برد بیایید micro SD که برای این پروژه در نظر گرفته ایم را آماده کنیم، خب برای این کار باید SD را فرمت کنیم طبق مراحل زیر پیش بروید. ابتدا بر روی SD مدنظرتون کلیک راست کنید و گزینه Format را انتخاب کنید.

دخیره تصاویر در micro sd esp32-cam

سپس در پنجره باز شده در بخش file system گزینه FAT32 را انتخاب سپس اقدام به فرمت کردن SD بکنید.

دخیره تصاویر در micro sd esp32-cam

 


راه اندازی ESP-32cam


برای پروگرام کردن برد ESP-CAM نیاز به نرم افزار Arduino-IDE داریم و البته دانلود برد مربوط در محیط نرم افزار و همچنین نصب کتابخانه های مورد نیاز، برای اطلاع از این موارد می توانید به این آموزش مراجعه کنید. در این بخش خلاصه ای از مراحل پروگرام کردن ESP32-CAM را مرور می کنیم. ابتدا اتصالات زیر را با FTDI پروگرامر و ESP-CAM برقرار کنید.

ESP32-CAM FTDI Programmer
GND GND
۵V VCC (5V)
U0R TX
U0T RX
GPIO 0 GND

برای آپلود کد مراحل زیر را دنبال کنید:

  1. از منوی Tools Board برد مدنظر خود را انتخاب کنید.
  2. از منوی Tools Port پورتی که FTDI پروگرامر به آن متصل شده را انتخاب کنید.
  3. اقدام به آپلود کد بکنید.

 


کد مرجع برای ثبت تصاویر


 

 

#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_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#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_NUM     23
#define PCLK_GPIO_NUM     22

int pictureNumber = 0;

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  //Serial.setDebugOutput(true);
  //Serial.println();
  
  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|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Init Camera
  esp_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 Camera
  fb = esp_camera_fb_get();  
  if(!fb) {
    Serial.println("Camera capture failed");
    return;
  }
  // initialize EEPROM with predefined size
  EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;

  // Path where new picture will be saved in SD Card
  String 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 length
    Serial.printf("Saved file to path: %s\n", path.c_str());
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();
  }
  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");
}

void loop() {
  
}

 

 کد بالا را با توجه به آموزش های ارائه شده در برد ESP32-CAM آپلود کنید.همچنین فراموش نکنید کتابخانه هایی که در پایین با آن ها اشاره می شود، وجود آن ها اجباری بود پس در صورتی که آن را از قبل نصب نکرده اید، اقدام به دانلود و نصب آن ها بکنید.

#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

 

ما در این کد از تنظیمات پیشفرض پین های AI-Thinker استفاده کرده ایم ، شما این کد را با توجه به مدل برد خود تعویض کنید. کد زیر تنظیماتی است که ما در این پروژه استفاده کردیم.

// Pin definition for CAMERA_MODEL_AI_THINKER 
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
  
#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_NUM     23
#define PCLK_GPIO_NUM     22

تنظیمان برای مدل WROVER_KIT.

//Pin definition for CAMERA_MODEL_WROVER_KIT
#define PWDN_GPIO_NUM    -1
#define RESET_GPIO_NUM   -1
#define XCLK_GPIO_NUM    21
#define SIOD_GPIO_NUM    26
#define SIOC_GPIO_NUM    27

#define Y9_GPIO_NUM      35
#define Y8_GPIO_NUM      34
#define Y7_GPIO_NUM      39
#define Y6_GPIO_NUM      36
#define Y5_GPIO_NUM      19
#define Y4_GPIO_NUM      18
#define Y3_GPIO_NUM       5
#define Y2_GPIO_NUM       4
#define VSYNC_GPIO_NUM   25
#define HREF_GPIO_NUM    23
#define PCLK_GPIO_NUM    22

 


نتیجه پروژه ESP-Cam


بعد از آپلود، در نرم افزار Arduino ID، سریال مانیتور را باز کنید و باد ریت را بر روی ۱۱۵۲۰۰ تنظیم کنید، به محض اینکه دکمه ریست بر روی برد را فشار دهید. مراحل ثبت و ذخیره عکس صورت میگرد و همچنین LED فلش موجود در مدار ESP-CAM نیز که به GPIO4 متصل است برای لحظاتی فعال و سپس غیر فعال می شود. همچنین نمام مراحل در سریال مانیتور آردوینو به نمایش در می آید.

دخیره تصاویر در micro sd esp32-cam

در این مرحله با خواندن اطلاعات SD می توانیم تصاویر ثبت شده را مشاهده کنیم.

 


وسایل مورد نیاز


برد ESP32-CAM

ماژول FTDI پروگرامر

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۸ دیدگاه

  • چقدر دنبال این آموزش از این سایت های خارجی گشتم و به جواب نرسیدم
    خدا قوت دمتون گرم

  • سلام مهندس میشه به این ماژول esp32 cam یک نمایشگر هم اضافه کرد که همزمان هم تصویر را ببینیم و هم عکسبرداری کنیم ؟؟
    اینجوری بیشتر شبیه به دوربین عکاسی میشه

    • با سلام، این دو مورد بصورت جداگانه اجرا شده و آموزش در سایت موجود است. اما بصورت همزمان متاسفانه هنوز آموزشی منتشر نشده.

  • سلام مهندس تشکر از آموزش شما
    میخواستم بپرسم که آیا ماژول دوربین رزبری پای که درگاه اون CSI است به ESP32CAM متصل میشه؟

  • سلام و ممنون از آموزش خوبتون
    من میخوام یه برد بسازم که حدود ۱۵ دقیقه یا کمتر به صورت مداوم عکس برداری کنه و در کارت حافظه ذخیره کنه و نیازی هم به وای فای و بلوتوث ندارم و میخوام با باطری راه اندازی کنم چون میخوام این برد چندین متر بالا بره و امکان نداره بهش سیم و صل کنم و همینطور هم اینکه امکان اینکه زیاد هم سنگین باشه ندارم میشه از این این پروژه استفاده کرد اگه نمیشه من هرچی گشتم پیدا نکردم میشه راهنمایی کنید

  • سلام خسته نباشید
    من این ماژول رو خریداری کردم و هم تونستم رو سطح وب بیارمش هم ویدیو رو ذخیره سازی کنم اما چند روز پیش یدونه دیگه گرفتم وقتی کد های مربوط به استریم کردن تو سطح وب رو بارگذاری میکنم صفحه تنظیمات دوربین بالا میاد ولی تصویر ندارم و یا کد های مربوط به ذخیره فیلم یا عکس رو روش بارگذاری میکنم هیچ اروری نمیده ولی فیلم و عکسی که ذخیره میکنه قابل نمایش نیست و همراه با اون یه فایلی به پسوند tmp ذخیره میکنه
    بنظرتون مشکل از کجا میتونه باشه با توجه به اینکه همین کد ها روی برد دیگری کاملا جوابگو هستش

    • سلام، ممنونم. چون که تمام فرآیند در حال انجام است. این امکان هست که مشکل از اتصالات دوربین باشد.همچنین مثال پایه این ماژول را تست کنید برای اطمینان از کار دوربین.

  • سلام خسته نباشید
    من این ماژول رو خریداری کردم و هم تونستم رو سطح وب بیارمش هم ویدیو رو ذخیره سازی کنم اما چند روز پیش یدونه دیگه گرفتم وقتی کد های مربوط به استریم کردن تو سطح وب رو بارگذاری میکنم صفحه تنظیمات دوربین بالا میاد ولی تصویر ندارم و یا کد های مربوط به ذخیره فیلم یا عکس رو روش بارگذاری میکنم هیچ اروری نمیده ولی فیلم و عکسی که ذخیره میکنه قابل نمایش نیست و همراه با اون یه فایلی به پسوند tmp ذخیره میکنه
    بنظرتون مشکل از کجا میتونه باشه با توجه به اینکه همین کد ها روی برد دیگری کاملا جوابگو هستش!

    • سلام، ممنونم. چون که تمام فرآیند در حال انجام است. این امکان هست که مشکل از اتصالات دوربین باشد.همچنین مثال پایه این ماژول را تست کنید برای اطمینان از کار دوربین.

  • با سلام من از این کد استفاده کردم اما در سریال مانیتور خطای دوربین دریافت کردم درصورتی که این ماژول من در حالتی که تصاویر را به سرور ارسال میکند سالم است ولی در این صورتی که میخواهم که تصاویر را در sd card ذخیره کنم خطای دوربین میدهد برای رفع خطا باید چه کار کنم؟

    • سلام، در آموزش توضیح دادم که با توجه به مدل دوربین باید Pin definition ها تغییر داده بشن. بخش تحلیل کد رو دوباره مطالعه کنید.

  • سلام وقت بخیر، من ماژول esp32 cam گرفتم و حدود ۲ الی ۳ بار پروگرام کردم. و متوجه شدم دارم اشتباه پروگرام میکنم و آی پی به من نمیده. خاستم ببینم با زدن دکمه reset ماژول برمیگرده به تنظیمات اولیه کارخانه ؟