آموزش ESP32 44/55 - سرور وب دوربین ESP32 پخش ویدئو از طریق Wifi CAM-2 | کیت ESP32 شرکت SunFounder
در این آموزش، ما یک ایستگاه آب و هوای واقعیزمانی با استفاده از ESP32 و افزونه دوربین آن ایجاد خواهیم کرد. این پروژه به ESP32 اجازه میدهد که دادههای آب و هوا مانند دما و رطوبت را بر روی یک صفحه نمایش LCD نمایش دهد، در حالی که همچنین ویدئو را از طریق Wi-Fi استریم کند. در پایان این آموزش، شما یک ایستگاه آب و هوای کاملاً کاربردی خواهید داشت که هر 10 ثانیه بهروزرسانی میشود و اطلاعات ارزشمندی از آب و هوا را در دسترس شما قرار میدهد. برای وضوح بیشتر، به ویدئو مراجعه کنید (در ویدئو در 00:00).
سختافزار توضیح داده شده
اجزاء اصلی این پروژه شامل میکروکنترلر ESP32، یک نمایشگر LCD و یک ماجیول دوربین است. ESP32 یک میکروکنترلر قدرتمند است که دارای قابلیتهای Wi-Fi و بلوتوث داخلی است که به آن اجازه میدهد به اینترنت متصل شود و با سایر دستگاهها ارتباط برقرار کند. ماجیول دوربین امکان پخش ویدئو را فراهم میکند، در حالی که نمایشگر LCD اطلاعات آب و هوا را به کاربر ارائه میدهد.
LCD استفاده شده در این پروژه یک نمایشگر 20x4 کاراکتری است که میتواند مقدار قابل توجهی از اطلاعات را به یکباره نمایش دهد. این نمایشگر به ESP32 متصل است تا دما، رطوبت و سایر دادههای آب و هوایی را که از یک API آنلاین دریافت میشود، نمایش دهد. ESP32 همچنین شامل یک سیستم مدیریت باتری است که به آن اجازه میدهد به صورت بیسیم کار کند.
جزئیات برگه مشخصات
| تولیدکننده | اسپرسف |
|---|---|
| شماره قطعه | ESP32-WROOM-32 |
| ولتاژ منطق/ورودی و خروجی | ۳.۳ ولت |
| ولتاژ تغذیه | ۳.۰ - ۳.۶ ولت |
| جریان خروجی (به ازای GPIO) | ۱۲ میلی آمپر |
| جریان اوج (برای هر GPIO) | ۴۰ میلی آمپر |
| راهنمایی فرکانس PWM | 1 کیلوهرتز |
| آستانههای منطقی ورودی | 0.3 * VDD تا 0.7 * VDD |
| افت ولتاژ / RDS(روشن)/ اشباع | ۰.۱ ولت (معمولی) |
| محدودیتهای حرارتی | ۱۲۵ °C |
| بسته | پیوند QFN48 |
| یادداشتها / واریانتها | شامل گزینههای PSRAM |
محتوایی برای ترجمه وجود ندارد.
- اطمینان حاصل کنید که منبع تغذیه مناسب باشد (3.0 - 3.6 ولت).
- از هیت سینکها برای کاربردهای جریان بالا استفاده کنید.
- در مورد محدودیتهای جریان GPIO احتیاط کنید (12 میلی آمپر برای هر پایه).
- LCD و دوربین را به درستی وصل کنید تا از عدم ارتباط جلوگیری شود.
- بررسی اطلاعات کاربری Wi-Fi و کلیدهای API برای مشکلات اتصال.
دستورالعملهای سیمکشی
برای اتصال ESP32 به ماجیول LCD و دوربین، ابتدا پایههای برق و زمین را وصل کنید. پایه زمین ESP32 را به زمین LCD و دوربین متصل کنید. سپس پایه ۵ ولت ESP32 را به VCC LCD وصل کنید. برای دوربین، سیم قهوهای را به زمین، سیم قرمز را به ۵ ولت، سیم زرد را به GPIO ۲۱ و سیم نارنجی را به GPIO ۲۲ متصل کنید. اطمینان حاصل کنید که اتصالات محکم هستند تا در حین کار مشکلی ایجاد نشود.
سپس، LCD را به پایههای GPIO مناسب متصل کنید. پایههای خاص ممکن است با توجه به تنظیمات شما متفاوت باشد، اما معمولاً باید پایههای کنترل را به GPIOهای تعیینشده روی ESP32 متصل کنید. حتماً به دیتاشیت یا диаграм پایه برای مدل خاص LCD خود مراجعه کنید تا از صحیح بودن سیمکشی اطمینان حاصل کنید. پس از اتمام این اتصالات، تمامی سیمکشیها را برای هرگونه اتصالات شل یا نادرست دوباره بررسی کنید.
نمونههای شِفر (کود) و راهنمایی
در شِفر (کود)، ابتدا کتابخانههای لازم برای مدیریت دوربین و قابلیتهای Wi-Fi را شامل میشویم. شناسههای ضروری اعلام میشوند، از جملهssidوpasswordبرای مدارک Wi-Fi. پیکربندی دوربین با استفاده از camera_config_tساختار، جایی که ما پارامترهای مختلفی مانند فرمت پیکسل و اندازه فریم را تعریف میکنیم.
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
Serial.begin(115200);
camera_config_t config;
// ... (configuration settings)
esp_err_t err = esp_camera_init(&config);
// Check for errors
}این قطعه شِفر (کود) دوربین را راهاندازی کرده و هرگونه خطا در طول راهاندازی را بررسی میکند. اگر دوربین نتواند راهاندازی شود، یک پیام خطا به نمایشگر مسلسل چاپ میشود.
سپس، ما اتصال Wi-Fi را مدیریت کرده و سرور دوربین را راهاندازی میکنیم. حلقه اتصال ادامه مییابد تا زمانی که یک اتصال Wi-Fi موفق برقرار شود که برای دریافت دادههای آب و هوا از API بسیار حائز اهمیت است.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
startCameraServer();در این بخش، ما اتصال Wi-Fi را آغاز کرده و نقاط را به نمایشگر مسلسل چاپ میکنیم تا زمانی که اتصال برقرار شود. پس از اتصال، سرور دوربین راهاندازی میشود که امکان پخش ویدئو را فراهم میکند.
شِفر (کود) کامل در زیر مقاله بارگذاری خواهد شد، جایی که میتوانید ببینید چگونه همه اجزاء به هم پیوستهاند.
نمایش / چه انتظاری باید داشت
زمانی که همه چیز به درستی متصل شده و شِفر (کود) بارگذاری شد، میتوانید انتظار داشته باشید که ESP32 به شبکه Wi-Fi متصل شود و هر 10 ثانیه دادههای آب و هوا را دریافت کند. دما و رطوبت بر روی صفحه نمایش LCD نشان داده خواهد شد. علاوه بر این، دوربین ویدیو را از طریق Wi-Fi پخش خواهد کرد که میتوان از طریق آدرس IP محلی که در نمایشگر مسلسل چاپ شده است به آن دسترسی پیدا کرد. اگر اتصال Wi-Fi شکست بخورد، ESP32 شما را از طریق خروجی سریال مطلع خواهد کرد (در ویدیو در :00).
زمانبندی ویدیوها
- ۰۰:۰۰ شروع
- مقدمهای بر ESP32-Cam
- 4:30 توضیح شِفر (کود) آردوینو
- انتخاب برد ESP32 و پورت COM در Arduino IDE در ساعت ۷:۳۵
- ۹:۱۷ نمایش
- ۱۲:۰۶ نمایشگاه بر روی تلفن همراه
#include "esp_camera.h"
#include <WiFi.h>
// هشدار!!! IC PSRAM برای وضوح UXGA و کیفیت بالای JPEG نیاز است
// اطمینان حاصل کنید که ماجیول ESP32 Wrover یا دیگر بوردهایی که دارای PSRAM هستند انتخاب شده است.
// تصاویر ناقص ارسال خواهند شد اگر تصویر از اندازه بافر فراتر رود
// شما باید طرح پارتیشن را از منوی برد انتخاب کنید که حداقل 3MB فضای اپلیکیشن داشته باشد.
// تشخیص چهره برای ESP32 و ESP32-S2 غیرفعال است، زیرا از ۱۵ استفاده میکند.
// ثانیه برای پردازش یک فریم. تشخیص چهره فعال است اگر PSRAM نیز فعال باشد.
// ===================
// مدل دوربین را انتخاب کنید
// ===================
// #define CAMERA_MODEL_WROVER_KIT // دارای PSRAM
// #define CAMERA_MODEL_ESP_EYE // دارای PSRAM
// #define CAMERA_MODEL_ESP32S3_EYE // دارای PSRAM
// #define CAMERA_MODEL_M5STACK_PSRAM // دارای PSRAM
// #define CAMERA_MODEL_M5STACK_V2_PSRAM // نسخه B دوربین M5 دارای PSRAM
// #define CAMERA_MODEL_M5STACK_WIDE // دارای PSRAM
// #define CAMERA_MODEL_M5STACK_ESP32CAM // بدون PSRAM
// #define CAMERA_MODEL_M5STACK_UNITCAM // بدون PSRAM
#define CAMERA_MODEL_AI_THINKER // دارای PSRAM میباشد
// #define CAMERA_MODEL_TTGO_T_JOURNAL // بدون PSRAM
// #define CAMERA_MODEL_XIAO_ESP32S3 // دارای PSRAM
// ** بردهای داخلی Espressif **
// #undef CAMERA_MODEL_ESP32_CAM_BOARD
// #define CAMERA_MODEL_ESP32S2_CAM_BOARD
// #define دوربین_مدل_ESP32S3_CAM_LCD
#include "camera_pins.h"
// متغیرهای بعدی را با ترکیب SSID/رمز عبور خود جایگزین کنید
const char* ssid = "SSID";
const char* password = "PASSWORD";
void startCameraServer();
void setupLedFlash(int pin);
void setup() {
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_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.frame_size = FRAMESIZE_UXGA;
config.pixel_format = PIXFORMAT_JPEG; // برای پخش آنلاین
// config.pixel_format = PIXFORMAT_RGB565; // برای تشخیص/شناسایی چهره
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
config.fb_location = CAMERA_FB_IN_PSRAM;
config.jpeg_quality = 12;
config.fb_count = 1;
// اگر IC PSRAM وجود دارد، با وضوح UXGA و کیفیت JPEG بالاتر راهاندازی کنید.
// برای بافر فریم از پیش تخصیص داده شده بزرگتر.
if(config.pixel_format == PIXFORMAT_JPEG){
if(psramFound()){
config.jpeg_quality = 10;
config.fb_count = 2;
config.grab_mode = CAMERA_GRAB_LATEST;
} else {
// اندازه قاب را زمانی که PSRAM در دسترس نیست محدود کنید
config.frame_size = FRAMESIZE_SVGA;
config.fb_location = CAMERA_FB_IN_DRAM;
}
} else {
// بهترین گزینه برای شناسایی/تشخیص چهره
config.frame_size = FRAMESIZE_240X240;
#if CONFIG_IDF_TARGET_ESP32S3
config.fb_count = 2;
#endif
}
#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif
// تنظیم دوربین
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
sensor_t * s = esp_camera_sensor_get();
// حسگرهای اولیه به صورت عمودی برعکس شده و رنگها کمی اشباع شدهاند.
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // آن را برگردانید
s->set_brightness(s, 1); // قدری روشنایی را افزایش بدهید
s->set_saturation(s, -2); // کاهش اشباع
}
// اندازه قاب را برای افزایش نرخ فریم اولیه کاهش دهید
if(config.pixel_format == PIXFORMAT_JPEG){
s->set_framesize(s, FRAMESIZE_QVGA);
}
#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
#if defined(CAMERA_MODEL_ESP32S3_EYE)
s->set_vflip(s, 1);
#endif
// LED فلش را در صورتی که پایه LED در camera_pins.h تعریف شده باشد تنظیم کنید.
#if defined(LED_GPIO_NUM)
setupLedFlash(LED_GPIO_NUM);
#endif
WiFi.begin(ssid, password);
WiFi.setSleep(false);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http: // ");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
}
void loop() {
// هیچ کاری انجام ندهید. همه چیز در یک کار دیگر توسط وب سرور انجام میشود.
delay(10000);
}
Common Course Links
Common Course Files
منابع و مراجع
-
مستنداتآموزش ESP32 ۴۴/۵۵- صفحه مستندات SunFounder برای سرور وب دوربینdocs.sunfounder.com
فایلها📁
هیچ فایلی موجود نیست.