ईएसपी -32 सीएएम मॉड्यूल
डायमोर से कैमरे के साथ
ESP32-CAM वीडियो स्ट्रीमिंग सर्वर
उपयोग का एक उदाहरण
यहाँ है ।
आपको पहले पुस्तकालयों को स्थापित करना होगा:
Arduino में Esp32 बोर्ड Idu विंडोज /
Esp32 बोर्ड में Arduino Ix लिनक्स और मैकविस्तृत सेटिंग्स लेख में हैं।
मेरे मामले में, मैंने AI-THINKER मॉड्यूल का उपयोग किया ताकि वह अधूरा हो जाए
#define CAMERA_MODEL_AI_THINKER
चेहरे की पहचान की कार्यक्षमता मेरे काम नहीं आई। लेख में टिप्पणी सहायक थी।
ऐसा लगता है कि 1.02 ईएसपी कोर का उपयोग करते समय चेहरे की पहचान अब काम नहीं कर रही है (उदाहरण कार्यक्रम के साथ कम से कम)। 1.01 कोर पर वापस लौटना और उस कोर से संबंधित उदाहरण कार्यक्रम का उपयोग करना, इसे 'ठीक' करेगा
लायब्रेरी के पिछले संस्करण में वापस लुढ़का 1.01 सब कुछ काम किया।
मेरे पास I2C 128x64 और TFT SPI 128x128 डिस्प्ले हैं
यदि आप एक CAM मॉड्यूल नहीं है तो
FIFO के साथ आर्टिकल
OV7670 को कैमरे को डिस्प्ले से कैसे जोड़ा जाए। OV2640 और OV7670 कैमरों का समर्थन करें
लेखन के समय, निम्नलिखित ने मेरे लिए काम किया
ESP32 कैमरा + वाईफ़ाई सर्वर + I2C प्रदर्शन (प्रवेश)
ESP32 कैमरा + एसपीआई डिस्प्ले 1.44 "TFT 128x128 v1.1 (AdaFruit)
ESP32 कैमरा + SPI डिस्प्ले 1.8 "TFT 128 * 160 (एस्प्रेसिफ लाइब्रेरी)
WiFi ड्राइवर का SPI बस से टकराव होता है। एक अलग पुस्तकालय का उपयोग करने के लिए संभव समाधान। वाईफाई मॉड्यूल के प्रारंभ के समय समस्या उत्पन्न हुई।
मुख्य समस्या यह है कि ईएसपी 32-सीएएम मॉड्यूल में सीमित संख्या में मुक्त पैर हैं। पोर्ट का हिस्सा कैमरा के लिए उपयोग किया जाता है, एसडी-कार्ड के साथ समानांतर में। बोर्ड पर sd-card कनेक्टर स्थापित है। एक अन्य निष्कर्ष (IO4) एलईडी टॉर्च है।
I2C डिस्प्ले B / W कैमरे से प्राप्त छवि के साथ वास्तविक उपयोग के लिए विशेष रुचि नहीं है। TFT रंग और उच्च संकल्प। उस पर आप पहले से ही चेहरा देख सकते हैं। इस तरह के डिस्प्ले या थोड़े उच्च रिज़ॉल्यूशन पर आप डोर आई बना सकते हैं
मैं तुरंत कहूंगा कि AdaFruit पुस्तकालय सबसे तेज नहीं है। मैं प्रति सेकंड कुछ फ्रेम प्रदर्शित करने में कामयाब रहा। यह पुस्तकालयों का उपयोग करने के लिए अधिक आशाजनक है जो निम्न स्तर पर काम करते हैं। लेकिन मैं अपने प्रदर्शन 1.44 "128x128 SPI V1.1 के साथ ESP32_TFT_library प्राप्त करने में सक्षम नहीं था। शायद ILI9163 समर्थित नहीं है। मैंने 1.8" 128 * 160 SPI TFT लिया और मैं लगभग 12 FPS निचोड़ने में कामयाब रहा!
लिंक ।
वहाँ पुस्तकालयों की एक जोड़ी है कि तेजी से काम कर रहे हैं। लेकिन कुछ को esp-32 (
लिंक ) के लिए पोर्ट नहीं किया गया है:
4.98 सेकंड Adafruit_ST7735
1.71 सेकंड ST7735X_kbv
1.30 सेकंड PDQ_ST7735
वीडियो प्रभावशाली है:
दो बंदरगाहों का उपयोग करते समय
, माइक्रोकंट्रोलर पर एचएसपीआई या वीएसपीआई हार्डवेयर बंदरगाहों में से एक और ILI9341 चालक के साथ प्रदर्शन प्रति सेकंड 30 फ्रेम प्राप्त कर सकते हैं (
लिंक )।
लेकिन जैसा कि मैंने पहले ईएसपी 32-सीएएम मॉड्यूल में कहा था, केवल एक एसपीआई मुफ्त है। इसे निम्नलिखित पिनों पर प्रदर्शित किया जाता है:
IO2 - डीसी (A0)
IO14 - सीएलके
IO15 - सीएस
IO13 - MOSI (SDA)
IO12 - MISO (इनपुट। प्रयुक्त नहीं)
IO0 - बीसीकेएल (बैकलाइट नहीं)
IO16 - आरएसटी


मैंने जिस पहली लाइब्रेरी की कोशिश की, वह AdaFruit SSD1306 थी
I2C 128x64 ब्लू ओएलईडी डिस्प्ले
#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। लगभग किसी भी मुक्त बंदरगाह का उपयोग किया जा सकता है, न कि एच / डब्ल्यू बस का उपयोग किया जाता है।
मोनोक्रोम 0.96 "i2c OLED डिस्प्ले को कैसे कनेक्ट करें। आपको I2C बस पर डिस्प्ले एड्रेस पर ध्यान देने की आवश्यकता है। इस मामले में, 0x3C।
एसपीआई डिस्प्ले 1.8 "टीएफटी 128 * 160 एस्प्रेसिफ लाइब्रेरी
तारों आरेख:
IO2 - ए 0
IO14 - एससीके
IO15 - सीएस
IO13 - एसडीए
IO16 - RESET

बोर्ड पर एक एसडी-कार्ड रीडर भी है
IO कॉन्फ़िगरेशन:
एस्प्रेसिफ से पर्यावरण और विकास पर्यावरण स्थापित करें। ऐसा करने के बारे में विस्तृत निर्देश।
पुस्तकालय स्थापित करें। पुस्तकालय को इकट्ठा करने के लिए दो सुधार किए जाने की आवश्यकता है।
makefile:
+ 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
फर्मवेयर और निगरानी के लिए यूएसबी पोर्ट के लिए उपयोग की अनुमति दें:
# सोडो चामोद 777 / देव / टिट्सबी 0
हम इकट्ठा करते हैं और भरते हैं:
#make -j4 && फ्लैश बनाते हैं
12_PS Send_data पद्धति का उपयोग करके पैकेट लेखन के माध्यम से प्राप्त किया जाता है। रिकॉर्डिंग पिक्सेल से पिक्सेल नहीं है, लेकिन स्क्रीन की चौड़ाई के बराबर एक पूरी लाइन है:
esp_err_t camera_capture(){ uint32_t tstart, t1, t2; tstart = clock();
→
जिस्टFRAME_WIDTH QVGA के लिए 320 पिक्सेल की फ़्रेम चौड़ाई है 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 एमएस
कब्जा फ्रेम ठीक है।
कैमकॉर्डर के दूसरे बफर के उपयोग के कारण, कुछ चक्रों में बफर तुरन्त प्राप्त होता है। सबसे पहले, पूरा चक्र एक बफर का उपयोग करने से कम में प्राप्त किया जाता है, लेकिन फिर इस समय "पर चलता है"। चक्रों के बीच अंतराल तैर रहा है।
कई बार मैंने लॉग में पकड़ा "ब्राउनआउट डिटेक्टर चालू हो गया था" इसलिए मैंने डिटेक्टर को बंद कर दिया। क्योंकि सबसे पहले मैंने 3.3V ESP32-CAM पिन से बैकलाइट डिस्प्ले खिलाया
#include "soc/rtc_cntl_reg.h" ... WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
निष्कर्ष
ESP32 कम लागत वाले कार्यात्मक मॉड्यूल। बोर्ड के सीएएम संस्करण में कार्यान्वित बंदरगाहों के लिए निष्कर्षों की एक भयावह कमी है, इसलिए यदि आपको वास्तव में कैमरे की आवश्यकता है तो सीएएम संस्करण चुनें।