در سلسله آموزش های ماژول 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 و ماژول، نوبت به کدهای راه اندازی می رسد. قسمت بعد مربوط به این مورد است.
توابع مربوط به تنظیمات ESP32CAM
جهت راه اندازی، کار و عکاسی با دوربین OV2640، کتابخانه توسعه یافته است. بدین ترتیب راه اندازی و کار با این دوربین تسریع می گردد. در این قسمت توابع مربوط به دوربین که تنظیمات آن را بر عهده دارند، بررسی می کنیم. در ابتدا جدول زیر توابع مربوط به سنسور دوربین ESP32CAM را نمایش می دهد. اما پیش از دسترسی به این توابع، می بایست به صورت زیر، اشاره گری تعریف کنیم.
sensor_t * s = esp_camera_sensor_get()
پس از تعریف این اشاره گر که در این جا نام 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) |
پس از بررسی توابع مربوط به سنسور دوربین، نوبت به بررسی متغیرهای کلیدی جهت تعیین کیفیت و فرمت عکس می رسد. این متغیر ها در جدول زیر لیست می گردند. البته پیش از جدول زیر، یک شی باید از کلاس تعریف کنیم.
camera_config_t config
مقدارهای معتبر | شرح | متغیر |
مقدار معتبر برای این متغیر برابر با عدد زیر است.
۲۰۰۰۰۰۰۰ |
تنظیم فرکانس کلاک دوربین | 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 آشنا شدیم. در این قسمت به کمک یک نمونه برنامه، عکس را گرفته و در حافظه ذخیره می کنیم. پیش از ادامه، نیاز است تا توابع مربوط به عکاسی را مورد بررسی قرار دهیم. جهت فرمان به دوربین برای عکاسی و ذخیره عکس، نیاز است تا مطابق قطعه کد زیر، عکس را در اشاره گر ذخیره کنیم.
camera_fb_t * fb = esp_camera_fb_get()
اشاره گر فوق، اشاره گری به کلاس کتابخانه است. این اشاره گر دو متغیر داشته که به شیوه زیر قابل دسترسی و توضیح است.
- 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 |
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
لوازم مورد نیاز
جمع بندی
در سلسله آموزش های ماژول ESP32، قسمت یازدهم به بررسی قابلیت دوربین این ماژول پرداختیم. همانطور که در این آموزش هم به آن اشاره شد، بر روی برد ESP32-CAM یک دوربین جهت ثبت فیلم و عکس برداری تعبیه شده است. دوربین به کار رفته در برد ESP32CAM قابلیت های بسیاری جهت ثبت عکس و ضبط فیلم دارد. در این آموزش به توابع و متغیرهای کلیدی جهت اعمال تنظیمات دوربین پرداختیم. سپس توابع و دستورات مربوط به عکس برداری و ذخیره در حافظه را مورد بررسی قرار دادیم. همچنین به قابلیت کارت SD ماژول و نحوه ذخیره سازی عکس در کارت حافظه پرداخته شد. در نهایت با ارائه یک مثال، نحوه عکاسی، ذخیره عکس در حافظه و آزاد سازی آن از حافظه بررسی گردید.
در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
ادامه مطالب این آموزش
راه اندازی و کار با برد ESP32 قسمت دوازدهم: راه اندازی بلوتوث Bluetooth
ساعت مهندس
یه نمایشگر هم به این برد اضافه کنید و باهاش عکس بگیریم و داخل SD card ذخیره کنیم
در واقع آموزش ساخت دوربین عکاسی بزارید
سلام
این آموزش پیشتر منتشر شده:
لینک آموزش عکاسی با ESP32CAM کلیک کنید
البته برای قسمت نمایشگر باید این آموزش را با آموزش دوربین دنده عقب خودرو ترکیب کنیم
خسته نباشید من برد esp32 cam رو خریدم برنامه روش اپلود میشه آی پی هم میده وقتی آی پی رو توی مرورگر گوشی میزنم اون صفحه تنظیمات باز میشه ولی تصویر رو نشون نمیده امکان داره مشکل سخت افزاری داشته باشه چون من برنامه های دیگه هم که مربوط به عکس گرفتن هست رو تست کردم ارور دوربین میده
سلامت باشید
آیا دکمه دوربین را در صفحه تنظیمات فعال کرده اید؟
اگه منظورتون start streem هست بله
بسیار خب
بله فعال کردم ولی تصویر نمایش داده نمیشه چطور میشه مطمئن شد که دوربین عیب سخت افزاری نداره
به نظر نمیرسد دوربین ایرادی داشته باشد. چراکه اگر دوربین دچار ایرا باشه برنامه اجرا نمی شود. اما برای اطمینان بیشتر، منوی DEBUG را فعال کرده و پیغام های چاپ شده در سریال مانیتور را در کامنت بعد قرار دهید.
[ ۹۲۹۵۷][E][app_httpd.cpp:554] stream_handler(): [] Camera capture failed
[ ۹۲۹۵۷][E][app_httpd.cpp:708] stream_handler(): [] send frame failed failed
لطفا LEVEL DEBUG را روی HTTP قرار دهید و پیام ها را در کامت بعد نیز قرار دهید.
مهندس توی debug level گزینه http نداره
بسیار خب
لطفا گزینه INFO را انتخاب کنید.
وقتی ماژول رو ریست میکنم این اطلاعات میاد
….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 انتخاب شده باشد.
سلام مهندس
چطوری می تونم کد هایی که ریختم روی برد پاک کنم ؟
با سلام
یه کد سمپل از کتابخانه روی برد آپلود کنید.
سلام مهندس بی زحمت روش پاک کردن کد های ریخته شده روی برد esp32-cam رو بفرمایید
با سلام
کافیست یک کد سمپل از کتابخانه آپلود کنید.
سلام خسته نباشید
شما برنامه ای دارید که بشه ESP32 برای ما یک رم رو بخونه و پردازش کنه؟
با سلام
در این سایت برنامه نمیفروشیم. فقط میتوانید روش برنامه نویسی را با توجه به آموزشها و پروژهها یاد بگیرید.
سلام استاد بنده برنامه arduino دانلود کردم ولی برای بارگیری گزینه های esp32 حین بارگیری error میده
بالای ده بار پاک کردم بازم خطا میده نتم خوبه
ممکنه بگید مشکلش چیه لطفاً
با سلام
از dnsهای سرویس شکن استفاده کنید و نتیجه را اعلام بفرمایید.