برد esp-cam دارای دوربین بسیار کوچک از مدل OV2640 است. توانایی عکاسی و تصویر برداری در محیطهای مختلف را دارد. این برد با داشتن تراشه وای فای و بلوتوث قابلیت انتشار تصاویر در بستر وب را دارد. همچنین به کمک اسلات میکرو SD روی برد، میتوانیم تصاویر را در کارت حافظه ذخیره کنیم. در این آموزش قصد داریم به شما فرآیند ثیت تا ذخیره تصاویر را در Micro SD به وسیله برد ESP32-CAM آموزش دهیم. در آموزش های قبلی توانستیم براحتی این برد را راه اندازی کنیم و اطلاعات را به مقصد ایمیل خود ارسال کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
تراشه ESP-32 وای فای بلوتوث
ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوتهای آن بلوتوث داخلیاش میباشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC میباشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی میباشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیقتر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته میشود.
از دیگر امکانات ماژول ESP32-cam میتوان به دوربین OV2640 با قابلیت ثبت تصویر با فرمت JPEG, BMP, grayscale اشاره کرد. همچنین با LED flash مونتاژ شده بر روی این ماژول قادر به تصویر برداری در مکانهای تاریک نیز خواهید بود. یکی از ویژگیهای کاربردی این ماژول ورودی micro SD با قابلیت ارتقا تا ۴GB است که به کاربر اجازه ذخیره تصاویر را هم میدهد.
دوربین OV2640 برد ESP-Cam
شاید برای شما سوال پیش آمده باشد که دوربین مورد استفاده در ESP-32cam چند مگاپیکسل کیفیت دارد، ولتاژ راه اندازی آن چقدر است و یا اصلا اسم این ذوربین چیست؟! خب این دوربین با پارت OV2640 یافت می شود و ولتاژ ورودی ۳٫۳ ولت دارد و کیفیت آن نیز ۲ مگاپیکسل می باشد. کمترین فریم ریت این دوربین در حالت UXGA/SXGA ، پانزده فریم بر ثانیه و بیشترین فریم ریت آن در حالت CIF شصت فریم بر ثانیه می باشد. از سری دیگر دوربین های OV می توان به OV5640 اشاره کرد با کیفیت ۵ مگاپیکسل.
کارت حافظه Micro SD برد ESP-Cam
Micro SD یا “Secure Digital” که یک کارت حافظه غیرفرار است که بهطور وسیعی در وسایل قابل حمل مانند تلفن همراه، دوربین دیجیتال، جی پی اس استفاده می شوند. همانطور که اشاره شد ما نیز در این آموزش به منظور ذخیر تصاویر ثبت شده توسط برد از یک Micro sd استفاده می کنیم.
در ضمن لازم به ذکر است با توجه به اطلاعات دیتاشیت های ارائه شده برای برد ESP32-cam، تنها SD های با حافظه حداکثر ۴گیگ را پشتیبانی میکند.
این پروژه چطور کار می کند؟!
فرآیند تصویربرداری تا ذخیره در SD تقسیم به چهار مرحله می شود. ابتدا برد در حالت Deep Sleep قرار دارد که این حالت به این معناست که ماژول تا زمانی که ما به آن دستوری ندهیم هیچ کاری انجام نمی دهد و انرژی مصرف نمی کند و به محض Reset کردن برد بوسیله میکرو سوییچ و یا پین های خروجی، برد از حالت خواب بیرون آمده تصویر را ثبت و در SD ذخیره می کند؛ فرمت تصاویر ذخیره شده نیز .jpg می باشند.
آماده کردن Micro SD
قبل شروع به راه اندازی برد بیایید micro SD که برای این پروژه در نظر گرفته ایم را آماده کنیم، خب برای این کار باید SD را فرمت کنیم طبق مراحل زیر پیش بروید. ابتدا بر روی SD مدنظرتون کلیک راست کنید و گزینه Format را انتخاب کنید.
سپس در پنجره باز شده در بخش file system گزینه FAT32 را انتخاب سپس اقدام به فرمت کردن SD بکنید.
راه اندازی 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 |
برای آپلود کد مراحل زیر را دنبال کنید:
- از منوی Tools > Board برد مدنظر خود را انتخاب کنید.
- از منوی Tools > Port پورتی که FTDI پروگرامر به آن متصل شده را انتخاب کنید.
- اقدام به آپلود کد بکنید.
کد مرجع برای ثبت تصاویر
#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 متصل است برای لحظاتی فعال و سپس غیر فعال می شود. همچنین نمام مراحل در سریال مانیتور آردوینو به نمایش در می آید.
در این مرحله با خواندن اطلاعات SD می توانیم تصاویر ثبت شده را مشاهده کنیم.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
چقدر دنبال این آموزش از این سایت های خارجی گشتم و به جواب نرسیدم
خدا قوت دمتون گرم
خیلی ممنون، خوشحالم که مفید بوده.
سلام.قابلیت اینو داره که ویدیو رو روی مموری کارت خودش رکورد کنه؟
سلام، خیر متاسفانه
ماژول پروگرامش همون یو اس بی تو تی تی ال هستش ؟
.بله، برای دریافت راهنمای کامل راهاندازی ماژول به این لینک مارجعه کنید
درود بر شما.
نصب کتابخانه ها ذکر شده به چه صورت هست؟
با تشکر
سلام آموزش راهاندازی اولیه این برد رد آموزش زیر موجود است.
آموزش راه اندازی ماژول ESP32-CAM
سلام مهندس میشه به این ماژول esp32 cam یک نمایشگر هم اضافه کرد که همزمان هم تصویر را ببینیم و هم عکسبرداری کنیم ؟؟
اینجوری بیشتر شبیه به دوربین عکاسی میشه
با سلام، این دو مورد بصورت جداگانه اجرا شده و آموزش در سایت موجود است. اما بصورت همزمان متاسفانه هنوز آموزشی منتشر نشده.
سلام مهندس تشکر از آموزش شما
میخواستم بپرسم که آیا ماژول دوربین رزبری پای که درگاه اون CSI است به ESP32CAM متصل میشه؟
با سلام، خیر. اما برد ESP32-CAM دارای مدل های متنوعی از دوربین است.
سلام و ممنون از آموزش خوبتون
من میخوام یه برد بسازم که حدود ۱۵ دقیقه یا کمتر به صورت مداوم عکس برداری کنه و در کارت حافظه ذخیره کنه و نیازی هم به وای فای و بلوتوث ندارم و میخوام با باطری راه اندازی کنم چون میخوام این برد چندین متر بالا بره و امکان نداره بهش سیم و صل کنم و همینطور هم اینکه امکان اینکه زیاد هم سنگین باشه ندارم میشه از این این پروژه استفاده کرد اگه نمیشه من هرچی گشتم پیدا نکردم میشه راهنمایی کنید
با سلام، برای این مورد آموزشی در دست انتشار است. اما از این آموزش هم میتوانید استفاده کنید، با کمی تغییر کد و پیاده سازی سناریو خودتون.
سلام. میشه اگه آموزش تکمیل شده لینکش رو هم قرار بدید؟؟؟ ممنون
با سلام، آموزش کامل در همین صفحه در دسترس هست، دقیقا لینک چه آموزشی رو میخواید؟
سلام خسته نباشید
من این ماژول رو خریداری کردم و هم تونستم رو سطح وب بیارمش هم ویدیو رو ذخیره سازی کنم اما چند روز پیش یدونه دیگه گرفتم وقتی کد های مربوط به استریم کردن تو سطح وب رو بارگذاری میکنم صفحه تنظیمات دوربین بالا میاد ولی تصویر ندارم و یا کد های مربوط به ذخیره فیلم یا عکس رو روش بارگذاری میکنم هیچ اروری نمیده ولی فیلم و عکسی که ذخیره میکنه قابل نمایش نیست و همراه با اون یه فایلی به پسوند tmp ذخیره میکنه
بنظرتون مشکل از کجا میتونه باشه با توجه به اینکه همین کد ها روی برد دیگری کاملا جوابگو هستش
سلام، ممنونم. چون که تمام فرآیند در حال انجام است. این امکان هست که مشکل از اتصالات دوربین باشد.همچنین مثال پایه این ماژول را تست کنید برای اطمینان از کار دوربین.
سلام خسته نباشید
من این ماژول رو خریداری کردم و هم تونستم رو سطح وب بیارمش هم ویدیو رو ذخیره سازی کنم اما چند روز پیش یدونه دیگه گرفتم وقتی کد های مربوط به استریم کردن تو سطح وب رو بارگذاری میکنم صفحه تنظیمات دوربین بالا میاد ولی تصویر ندارم و یا کد های مربوط به ذخیره فیلم یا عکس رو روش بارگذاری میکنم هیچ اروری نمیده ولی فیلم و عکسی که ذخیره میکنه قابل نمایش نیست و همراه با اون یه فایلی به پسوند tmp ذخیره میکنه
بنظرتون مشکل از کجا میتونه باشه با توجه به اینکه همین کد ها روی برد دیگری کاملا جوابگو هستش!
سلام، ممنونم. چون که تمام فرآیند در حال انجام است. این امکان هست که مشکل از اتصالات دوربین باشد.همچنین مثال پایه این ماژول را تست کنید برای اطمینان از کار دوربین.
میتوانیم به جای عکس مثلاً بگوییم ۱۵ ثانیه فیلم بگیرد؟
با سلام، بله آموزشی در این مورد منتشر شده.
سلام میشه لینک این آموزش رو قرار بدید؟ با تشکر
با سلام، آموزش کامل در همین صفحه در دسترس هست، دقیقا لینک چه آموزشی رو میخواید؟
با سلام من از این کد استفاده کردم اما در سریال مانیتور خطای دوربین دریافت کردم درصورتی که این ماژول من در حالتی که تصاویر را به سرور ارسال میکند سالم است ولی در این صورتی که میخواهم که تصاویر را در sd card ذخیره کنم خطای دوربین میدهد برای رفع خطا باید چه کار کنم؟
سلام، در آموزش توضیح دادم که با توجه به مدل دوربین باید Pin definition ها تغییر داده بشن. بخش تحلیل کد رو دوباره مطالعه کنید.
سلام وقت بخیر، من ماژول esp32 cam گرفتم و حدود ۲ الی ۳ بار پروگرام کردم. و متوجه شدم دارم اشتباه پروگرام میکنم و آی پی به من نمیده. خاستم ببینم با زدن دکمه reset ماژول برمیگرده به تنظیمات اولیه کارخانه ؟
با سلام
خیر دکمه ریست هیچ ارتباطی با تنظیمات اولیه برد ندارد. صرفا برای ریبوت کردن برد استفاده میشود.
باسلام آیا با هر بار فشار دادن کلید ریست یک عکس گرفته میشود؟
وآیا تصاویر در کارت حافظه ظخیره میشود قابل ارسال است؟
با سلام
بستگی به برنامه نویسی شما دارد. هر دو حالت امکان پذیر هستند.
سلام ممنون از سایت خوبتون کد عالی و کامل بود ممنون
با سلام
از همراهی شما سپاسگزاریم.
سلام من اینو رو esp32 am. پروگرام کردم تصویر سبزه و خیلی خیلی بیکیفیت دوربین در آوردم دوباره جا زدم پشت فلت کاغذ گذاشتم گفتم اتصالاتشو درست نی هر کاری میکنم تصویر سبزه علتش چی میتونه باشه اگه خواستید از ایمیل یه پیام بدید تصویر ها رو بفرستم ممنون اگه کمک کنید یا تلگرام پیام بدید
هر کدوم راحتید
با سلام
بایستی تنظیمات رنگ را انجام دهید همچنین نور محیط بایستی کافی باشد.