وحدة CAM ESP-32 مع كاميرا من
Diymoreخادم بث الفيديو ESP32-CAM
مثال للاستخدام
هنا .
يجب عليك أولاً تثبيت المكتبات:
Esp32 board في Arduino Ide Windows /
Esp32 board في Arduino Ide Linux و Macالإعدادات التفصيلية في المقالة.
في حالتي ، استخدمت وحدة AI-THINKER غير المنضبطة
#define CAMERA_MODEL_AI_THINKER
وظيفة التعرف على الوجه لا تعمل بالنسبة لي. كان التعليق في المقال مفيدًا.
يبدو أن التعرف على الوجوه لم يعد يعمل (على الأقل مع البرنامج المثال) عند استخدام الأساسية 1.02 ESP. التراجع إلى 1.01 الأساسية واستخدام البرنامج المثال ينتمي إلى هذا الأساسية ، "إصلاح"
بعد التراجع إلى الإصدار السابق من المكتبة 1.01 كل شيء يعمل.
لدي زوج من شاشات I2C 128x64 و TFT SPI 128x128
المادة
OV7670 مع FIFO كيفية توصيل الكاميرا إلى الشاشة إذا لم يكن لديك وحدة CAM. دعم كاميرات OV2640 و OV7670
في وقت كتابة هذا التقرير ، عملت ما يلي بالنسبة لي
كاميرا ESP32 + خادم Wifi + شاشة I2C (AdaFruit)
كاميرا ESP32 + شاشة SPI 1.44 بوصة TFT 128 × 128 v1.1 (AdaFruit)
كاميرا ESP32 + شاشة SPI 1.8 بوصة TFT 128 * 160 (مكتبة Espressif)
يتعارض برنامج WiFi مع ناقل SPI. الحل الممكن لاستخدام مكتبة مختلفة. نشأت المشكلة في وقت تهيئة وحدة WiFi.
المشكلة الرئيسية هي أن وحدة ESP32-CAM لديها عدد محدود من الأرجل الحرة. يتم استخدام جزء من المنافذ للكاميرا ، جزء بالتوازي مع بطاقة الذاكرة الرقمية المؤمنة. موصل بطاقة sd مثبت على اللوحة. استنتاج آخر (IO4) هو مصباح يدوي LED.
شاشة I2C B / W ليست ذات أهمية خاصة للاستخدام الحقيقي مع الصورة الواردة من الكاميرا. لون TFT وعالية الدقة. على ذلك يمكنك أن ترى بالفعل الوجه. على مثل هذا العرض أو دقة أعلى بقليل ، يمكنك عمل Door Door
سأقول على الفور أن مكتبة AdaFruit ليست الأسرع. تمكنت من عرض بضع إطارات في الثانية. من الأفضل استخدام المكتبات التي تعمل بمستوى منخفض. لكنني لم أتمكن من الحصول على ESP32_TFT_library مع شاشتي 1.44 "128 × 128 SPI V1.1. ربما ILI9163 غير مدعوم. أخذت 1.8" 128 * 160 SPI TFT وتمكنت من الضغط على حوالي 12 FPS!
الارتباط .
هناك عدة مكتبات تعمل بشكل أسرع. لكن البعض لا يتم نقله إلى esp-32 (
link ):
4.98 ثانية Adafruit_ST7735
1.71 ثانية ST7735X_kbv
1.30 ثانية PDQ_ST7735
الفيديو يبدو رائعا:
عند استخدام
منفذين ، يمكن أن يتلقى أحد منافذ أجهزة HSPI أو VSPI على متحكم الشاشة وعرضه مع برنامج التشغيل ILI9341 30 إطارًا في الثانية (
ارتباط ).
ولكن كما قلت سابقًا في وحدة ESP32-CAM ، فإن SPI واحد فقط مجاني. يتم عرضه على أرقام PIN التالية:
IO2 - DC (A0)
IO14 - CLK
IO15 - CS
IO13 - MOSI (SDA)
IO12 - MISO (الإدخال. غير مستخدم)
IO0 - BCKL (الخلفية. غير مستخدم)
IO16 - RST


كانت المكتبة الأولى التي جربتها هي AdaFruit SSD1306
I2C 128x64 الأزرق شاشة OLED
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display; void init_display(){ pinMode(14,INPUT_PULLUP); pinMode(15,INPUT_PULLUP); Wire.begin(14,15); display = Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } ....
عند العمل في esp32 ، يتم استخدام مضاهاة البرامج I2C. تشارك IO14 و IO15. يمكن استخدام أي منافذ مجانية تقريبًا ، ولا يتم استخدام ناقل H / W.
كيفية توصيل
شاشة أحادية اللون مقاس 0.96 "i2c OLED . يلزمك الانتباه إلى عنوان العرض الموجود على ناقل I2C. في هذه الحالة ، 0x3C
عرض SPI 1.8 "TFT 128 * 160 مكتبة Espressif
مخطط الأسلاك:
IO2 - A0
IO14 - SCK
IO15 - CS
IO13 - SDA
IO16 - إعادة تعيين

يوجد أيضًا قارئ بطاقة SD على السبورة
التكوين IO:
قم بتثبيت البيئة وبيئة التطوير من
Espressif . تعليمات مفصلة حول
كيفية القيام بذلك .
تثبيت
المكتبة . يلزم إجراء تصويبين لتجميع المكتبة.
ماكيفيلي:
+ CFLAGS += -Wno-error=tautological-compare \ + -Wno-implicit-fallthrough \ + -Wno-implicit-function-declaration
مكونات / tft / tftspi.c:
+ #include "driver/gpio.h
→
التصحيحثم تثبيت
برنامج تشغيل الكاميرا ESP32 .
تكوين:
#. $ HOME / esp / esp-idf / export.sh
# idf.py menuconfig
السماح بالوصول إلى منفذ USB للبرامج الثابتة والمراقبة:
#sudo chmod 777 / dev / ttyUSB0
نحن نجمع ونملأ:
#make -j4 && جعل فلاش
يتم تحقيق 12FPS من خلال كتابة الحزمة باستخدام أسلوب send_data. التسجيل ليس بكسل بالبكسل ، ولكن سطر كامل يساوي عرض الشاشة:
esp_err_t camera_capture(){ uint32_t tstart, t1, t2; tstart = clock();
→
جيستFRAME_WIDTH هو عرض الإطار البالغ 320 بكسل لـ QVGA config.frame_size = FRAMESIZE_QVGA;
في الواقع ، نرى على نافذة العرض 128 * 160 من الإطار الكامل
قم بتسجيل التكوين باستخدام مخزن مؤقت لكاميرا فيديو واحدة (config.fb_count = 1)
التقط وقت الكاميرا: 32 مللي ثانية
إرسال وقت العازلة: 47 مللي ثانية
القبض على الإطار موافق.يؤدي
1000 / (32 + 47) = 12.65 إطارًا في الثانيةسجل للتكوين مع اثنين من المخازن المؤقتة كاميرا الفيديو (config.fb_count = 2)التقط وقت الكاميرا: 39 مللي ثانية
إرسال وقت العازلة: 63 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 59 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 34 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 40 مللي ثانية
إرسال وقت العازلة: 64 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 59 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 34 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 40 مللي ثانية
إرسال وقت العازلة: 63 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 60 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 34 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 39 مللي ثانية
إرسال وقت العازلة: 63 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 60 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 1 مللي ثانية
إرسال وقت العازلة: 34 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 40 مللي ثانية
إرسال وقت العازلة: 63 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 60 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 34 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 40 مللي ثانية
إرسال وقت العازلة: 63 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 59 مللي ثانية
القبض على الإطار موافق.
التقط وقت الكاميرا: 0 مللي ثانية
إرسال وقت العازلة: 35 مللي ثانية
القبض على الإطار موافق.
نظرًا لاستخدام المخزن المؤقت الثاني لكاميرا الفيديو ، يتم الحصول على المخزن المؤقت في بعض الدورات على الفور. في البداية ، يتم الحصول على الدورة الكاملة بأقل من استخدام مخزن مؤقت واحد ، ولكن هذه المرة "تعمل". الفاصل الزمني بين الدورات العائمة.
عدة مرات مسكت في سجلات "تم تشغيل كاشف Brownout" لذا أغلقت جهاز الكشف. لأنه في البداية أطعمت شاشة الإضاءة الخلفية من دبوس 3.3V ESP32-CAM
#include "soc/rtc_cntl_reg.h" ... WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
استنتاج
ESP32 وحدة وظيفية منخفضة التكلفة. هناك نقص كارثي في الاستنتاجات للمنافذ المنفذة في إصدار CAM من اللوحة ، لذا اختر إصدار CAM إذا كنت بحاجة إلى كاميرا بالفعل.