برد Esp32 ماژول دوربین

راه اندازی و کار با ماژول ESP32 قسمت یازدهم: ESP-Cam دوربین و کارت SD

esp32-tutorial-step-eleven-camera-and-sd-card-digispark
نوشته شده توسط معین صابری

در سلسله آموزش های ماژول ESP32، قسمت یازدهم به دوربین ESP32CAM تعبیه شده روی برد ESP32-CAM می پردازیم. همانطور که در این مجموعه آموزش مشاهده کردیم، برد ESP32 دارای توان پردازشی بسیار بالاتری نسبت به ESP8266 است. در کنار این، یکی از بردهای توسعه یافته ESP32، برد ESP32-CAM است. این برد امکانات جانبی کاربردی نظیر دورین و سوکت کارت SD دارد. در این قسمت به قابلیت دوربین این ماژول می پردازیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


دوربین ESP32CAM و پایه های GPIO


برد ESP32CAM از یک دوربین OV2640 بر روی خود بهره می برد. این دوربین سرعت فیلمبرداری ۱۵ الی ۶۰ FPS را بر روی خود جای داده است. همچنین این دوربین از یک مبدل A/D  با رزولشن ۱۰ بیت بهره می برد. این دوربین جهت تبادل داده برخی از پایه های GPIO را درگیر می نماید. جدول زیر اتصالات بین دوربین و برد ESP را نمایش می دهد.

پایه برد ESP32CAM پایه دوربین OV2640
۳۲ PWDN_GPIO_NUM
۰ XCLK_GPIO_NUM
۲۶ SIOD_GPIO_NUM
۲۷ SIOC_GPIO_NUM
۳۵ Y9_GPIO_NUM
۳۴ Y8_GPIO_NUM
۳۹ Y7_GPIO_NUM
۳۶ Y6_GPIO_NUM
۲۱ Y5_GPIO_NUM
۱۹ Y4_GPIO_NUM
۱۸ Y3_GPIO_NUM
۵ Y2_GPIO_NUM
۲۵ VSYNC_GPIO_NUM
۲۳ HREF_GPIO_NUM
۲۲ PCLK_GPIO_NUM

 

 علاوه بر این، به پایه GPIO4  چراغ فلش متصل بوده که با فعال سازی آن هنگام عکاسی، می توان تصویر را با کیفیت در شب و یا نورهای کم گرفت. پس از آشنایی با اتصالات پایه های دوربین ESP32CAM و ماژول، نوبت به کدهای راه اندازی می رسد. قسمت بعد مربوط به این مورد است.

برد ESP32-Cam راه اندازی قدم به قدم - دیجی اسپارک

 


 توابع مربوط به تنظیمات ESP32CAM


جهت راه اندازی، کار و عکاسی با دوربین OV2640، کتابخانه توسعه یافته است. بدین ترتیب راه اندازی و کار با این دوربین تسریع می گردد. در این قسمت توابع مربوط به دوربین که تنظیمات آن را بر عهده دارند، بررسی می کنیم. در ابتدا جدول زیر توابع مربوط به سنسور دوربین ESP32CAM را نمایش می دهد. اما پیش از دسترسی به این توابع، می بایست به صورت زیر، اشاره گری تعریف کنیم.

 

پس از تعریف این اشاره گر که در این جا نام s بر روی آن قرار دادیم، می توانیم دوربین ESP32CAM را تنظیم نماییم. جدول زیر  برخی از توابع مربوط به تنظیم دوربین را نمایش می دهد.

 

شرح تابع
به کمک این تابع میزان درخشندگی تنظیم می گردد. این میزان در ورودی دوم قرار گرفته و در بازه ۲- الی ۲ قابل قبول است. set_brightness(s, br)
این تابع میزان کنتراست را تعیین می کند. میزان کنتراست در ورودی دوم و در بازه ۲- الی ۲ قرار می گیرد. set_contrast(s, cnt)
این تابع میزان اشباع دوربین را در بازه ۲- الی ۲ در ورودی دوم تعیین می کند. set_saturation(s, st)
این تابع افکت های خاصی را روی دوربین قرار می دهد. این افکت های اعدادی بین ۰ الی ۶ بوده که به صورت زیر تفسیر می گردند.

۰=بدون افکت

۱-نگاتیو

۲-پس زمینه خاکستری

۳-سایه قرمز

۴-سایه سبز

۵-سایه آبی

۶-قرمز قهوه ای

set_special_effect(s, effect)
این تابع میزان بالانس بودن نور سفید را تعیین می کند. ورودی دوم اگر صفر باشد این قابلیت غیر فعال و اگر ۱ باشد فعال خواهد شد. set_whitebal(s, bl)
 به کمک این تابع می توان افکت نور سفید را تنظیم کرد. مقادیر معتبر برای ورودی mode عبارتند از:

۰:خودکار

۱:آفتابی

۲:ابری

۳:حالت اداری

۴:حالت خانگی

 

set_wb_mode(s, mode)
به کمک این تابع می توان مد اصلاح لنز را فعال کرد. فعال و غیر فعال سازی این قابلیت در ورودی دوم با مقدار ۰ برای غیر فعال و ۱ برای فعال سازی این مد خواهد بود. set_lenc(s,lens_correction)

 

 پس از بررسی توابع مربوط به سنسور دوربین، نوبت به بررسی متغیرهای کلیدی جهت تعیین کیفیت و فرمت عکس می رسد. این متغیر ها در جدول زیر لیست می گردند. البته پیش از جدول زیر، یک شی باید از کلاس تعریف کنیم.

 

مقدارهای معتبر شرح متغیر
مقدار معتبر برای این متغیر برابر با عدد زیر است.

۲۰۰۰۰۰۰۰

تنظیم فرکانس کلاک دوربین config.xclk_freq_hz
PIXFORMAT_YUV422

PIXFORMAT_GRAYSCALE

PIXFORMAT_RGB565

PIXFORMAT_JPEG

 

تنظیم فرمت ذخیره سازی تصاویر config.pixel_format
FRAMESIZE_UXGA

(۱۶۰۰ x 1200)

FRAMESIZE_QVGA

(۳۲۰ x 240)

FRAMESIZE_CIF

(۳۵۲ x 288)

FRAMESIZE_VGA

(۶۴۰ x 480)

FRAMESIZE_SVGA (۸۰۰ x 600)

FRAMESIZE_XGA (۱۰۲۴ x 768)

FRAMESIZE_SXGA (۱۲۸۰ x 1024)

 

تنظیم اندازه تصاویر FRAMESIZE
این متغیر کیفیت تصویر در فرمت JPEG را تنظیم می کند. مقدار معتبر بین ۱۰ الی ۶۳ بوده و هرچه مقدار بیشتر شود، کیفیت تصویر کاهش می یابد. تنظیم کیفیت تصویر در فرمت jpeg config.jpeg_quality

 

 پس از بررسی متغیرها و توابع مربوط به تنظیمات، نوبت به اجرای نمونه برنامه می رسد. قسمت بعدی مربوط به این موضوع است.

توجه: جهت آپلود برنامه روی برد ESP32CAM، از منوی Tools->Board گزینه ESP32 و سپس برد AI THINKER ESP32-CAM را انتخاب کنید.

 


عکاسی با دوربین ESP32CAM


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

 

 اشاره گر فوق،  اشاره گری به کلاس کتابخانه است. این اشاره گر دو متغیر داشته که به شیوه زیر قابل دسترسی و توضیح است.

  • fb->len: متغیری جهت نمایش تعداد بایت های عکس
  • fb->buf: آرایه ای از بایت ها جهت ذخیره بایت های عکس

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

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

 


پخش زنده تصاویر از طریق وای فای


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

 


کارت SD


همانطور که اطلاع دارید، برد ESP32CAM دارای سوکت کارت SD است. به کمک این قابلیت می توان تصاویر را روی کارت SD ذخیره نمود. اما جهت استفاده از کارت SD، پایه های ۱۲ الی ۱۵ و پایه ۲ و ۴ نیز اشغال خواهند شد. جدول زیر شرح اتصالات بین سوکت SD و پیاه های GPIO برد ESP32 را نمایش می دهد.

SD ESP32CAM
PIN14 CLK
PIN15 CMD
PIN2 DATA0
PIN4 DATA1/FLASH
PIN12 DATA2
PIN13 DATA3

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 


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


  1. برد ESP32ACM
  2. مبدل سریال به USB
  3. کارت حافظه SD

 


جمع بندی


در سلسله آموزش های ماژول ESP32، قسمت یازدهم به بررسی قابلیت دوربین این ماژول پرداختیم. همانطور که در این آموزش هم به آن اشاره شد، بر روی برد ESP32-CAM یک دوربین جهت ثبت فیلم و عکس برداری تعبیه شده است. دوربین به کار رفته در برد ESP32CAM قابلیت های بسیاری جهت ثبت عکس و ضبط فیلم دارد. در این آموزش به توابع و متغیرهای کلیدی جهت اعمال تنظیمات دوربین پرداختیم. سپس توابع و دستورات مربوط به عکس برداری و ذخیره در حافظه را مورد بررسی قرار دادیم. همچنین به قابلیت کارت SD ماژول و نحوه ذخیره سازی عکس در کارت حافظه پرداخته شد. در نهایت با ارائه یک مثال، نحوه عکاسی، ذخیره عکس در حافظه و آزاد سازی آن از حافظه بررسی گردید.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۱۸ دیدگاه

  • ساعت مهندس
    یه نمایشگر هم به این برد اضافه کنید و باهاش عکس بگیریم و داخل SD card ذخیره کنیم
    در واقع آموزش ساخت دوربین عکاسی بزارید

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

      • بله فعال کردم ولی تصویر نمایش داده نمیشه چطور میشه مطمئن شد که دوربین عیب سخت افزاری نداره

        • به نظر نمیرسد دوربین ایرادی داشته باشد. چراکه اگر دوربین دچار ایرا باشه برنامه اجرا نمی شود. اما برای اطمینان بیشتر، منوی DEBUG را فعال کرده و پیغام های چاپ شده در سریال مانیتور را در کامنت بعد قرار دهید.

          • [ ۹۲۹۵۷][E][app_httpd.cpp:554] stream_handler(): [] Camera capture failed
            [ ۹۲۹۵۷][E][app_httpd.cpp:708] stream_handler(): [] send frame failed failed

                  • وقتی ماژول رو ریست میکنم این اطلاعات میاد
                    ….ets Jul 29 2019 12:21:46

                    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
                    configsip: 0, SPIWP:0xee
                    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
                    mode:DIO, clock div:1
                    load:0x3fff0030,len:1344
                    load:0x40078000,len:13516
                    load:0x40080400,len:3604
                    entry 0x400805f0
                    [۰$⸮LLW+QW⸮Y.\&⸮KZX⸮K,\]⸮,’⸮LMW⸮⸮Y](\]⸮⸮equencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
                    [ ۸۵۲][I][esp32-hal-psram.c:96] psramInit(): PSRAM enabled

                    [ ۱۱۵۰][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 0 – WIFI_READY
                    [ ۱۲۴۵][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 2 – STA_START
                    [ ۱۳۳۹][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 4 – STA_CONNECTED
                    [ ۱۳۷۷][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 7 – STA_GOT_IP
                    [ ۱۳۷۷][D][WiFiGeneric.cpp:914] _eventCallback(): STA IP: 192.168.43.121, MASK: 255.255.255.0, GW: 192.168.43.1
                    WiFi connected
                    [ ۱۷۵۶][I][app_httpd.cpp:1237] startCameraServer(): [] Starting web server on port: ’80’
                    [ ۱۷۵۸][I][app_httpd.cpp:1255] startCameraServer(): [] Starting stream server on port: ’81’
                    Camera Ready! Use ‘http://192.168.43.121’ to connect

                    وقتی به آی پی وصل میشم واستارت استریم رو میزنم این پیغام رو میده
                    [۱۳۱۶۹۷][E][app_httpd.cpp:554] stream_handler(): [] Camera capture failed
                    [۱۳۱۶۹۷][E][app_httpd.cpp:708] stream_handler(): [] send frame failed failed

                  • ets Jul 29 2019 12:21:46

                    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
                    configsip: 0, SPIWP:0xee
                    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
                    mode:DIO, clock div:1
                    load:0x3fff0030,len:1344
                    load:0x40078000,len:13516
                    load:0x40080400,len:3604
                    entry 0x400805f0
                    [D][esp32-hal-cpu.c:214] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
                    [ ۸۵۲][I][esp32-hal-psram.c:96] psramInit(): PSRAM enabled

                    [ ۱۱۵۰][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 0 – WIFI_READY
                    [ ۱۲۴۶][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 2 – STA_START
                    [ ۱۳۵۵][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 5 – STA_DISCONNECTED
                    [ ۱۳۵۵][W][WiFiGeneric.cpp:873] _eventCallback(): Reason: 202 – AUTH_FAIL
                    [ ۱۳۵۸][D][WiFiGeneric.cpp:889] _eventCallback(): WiFi Reconnect Running
                    ..[ ۲۲۷۹][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 4 – STA_CONNECTED
                    [ ۲۳۲۸][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 7 – STA_GOT_IP
                    [ ۲۳۲۸][D][WiFiGeneric.cpp:914] _eventCallback(): STA IP: 192.168.43.121, MASK: 255.255.255.0, GW: 192.168.43.1
                    WiFi connected
                    [ ۲۷۵۷][I][app_httpd.cpp:1237] startCameraServer(): [] Starting web server on port: ’80’
                    [ ۲۷۵۹][I][app_httpd.cpp:1255] startCameraServer(): [] Starting stream server on port: ’81’
                    Camera Ready! Use ‘http://192.168.43.121’ to connect

                    [۱۰۳۵۴۹][E][app_httpd.cpp:554] stream_handler(): [] Camera capture failed
                    [۱۰۳۵۴۹][E][app_httpd.cpp:708] stream_handler(): [] send frame failed failed

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

  • سلام مهندس من ماژول رو با usb to ttl کد گذاری کردم همه چی اوکیه ولی در مرحله اخر کار ip آدرس رو بهم نمیده و ارور ساپورت نکردن کمرا رو میده میشه راهنمایی کنید یا واتساپ یا اینستاگرامتون رو بدید مشکلم رو با عکس نشون بدم ممنونم☹️

    • سلام
      ممکن است مشکل از پورت دوربین باشد. نکته دیگر اینکه هنگام انتخاب برد از منوی TOOLS، حتما گزینه ESP32CAM AI THINKER انتخاب شده باشد.