دورة ESP32 44/55 - تدفق فيديو خادم الويب لكاميرا ESP32 عبر WiFi CAM-2 | مجموعة ESP32 من SunFounder
في هذا الدرس، سنقوم بإنشاء محطة طقس في الوقت الحقيقي باستخدام ESP32 وملحق الكاميرا الخاص به. سيمكن هذا المشروع الـ ESP32 من عرض بيانات الطقس مثل درجة الحرارة والرطوبة على شاشة LCD، مع بث الفيديو أيضًا عبر الواي فاي. بنهاية هذا الدرس، سيكون لديك محطة طقس كاملة الوظائف تتحدث كل 10 ثوان، مما يوفر معلومات قيمة عن الطقس في متناول يدك. لمزيد من الوضوح، راجع الفيديو (في الفيديو عند 00:00).
شرح الأجهزة
تشمل المكونات الرئيسية لهذا المشروع المتحكم الدقيق ESP32، وشاشة LCD، ووحدة الكاميرا. يعد ESP32 متحكمًا دقيقًا قويًا يتميز بقدرات Wi-Fi وBluetooth مدمجة، مما يتيح له الاتصال بالإنترنت والتواصل مع أجهزة أخرى. تمكّن وحدة الكاميرا من بث الفيديو، بينما تعرض شاشة LCD معلومات الطقس للمستخدم.
الشاشة المستخدمة في هذا المشروع هي شاشة LCD بحجم 20x4 حرف، والتي يمكن أن تعرض كمية كبيرة من المعلومات في وقت واحد. وهي متصلة بالـ ESP32 لعرض درجة الحرارة والرطوبة وغيرها من بيانات الطقس المستخرجة من واجهة برمجة التطبيقات على الإنترنت. يتضمن الـ ESP32 أيضًا نظام إدارة البطارية، مما يسمح له بالعمل لاسلكيًا.
تفاصيل ورقة البيانات
| المصنع | إسبريسيف |
|---|---|
| رقم الجزء | ESP32-WROOM-32 |
| جهد المنطق / الإدخال والإخراج | ٣.٣ فولت |
| جهد الإمداد | 3.0 - 3.6 ف |
| جهد الخرج (لكل GPIO) | 12 مللي أمبير |
| التيار الأقصى (لكل GPIO) | 40 مللي أمبير |
| إرشادات تردد PWM | 1 كيلو هرتز |
| عتبات منطق الإدخال | 0.3 * VDD إلى 0.7 * VDD |
| انخفاض الجهد / RDS(on)/ تشبع | 0.1 فولت (نموذجي) |
| الحدود الحرارية | ١٢٥ درجة مئوية |
| طرد | QFN48 |
| ملاحظات / متغيرات | يتضمن خيارات PSRAM |
- تأكد من توفير مصدر طاقة مناسب (3.0 - 3.6 فولت).
- استخدم مشعات الحرارة للتطبيقات ذات التيار العالي.
- كن حذرًا من حدود تيار GPIO (12 مللي أمبير لكل دبوس).
- قم بتوصيل شاشة LCD والكاميرا بشكل صحيح لتجنب سوء التواصل.
- تحقق من بيانات اعتماد شبكة Wi-Fi ومفاتيح واجهة برمجة التطبيقات لمشاكل الاتصال.
تعليمات الأسلاك
لتوصيل ESP32 مع شاشة LCD ووحدة الكاميرا، ابدأ بتوصيل دبابيس الطاقة والأرض. قم بتوصيل دبوس الأرض في ESP32 بالأرض الخاصة بشاشة LCD والكاميرا. ثم، قم بتوصيل دبوس 5V في ESP32 بـ VCC لشاشة LCD. بالنسبة للكاميرا، قم بتوصيل السلك البني بالأرض، والسلك الأحمر بـ 5V، والسلك الأصفر بـ GPIO 21، والسلك البرتقالي بـ GPIO 22. تأكد من أن التوصيلات آمنة لتجنب أي مشاكل أثناء التشغيل.
بعد ذلك، قم بتوصيل شاشة LCD بالأطراف المناسبة من GPIO. قد تختلف الأطراف المحددة بناءً على إعدادك، ولكن عادةً ما ستقوم بتوصيل أطراف التحكم بأطراف GPIO المحددة على ESP32. تأكد من الرجوع إلى ورقة البيانات أو مخطط الأطراف لنموذج شاشة LCD الخاصة بك لتأكيد التوصيل الصحيح. بعد إكمال هذه التوصيلات، تأكد من التحقق مرة أخرى من جميع التوصيلات بحثًا عن أي توصيلات غير محكمة أو غير صحيحة.
أمثلة شفرة وإرشادات
في الكود، نقوم أولاً بتضمين المكتبات الضرورية للتعامل مع كاميرا والوظائف المتعلقة بشبكة الواي فاي. يتم الإعلان عن المعرفات الأساسية، بما في ذلكssidوpasswordلبيانات اعتماد شبكة الواي فاي. يتم إعداد تكوين الكاميرا باستخدام الـ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
}هذا المقتطف يقوم بتهيئة الكاميرا ويتحقق من أي أخطاء أثناء الإعداد. إذا فشلت الكاميرا في التهيئة، يتم طباعة رسالة خطأ على الشاشة التسلسلية.
بعد ذلك، نتعامل مع اتصال الواي فاي ونبدأ خادم الكاميرا. تستمر حلقة الاتصال حتى يتم إنشاء اتصال واي فاي ناجح، وهو أمر حيوي لاسترداد بيانات الطقس من واجهة برمجة التطبيقات.
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 بإخطارك من خلال الإخراج التسلسلي (في الفيديو عند 10:00).
توقيتات الفيديو
- 00:00 ابدأ
- مقدمة في ESP32-Cam
- 4:30 شرح كود الأردوينو
- ٧:٣٥ اختيار لوحة ESP32 ومنفذ COM في Arduino IDE
- ٩:١٧ عرض
- :06 عرض على الهاتف المحمول
#include "esp_camera.h"
#include <WiFi.h>
// تحذير!!! مطلوب شريحة PSRAM لدقة UXGA وجودة JPEG عالية
// تأكد من تحديد وحدة ESP32 Wrover أو لوحة أخرى تحتوي على PSRAM.
// سيتم نقل الصور الجزئية إذا كانت الصورة تتجاوز حجم الذاكرة المؤقتة.
// يجب عليك اختيار مخطط تقسيم من قائمة اللوحة التي تحتوي على مساحة تطبيق لا تقل عن 3 ميغا بايت.
// تم تعطيل تعرف الوجه لـ ESP32 و ESP32-S2، لأنه يحتاج إلى 15
// ثوانٍ لمعالجة إطار واحد. يتم تفعيل اكتشاف الوجوه إذا تم تفعيل 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 // إصدار كاميرا M5 B يحتوي على 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
// ** لوحات إسبرسيف الداخلية **
// #define CAMERA_MODEL_ESP32_CAM_BOARD
// #define CAMERA_MODEL_ESP32S2_CAM_BOARD
// #define CAMERA_MODEL_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;
// إذا كان هناك شريحة 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 44/55 - صفحة مستندات SunFounder لخادم الويب الخاص بالكاميراdocs.sunfounder.com
ملفات📁
لا توجد ملفات متاحة.