ESP32-CAM fejlesztőkártya, Wifi, Bluetooth, OV3660 3MP
zoom_out_map
chevron_left chevron_right

A termékfotók tájékoztató jellegűek, és a gyártási tételtől és a beszállítótól függően kisebb eltéréseket mutathatnak. A termék specifikációi és árai előzetes értesítés nélkül változhatnak. Mindent megteszünk, hogy a lehető legpontosabb és leghitelesebb specifikációkat adjuk meg a termékoldalon, de lehetséges, hogy ezek nem teljesen helyesek. Ha ilyen esetet észlel, kérjük, jelentse nekünk.

A termék szakemberek számára készült, és használatához képzett, valamint felhatalmazott személyzet szükséges. A termék nem tartalmaz összeszerelési/használati útmutatót . A termék nem megfelelő képesítéssel rendelkező személyek általi üzembe helyezése a weboldalon található Általános Szerződési Feltételek értelmében a jótállás elvesztését eredményezi.

A megadott műszaki adatok (áram, teljesítmény stb.) ideális működési körülmények között érvényes maximális értékeket jelentenek. A biztonságos használat és az optimális élettartam érdekében javasolt a terméket folyamatos üzemben legfeljebb a megadott maximális értékek 50%-án használni.

ESP32-CAM fejlesztőpanel, WiFi, Bluetooth, OV5640 5 MP

Kompatibilis megoldás mesterséges látás, videóstreaming és IoT projektekhez, 802.11b/g/n WiFi és Bluetooth 4.2 LE kapcsolattal vezeték nélküli alkalmazásokhoz. Integrál egy kétmagos processzort akár 240 MHz-ig és 4 MB PSRAM-ot a képfeldolgozás gyorsításához, egy 5 MP-es OV5640 kamerát a részletes felvételekhez, TF-kártya támogatást és JPEG, BMP, szürkeárnyalatos formátumokat, valamint kompatibilis az Arduino IDE-vel a gyors fejlesztéshez.

6 221,17 Ft Adóval együtt

5 141,47 Ft Áfa nélkül

(5/5) kívül 4 összes értékelés
Olvasd el a véleményeket
1-2 zile

Tegye mellé a hozzá illő tartozékokat is

  • Részletek

A termékkel együtt, azonos mennyiségben kerül a kosárba.

check In Stoc

A termék megvásárlásával jár 311,06 Ft hűségpont.

Jótállás: 24 hónap magánszemélyeknek
NEMZETKÖZI SZÁLLÍTÁS
Nemzetközi gyors szállítás az EU-n belül. Ingyenes szállítás 100 EUR feletti megrendelések esetén a legtöbb EU-országban.
GYORS KISZÁLLÍTÁS 24 ÓRÁN BELÜL
24 órán belül szállítunk raktárunkból
HŰSÉGPONTOK
Minden rendelés után pontokat kap, a rendelés értékének 5%-ában.

Az ESP32-CAM fejlesztőpanel egyetlen modulon egyesíti az ESP32 processzort WiFi-vel és Bluetooth-szal, valamint egy 5 MP-es OV5640 kamerát, amely flexkábelen keresztül csatlakozik a panel FPC csatlakozójához. Ez egy komplett megoldás képek rögzítésére és továbbítására mesterséges látásos projektekben, videostreamingben és IoT-ben. A panel önállóan is működhet, képeket és videófolyamot küldve WiFi-n keresztül a hálózatba, vagy programozható úgy, hogy UART-on érkező parancsokra reagáljon; így alkalmas megfigyelésre, tárgyfelismerésre, távoli monitorozásra és automatizált fényképezésre.

A processzor egy 32 bites, kétmagos ESP32 LX6, 80 és 240 MHz közötti órajellel és akár 600 DMIPS számítási teljesítménnyel. Az 520 KB belső SRAM memóriát 4 MB külső PSRAM egészíti ki, amely szükséges a nagy felbontású képek tömörítés és továbbítás előtti feldolgozásához. Az OV5640 kamera maximális felbontása 2592 x 1944 pixel (5 MP), és egy 24 tűs FPC csatlakozóhoz kapcsolódik. A modul támogatja a WiFi 802.11 b/g/n-t, a Bluetooth 4.2 LE-t, a JPEG, BMP vagy szürkeárnyalatos képeket, valamint a Deep-sleep, Modem-sleep és Light-sleep alacsony fogyasztású módokat.

A fő jellemzők közé tartozik a kamera FPC csatlakozója, a legfeljebb 4 GB-os microSD kártyahely, a villanófényként használt fehér LED, a panelre nyomtatott PCB antenna, a két soros tüskesor (összesen 16 pin), amely a tápellátást, a szabad GPIO-kat és az UART interfészt teszi elérhetővé, valamint egy RESET gomb. A tápellátás 5 VDC-ről történik az 5V pinen, legalább 2 A stabil tápegységgel; a panel 3.3 VDC-ről is táplálható a 3V3 pinen keresztül.

Az UART interfészen keresztül (U0T és U0R pinek) a panel egy számítógéphez csatlakoztatott USB-soros adapterrel programozható és tesztelhető, majd a hálózatra kapcsolódva a képek és a videófolyam közvetlenül böngészőből elérhető bármely, ugyanazon helyi hálózaton lévő számítógépről vagy telefonról. A fennmaradó GPIO pinek lehetővé teszik érzékelők vagy további modulok csatlakoztatását, amelyek kompatibilisek Arduino, ESP32, STM32 vagy Raspberry Pi rendszerekkel, a panel 3.3 V-os logikai szintjét használva.

 

Specifikációk:

Placa%20dezvoltare%20ESP32-CAM,%20Wifi,%20Bluetooth,%20OV2640%202MP%20wiring.jpg

Tápfeszültség: 5 VDC (5V pin)

Áramfelvétel: 180 mA (Flash LED kikapcsolva) / 310 mA (Flash LED bekapcsolva, maximális fényerő)

Deep-sleep áramfelvétel: minimum 6 mA

Modem-sleep áramfelvétel: minimum 20 mA

Light-sleep áramfelvétel: minimum 6.7 mA

Pinek száma: 16

WiFi: 802.11 b/g/n

Bluetooth: 4.2 LE

CPU: Dual core LX6, 32 bit

CPU frekvencia: 80 - 240 MHz

Belső memória: 520 KB SRAM

Külső memória: 4 MB PSRAM

SPI Flash memória: 32 Mbit

Támogatott interfészek: UART, SPI, I2C, PWM, ADC, DAC

Beépített kamera: OV5640, 5 MP, maximális felbontás 2592 x 1944 pixel

Kamera csatlakozó: FPC, 24 pin

Képfájl formátumok: JPEG, BMP, grayscale

Memóriakártya: microSD (TF), legfeljebb 4 GB

Alacsony fogyasztású módok: Deep-sleep, Modem-sleep, Light-sleep

Beépített szoftver stack: LwIP, FreeRTOS

Hálózati működési módok: STA / AP / STA+AP

Smart Config / AirKiss: Igen

FOTA frissítés: Igen

Programozó mellékelve: Nem, külső adapter szükséges (ajánlott FT232 vagy egyenértékű)

Méretek: 42 x 27 x 12 mm

 

FIGYELEM!

Olvassa el figyelmesen vásárlás előtt
OV5640 kamera (aktuális széria)

Ez a modul OV5640 (5 MP) kamerával kerül szállításra az OV2640 helyett, az OV2640 minőségi kamerák beszerzési problémái miatt. Az érzékelő működés közben erősen felmelegszik, és tapintásra forró lehet. Ez a panel-kamera kombináció normális viselkedése, nem hiba.

A programozó a szériától függően CH340 vagy FT232 meghajtót használhat.

 

Kötelező használati feltételek:

Hűtőborda a kamera hátoldalán, hővezető szalaggal vagy paddal.

Jó szellőzés; ne használja a modult zárt, légáramlás nélküli házban.

Stabil 5V-os tápellátás, legalább 2A, az 5V pinen. Ne táplálja a modult az USB-soros adapter 3.3V kimenetéről.

 

Az OV5640 kamera melegedésének csökkentése az ESP32-CAM lapon

Az ESP32-CAM (AI Thinker) panelt az OV2640 kamerához tervezték, és a kamera csatlakozót 3.3V-tal (DOVDD), 2.8V-tal (AVDD) és 1.2V-tal (DVDD) látja el. Az OV5640 szenzor azonban 1.5V-ot igényel a mag számára (DVDD). Ahhoz, hogy ezekkel a feltételekkel is működjön, az OV5640 alapértelmezés szerint bekapcsolja a belső 1.5V-os szabályzóját, amelyet a 3.3V-os feszültség táplál. A feszültségkülönbség hővé alakul magán az érzékelőn belül, ezért a modul folyamatos működés közben erősen felmelegszik. Körülbelül 50°C felett zaj és lila árnyalat jelenhet meg a képen. A megoldás a 1.2V-os szabályzó 1.5V-osra cserélése, majd a belső szabályzó szoftveres letiltása.

 

Szükséges

Szabályzó: XC6206P152MR vagy ME6206A15XG (1.5V, SOT-23)

Eszközök: forrólevegős állomás, multiméter

OV5640 regiszter: 0x3031, 3. bit (érték: 0x08)

 

Használat

Válassza le a kamerát, és táplálja a panelt 5V-ról.

Multiméterrel mérje meg egy GND pinhez képest a kamera csatlakozó melletti SOT-23 szabályzók kimenetét, és azonosítsa azt, amelyik körülbelül 1.2V-ot ad. A 2.8V-os szabályzó és az AMS1117 (3.3V) nem módosítandó.

Jegyezze fel az azonosított szabályzó VIN (3.3V), VOUT (1.2V) és GND lábainak helyzetét.

Forrassza le az 1.2V-os szabályzót, és helyezze be a helyére az 1.5V-os szabályzót, miután az adatlap alapján ellenőrizte, hogy a VIN, VOUT és GND lábak megfelelnek a pad-eknek.

Táplálja a panelt kamera nélkül, és ellenőrizze, hogy az új szabályzó kimenete 1.45V és 1.55V közé esik.

Csatlakoztassa a kamerát, és a kódban, közvetlenül az esp_camera_init() után, tiltsa le a belső szabályzót (az alábbi példa szerint).

Ellenőrizze a Serial Monitorban, hogy a 0x3031 regiszter értéke 0x08.

Opcionálisan szereljen a kamera modul hátoldalára egy kis alumínium hűtőbordát, hővezető szalaggal rögzítve.

 

// OV5640: a belső 1.5V-os magszabályzó letiltása (0x3031 regiszter, 3. bit)

// CSAK akkor használd, ha a DVDD külső 1.5V-tal van ellátva

sensor_t *s = esp_camera_sensor_get();

if (s->id.PID == OV5640_PID) {

  s->set_reg(s, 0x3031, 0x08, 0x08);

  Serial.printf("OV5640 reg 0x3031 = 0x%02X\n", s->get_reg(s, 0x3031, 0xFF));

}

 

Módosítás után a kamera az összes tesztelt felbontáson megfelelően működik, egészen 2560x1920-ig, és a modul hőmérséklete csökken. Hűtőborda továbbra is szükséges, mivel a kamera működés közben így is körülbelül 50 °C-ra melegszik.

 

Forrasztás nélküli alternatíva

Szereljen hűtőbordát a kamerára, használjon a streamben legfeljebb SVGA vagy HD felbontást, és a szenzort állítsa készenlétbe a képkockák között (0x3008 = 0x42 készenlét, 0x02 aktív).

 

Figyelem! Ne tiltsa le a belső szabályzót egy módosítatlan lapon, ahol a DVDD 1.2V-on van. A szenzor magja a megadott minimális feszültség alatt működne, ami sérült képeket és lefagyásokat okozhat. Olyan lapon, ahol nincs DVDD szabályzó, a letiltás a mag teljes tápellátásának megszűnését eredményezi.

Módosítás után a panel már nem alkalmas OV2640 kamerához, amely 1.2V-ot igényel a mag számára. A panelt ennek megfelelően jelölje meg. A módosítás SMD alkatrészek forrasztásában szerzett tapasztalatot igényel.

 

Elrendezés:

Elem Funkció
ESP32-S modul PCB antennával A kétmagos ESP32 processzor és a panelre nyomtatott WiFi / Bluetooth antenna.
Fehér LED Villanófényként használatos, GPIO4 vezérli. Bekapcsol, amikor a GPIO4 HIGH, és kikapcsol, amikor a GPIO4 LOW.
Vörös státusz LED A panel hátoldalán található LED, GPIO33 vezérli. Bekapcsol, amikor a GPIO33 LOW, és szabadon használható programjelzőként.
Kamera FPC csatlakozó 24 tűs csatlakozó, amelyhez az OV5640 kamera flexkábele kapcsolódik.
OV5640 kamera 5 MP-es kameramodul, külön szerelve a paneltől, flexkábellel csatlakoztatva.
microSD (TF) kártyahely Helyi tárolás képekhez és fájlokhoz, legfeljebb 4 GB-os kártyákkal. Az IO2, IO4, IO12, IO13, IO14 és IO15 pineket használja.
Két soros tüske (dupla header) A tápellátást, a szabad GPIO-kat és az UART interfészt teszi elérhetővé, összesen 16 pinnel.
IO0 pin Az indítási módot választja. Ha reset közben GND-re van kötve (a mellette lévő GND pinre), a panel programbetöltő módba lép. Ha szabadon marad, a panel a Flash memóriában lévő programot futtatja.
RESET gomb Az ESP32 mikrovezérlőt újraindítja. IO0 GND-re kötése után megnyomva programbetöltő módba lép, a híd eltávolítása után megnyomva pedig a program futtatását indítja.
Feszültségszabályzó Az 5 V-os tápfeszültséget a panel áramköreihez szükséges 3.3 V-ra alakítja.
Rögzítőfuratok Két furat a tüske sorok között a panel rögzítéséhez.

 

Pinout:

Csatlakozó Pin Funkció
5V header 5V Panel tápellátása, 5 VDC
5V header GND Föld
5V header IO12 GPIO12, MicroSD DATA2-ként is használva
5V header IO13 GPIO13, MicroSD DATA3-ként is használva
5V header IO15 GPIO15, MicroSD CMD-ként is használva
5V header IO14 GPIO14, MicroSD CLK-ként is használva
5V header IO2 GPIO2, MicroSD DATA0-ként is használva
5V header IO4 GPIO4, MicroSD DATA1-ként és a flash LED vezérlésére használva
3V3 header 3V3 Panel tápellátása, 3.3 VDC
3V3 header IO16 GPIO16, szabad vonal, lehet UART2 RX
3V3 header IO0 GPIO0, az indítási módot választja, GND-re kötve a program betöltéséhez
3V3 header GND Föld
3V3 header VCC 3.3 V vagy 5 V kimenet, a panelt nem ezen a pin-en keresztül kell táplálni
3V3 header U0R (IO3) UART RX, soros adatfogadás
3V3 header U0T (IO1) UART TX, soros adatküldés
3V3 header GND Föld

 

Kamera jel (FPC) ESP32 GPIO Funkció
D0 GPIO5 Kamera adatvonal (Y2)
D1 GPIO18 Kamera adatvonal (Y3)
D2 GPIO19 Kamera adatvonal (Y4)
D3 GPIO21 Kamera adatvonal (Y5)
D4 GPIO36 Kamera adatvonal (Y6)
D5 GPIO39 Kamera adatvonal (Y7)
D6 GPIO34 Kamera adatvonal (Y8)
D7 GPIO35 Kamera adatvonal (Y9)
XCLK GPIO0 Bemeneti órajel a kamera szenzor számára
PCLK GPIO22 Pixel kimeneti órajel
VSYNC GPIO25 Függőleges képkockaszinkron
HREF GPIO23 Vízszintes sorkizárás szinkron
SIOD (SDA) GPIO26 I2C / SCCB, szenzor konfiguráció
SIOC (SCL) GPIO27 I2C / SCCB, szenzor konfiguráció
PWDN GPIO32 Szenzor kikapcsolása (power-down), HIGH a képkockák közötti kikapcsoláshoz

 

Használat:

Ha a kameramodul még nincs felszerelve, rögzítse azt a panel FPC csatlakozójára a kontaktusok tájolását betartva, és zárja le a csatlakozó reteszét.

Szereljen egy kis hűtőbordát, hővezető szalaggal vagy paddal, az OV5640 kamera hátoldalára az első használat előtt, mivel az érzékelő működés közben erősen felmelegszik, és tapintásra forró lehet; ez a panel-kamera kombináció normális viselkedése.

Biztosítson jó szellőzést a modul körül, és ne használja zárt, légáramlás nélküli házban.

Táplálja a panelt 5 VDC-ről, legalább 2 A-rel, az 5V pinen keresztül, stabil tápegységet használva, és ne táplálja a modult egy USB-soros adapter 3.3 V-os kimenetéről. Ne adjon feszültséget a VCC pinre, mivel az kimenet.

Programozáshoz csatlakoztasson egy FT232 vagy egyenértékű adaptert az U0R, U0T és GND pinekhez, az adapter 3.3 V-os jumperével, az adapter TXD-jét az U0R-hez, az RXD-jét az U0T-hez, az adapter földjét pedig a panel földjéhez kötve.

Az Arduino IDE-ben telepítse az esp32 by Espressif Systems csomagot a Boards Managerből, válassza ki az AI Thinker ESP32-CAM lapot, és nyissa meg a CameraWebServer példát a File - Examples menüből.

A kódban válassza ki a CAMERA_MODEL_AI_THINKER kamera modell sorát, és adja meg a WiFi hálózat nevét és jelszavát.

Feltöltés előtt ideiglenesen kösse az IO0 pint GND-re, nyomja meg a RESET gombot, majd töltse fel a programot.

Feltöltés után távolítsa el az IO0 és GND közötti hidat, és nyomja meg ismét a RESET-et. Nyissa meg a Serial Monitor-t 115200 baudon, jegyezze fel a megjelenő IP-címet, majd írja be egy ugyanazon hálózaton lévő számítógép vagy telefon böngészőjébe.

Folyamatos streamhez válasszon JPEG formátumot és alacsonyabb felbontást (SVGA vagy HD), a maximális felbontást pedig csak fényképezéshez használja. Ha időszakos felvételeket készít, a szenzort a képek között állítsa kikapcsolt állapotba a GPIO32 HIGH szintre állításával.

Ha microSD kártyát használ, vegye figyelembe, hogy az IO2, IO4, IO12, IO13, IO14 és IO15 pineket a kártya foglalja, az IO4 pedig a fehér LED-et is vezérli.

A modul nem ajánlott 24 órás folyamatos streamelésre. Stabil eredményhez jó tápegységet, rövid tápkábeleket és erős jelű WiFi hálózatot használjon azon a helyen, ahol a panel fel van szerelve.

 

Méretrajz:

 

Útmutató:

ESP3232-cam%20ESPCAM%20wiring%20programator%20ft232.png

9087
Tápfeszültség
5 V DC
Méretek
42 x 27 x 12 mm
Tűk száma
16
Interfész
UART, SPI, I2C, PWM, ADC, DAC
Flash memória
32 Mbit SPI
Fogyasztás
180 mA (Flash LED oprit) / 310 mA (Flash LED pornit)
Memória
4 MB PSRAM
Processzor
Dual core LX6, 32 bites
WiFi
802.11 b/g/n
Bluetooth
4.2 LE
Készenléti fogyasztás
6 mA (Deep-sleep)
SRAM memória
520 KB
Processzor órajele
80-240 MHz

Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.

Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.

Avertismente generale de siguranta:

Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.

Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.

Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.

Nu lasati produsul alimentat nesupravegheat in timpul testelor.

Produsul nu este jucarie si nu este destinat copiilor.

Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.

Identificare produs:

Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.

Producator / Importator / Distribuitor:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Website: www.sigmanortec.ro

Persoana responsabila in UE:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Documentatie si siguranta:

Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].

/*
  Test sketch for ESP32-CAM (AI-Thinker) with OV5640 5MP camera
  Board selected in Arduino IDE: "AI Thinker ESP32-CAM" (Tools > Board > esp32)
  Board package: esp32 by Espressif Systems (installed from Boards Manager)
  Boards Manager URL (File > Preferences): https://dl.espressif.com/dl/package_esp32_index.json
  Libraries: none to install, esp_camera.h comes with the esp32 package
  Wiring: camera attached to the onboard FPC connector, board powered at 5 V (min 2 A) on the 5V pin,
          FT232 TXD -> U0R, FT232 RXD -> U0T, FT232 GND -> GND, IO0 bridged to GND only during upload
  This sketch does not use WiFi. It checks that the camera starts and reports the frame size.
*/

#include "esp_camera.h"

// AI-Thinker camera pin map
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

bool cameraReady = false;

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("ESP32-CAM OV5640 test starting");

  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_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  // SVGA keeps the sensor cooler than the maximum resolution
  config.frame_size = psramFound() ? FRAMESIZE_SVGA : FRAMESIZE_CIF;
  config.jpeg_quality = 12;
  config.fb_count = psramFound() ? 2 : 1;

  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x\n", err);
    return;
  }

  sensor_t *s = esp_camera_sensor_get();
  Serial.printf("Camera init OK, sensor PID: 0x%04X\n", s->id.PID);
  cameraReady = true;
}

void loop() {
  if (!cameraReady) {
    delay(1000);
    return;
  }

  camera_fb_t *fb = esp_camera_fb_get();
  if (!fb) {
    Serial.println("Frame capture failed");
  } else {
    Serial.printf("Captured frame: %u x %u pixels, %u bytes\n",
                  (unsigned)fb->width, (unsigned)fb->height, (unsigned)fb->len);
    esp_camera_fb_return(fb);
  }
  delay(5000);
}

Az ESP32-CAM kártya az OV5640 5 MP-es kamerával egy beépített kamerával rendelkező ESP32 modul, amelyet képek rögzítésére és WiFi-n keresztüli továbbítására használnak további alkatrészek nélkül. Megfigyelő, távoli felügyeleti, automatikus fényképezési és képfelismerési projektekben alkalmazzák.

Az oktatóanyag az AI-Thinker ESP32-CAM kártyát használja platformként, amelyet az Arduino IDE-ből programozunk. A kártyának nincs USB portja, ezért a programot egy FT232RL USB-soros adapteren keresztül töltjük fel, a tápellátás pedig külön történik, legalább 2 A-es 5 VDC tápegységről. A program elindítja a kamerát, és egy egyszerű webszerveren keresztül video folyamot szolgáltat.

ESP32-CAM fejlesztőkártya, WiFi, Bluetooth, OV5640 5MP

Működés:

Az OV5640 szenzor rögzíti a képet, és 8 párhuzamos adatvonalon (D0 - D7) küldi az ESP32-nek. Az adatátvitelt az XCLK (a szenzornak adott órajel), a PCLK (a pixelek órajele), a VSYNC (képkocka kezdete) és a HREF (érvényes sor) jelek szinkronizálják. A szenzor konfigurálása, vagyis a felbontás, az expozíció és a fehéregyensúly beállítása I2C / SCCB buszon történik a SIOD (GPIO26) és a SIOC (GPIO27) vonalakon. A PWDN (GPIO32) láb leállíthatja a szenzort, ha nincs használatban.

Az alábbi számítás megmutatja, miért tömörítik a képet JPEG formátumba közvetlenül a szenzorban. A maximális felbontás 2592 x 1944 = 5 038 848 pixel. Pixelenként 2 bájttal (RGB565 formátum) egy képkocka valamivel több mint 10 MB lenne (10 077 696 bájt), ami meghaladja a kártya 4 MB-os PSRAM-jának méretét. JPEG formátumban egy képkocka sokkal kevesebb helyet foglal, és könnyen elfér a memóriában.

SVGA felbontásnál (800 x 600 = 480 000 pixel) egy JPEG képkocka a jelenettől és a kódban megadott minőségtől függően nagyjából 10 - 40 KB. Saját teszteinkben a 12-es minőségnél a képkockák átlagos mérete körülbelül 13 KB volt. Ha a WiFi-hálózat gyakorlatban 400 KB/s sebességet biztosít, és egy képkocka 40 KB, akkor 400 / 40 = 10 képkocka másodpercenként. A HD felbontás felett a szenzor 20 MHz-es XCLK órajellel csak 4 - 6 képkockát ad másodpercenként. A maximális felbontás így az egyedi fényképekre marad fenn, a video folyamhoz pedig SVGA vagy HD felbontást érdemes választani. Az esp32-camera könyvtár maximális felbontásként QSXGA-t kínál, 2560 x 1920 pixellel, ami kicsit kisebb a szenzor 2592 x 1944 pixeles felbontásánál.

Csatlakoztatás:

A kártyát külön, legalább 2 A-es 5 VDC tápegységről táplálja az 5V lábon. Ne az USB-soros adapterről táplálja, mert az adapter és az USB-port nem biztosítja az OV5640 kamera és a WiFi együttes csúcsáramát, az adapter 3.3 V-os kimenete pedig nem alkalmas erre a kártyára. Az FT232RL adapter VCC lába nincs bekötve, az adapter jumperét 3.3 V-ra állítjuk, hogy a TXD és az RXD jelek az ESP32 GPIO-inak 3.3 V-os logikai szintjét használják. A soros vonalak keresztbe vannak kötve: az adapter TXD lába az U0R-re, az adapter RXD lába az U0T-re kerül. Az IO0 és a GND közötti hidat csak a program feltöltése idejére tesszük be.

Kártya lába Csatlakozik ide Szerep
5V Tápegység 5 VDC, + kivezetés Kártya táplálása, legalább 2 A
GND (5V fejléc) Tápegység 5 VDC, - kivezetés Táp földelése
U0R (GPIO3) FT232 TXD Soros adatvétel a kártyán
U0T (GPIO1) FT232 RXD Soros adatküldés a kártyáról
GND (U0T mellett) FT232 GND Közös föld az adapterrel
IO0 GND (az IO0 melletti láb) Ideiglenes híd a programfeltöltési módhoz

ESP32-CAM AI-Thinker csatlakoztatása FT232RL adapterhez és 5V 2A tápegységhez programozáshoz

Az alábbi kép a kártya FT232 programozóhoz történő csatlakoztatását mutatja.

ESP32-cam ESPCAM bekötés programozóhoz ft232

Gombok, beállítások és jelzőfények:

Elem Mit csinál Hogyan használjuk
RESET gomb Újraindítja az ESP32 mikrovezérlőt. Az IO0 GND-re kötése után rövid nyomással lép a feltöltési módba, majd a híd eltávolítása után rövid nyomással futtatja a programot.
IO0 - GND híd Kiválasztja az indítási módot. Újraindításkor be van dugva: a kártya a program feltöltésére vár. Újraindításkor ki van véve: a kártya a Flash-ben lévő programot futtatja.
Fehér LED (vaku) Megvilágítja a jelenetet a kamerának, a GPIO4 vezérli. Akkor világít, ha a GPIO4 HIGH. Az oktatóanyag programjában kikapcsolva marad.
Piros állapot LED Jelzőfény a kártya hátoldalán, a GPIO33 vezérli. Akkor világít, ha a GPIO33 LOW. Az oktatóanyag programja nem használja.

Feltöltéshez kösse az IO0-t GND-re, nyomja meg a RESET gombot, majd töltse fel a programot. A kártya helyes módba lépett, ha az Arduino IDE hibaüzenet nélkül elindítja a feltöltést.

Feltöltés után távolítsa el az IO0 és a GND közötti hidat, majd nyomja meg a RESET gombot. A kártya most a programot futtatja, a Serial Monitorban pedig megjelennek az indítási üzenetek.

A fehér LED a programban kikapcsolva marad. Ha extra megvilágításra van szükség, vezérelje a GPIO4-et a kódból, figyelembe véve, hogy a maximális fényerőn égő LED körülbelül 130 mA-rel növeli a fogyasztást. Saját teszteinkben az OV5640 kamerával szerelt kártya körülbelül 340 - 360 mA-t fogyasztott 5 V-on, aktív kamera és kikapcsolt LED mellett.

Kártya és könyvtárak:

Az Arduino IDE-ben nyissa meg a File - Preferences menüpontot, és az Additional Boards Manager URLs mezőbe írja be ezt a címet: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json. Ezután nyissa meg a Tools - Board - Boards Manager menüpontot, keressen rá az esp32 kifejezésre, és telepítse az esp32 by Espressif Systems csomagot, friss, 2.0.x vagy újabb verzióban.

A telepítés után válassza ki az AI Thinker ESP32-CAM kártyát a Tools - Board - esp32 menüből. Az alábbi képernyőképek a beállítási lépéseket mutatják az Arduino IDE-ben.

Nem kell könyvtárat telepíteni a Library Managerből, mert az esp_camera.h és a WiFi.h az esp32 by Espressif Systems csomaggal együtt érkezik.

A kód:

A program a kamerát az AI-Thinker kártya lábkiosztásával inicializálja, csatlakozik a WiFi-hálózathoz, és a 80-as porton csatlakozó kliensnek JPEG video folyamot küld. A feltöltés előtt cserélje ki a hálózat nevét és jelszavát.

/*
  ESP32-CAM (AI-Thinker) with OV5640 5MP camera - WiFi MJPEG video stream
  Board selected in Arduino IDE: "AI Thinker ESP32-CAM" (Tools > Board > esp32)
  Board package: esp32 by Espressif Systems (installed from Boards Manager)
  Boards Manager URL (File > Preferences): https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  Libraries: none to install, esp_camera.h and WiFi.h come with the esp32 package
  Upload wiring: FT232 TXD -> U0R, FT232 RXD -> U0T, FT232 GND -> GND,
                 5V supply (min 2 A) on the 5V pin, IO0 bridged to GND only during upload
*/
#include "esp_camera.h"
#include <WiFi.h>
// ---- Wi-Fi credentials (replace with your own) ----
const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";
// ---- AI-Thinker camera pin map ----
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22
// White flash LED on GPIO4 (also SD card DATA1)
#define FLASH_LED_GPIO_NUM 4
WiFiServer server(80);
// Configure and start the camera
bool startCamera() {
  camera_config_t config = {};          // start from a zeroed structure
  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;        // 20 MHz clock for the sensor
  config.pixel_format = PIXFORMAT_JPEG;  // the sensor compresses the image itself
  if (psramFound()) {
    config.frame_size = FRAMESIZE_SVGA;  // 800x600, a good balance for streaming
    config.jpeg_quality = 12;            // lower number = better quality, bigger file
    config.fb_count = 2;                 // two frame buffers for smoother streaming
    config.fb_location = CAMERA_FB_IN_PSRAM;
    config.grab_mode = CAMERA_GRAB_LATEST;  // always send the newest frame
    Serial.println("PSRAM found, using SVGA with 2 frame buffers");
  } else {
    config.frame_size = FRAMESIZE_CIF;
    config.jpeg_quality = 15;
    config.fb_count = 1;
    config.fb_location = CAMERA_FB_IN_DRAM;
    config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
    Serial.println("No PSRAM, using CIF with 1 frame buffer");
  }
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x\n", err);
    return false;
  }
  // Read the sensor ID to confirm which camera is attached
  sensor_t *s = esp_camera_sensor_get();
  Serial.printf("Camera init OK, sensor PID: 0x%04X\n", s->id.PID);
  if (s->id.PID != OV5640_PID) {
    Serial.println("Warning: the attached sensor is not an OV5640");
  }
  return true;
}
// Read and ignore the HTTP request header sent by the browser
void skipRequest(WiFiClient &client) {
  unsigned long start = millis();
  while (client.connected() && millis() - start < 1000) {
    if (client.available()) {
      String line = client.readStringUntil('\n');
      if (line.length() <= 1) break;  // blank line ends the header
    }
  }
}
// Send frames to the client until it disconnects
void streamTo(WiFiClient &client) {
  client.print("HTTP/1.1 200 OK\r\n");
  client.print("Content-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n");
  Serial.println("Streaming started");
  uint32_t frames = 0;
  while (client.connected()) {
    camera_fb_t *fb = esp_camera_fb_get();  // get one JPEG frame
    if (!fb) {
      Serial.println("Frame capture failed");
      break;
    }
    size_t len = fb->len;
    client.print("--frame\r\n");
    client.print("Content-Type: image/jpeg\r\n");
    client.printf("Content-Length: %u\r\n\r\n", (unsigned)len);
    size_t sent = client.write(fb->buf, len);
    client.print("\r\n");
    esp_camera_fb_return(fb);               // give the buffer back to the driver
    if (sent != len) break;                 // client is gone
    frames++;
  }
  Serial.printf("Client disconnected after %u frames\n", (unsigned)frames);
}
void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println();
  Serial.println("ESP32-CAM OV5640 stream example");
  // Keep the white flash LED off
  pinMode(FLASH_LED_GPIO_NUM, OUTPUT);
  digitalWrite(FLASH_LED_GPIO_NUM, LOW);
  if (!startCamera()) {
    return;  // stop here if the camera did not start
  }
  // Connect to Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  WiFi.setSleep(false);  // no Wi-Fi power saving, better for streaming
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("WiFi connected, IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("Open http://");
  Serial.print(WiFi.localIP());
  Serial.println("/ in a browser to see the stream");
  server.begin();
}
void loop() {
  WiFiClient client = server.available();  // wait for a browser
  if (client) {
    Serial.println("Client connected");
    skipRequest(client);
    streamTo(client);
    client.stop();
  }
}

A kód működése:

Az első rész a definíciókat tartalmazza. A WIFI_SSID és a WIFI_PASSWORD állandók a hálózat adatait tárolják, a PWDN_GPIO_NUM, XCLK_GPIO_NUM, SIOD_GPIO_NUM, SIOC_GPIO_NUM, Y2_GPIO_NUM - Y9_GPIO_NUM, VSYNC_GPIO_NUM, HREF_GPIO_NUM és PCLK_GPIO_NUM sorok pedig az ESP32 és a kamera csatlakozója közötti lábakat írják le, ugyanúgy, ahogy a leírás táblázatában szerepelnek. A FLASH_LED_GPIO_NUM értéke GPIO4, a server objektum pedig a 80-as porton figyel.

A startCamera() függvény kitölti a camera_config_t szerkezetet a kamera lábaival, a 20 MHz-es XCLK órajellel és a PIXFORMAT_JPEG formátummal. A szerkezet üresen indul (= {}), így a be nem állított mezők nem tartalmaznak véletlen értékeket. Ha a psramFound() igaz értéket ad vissza, a program a FRAMESIZE_SVGA felbontást választja, két képkocka-pufferrel a PSRAM-ban (fb_count = 2), valamint a CAMERA_GRAB_LATEST módot, amely mindig a legfrissebb képkockát küldi. Ellenkező esetben a FRAMESIZE_CIF felbontás kerül kiválasztásra, egyetlen pufferrel a belső memóriában. Az esp_camera_init() után a függvény az esp_camera_sensor_get() segítségével olvassa ki a szenzort, kiírja a PID azonosítót, amely az OV5640 esetében 0x5640, és figyelmeztet, ha a csatlakoztatott szenzor más típusú.

A skipRequest() függvény beolvassa és eldobja a böngésző HTTP kérésének fejlécét, az első üres sorig. A streamTo() függvény elküldi a multipart/x-mixed-replace fejlécet, majd ciklusban ismétli: lekér egy képkockát az esp_camera_fb_get() segítségével, elküldi az elválasztót, a típust és a hosszt, kiírja a JPEG adatokat a client.write() függvénnyel, és felszabadítja a puffert az esp_camera_fb_return() hívással. A ciklus akkor áll meg, ha a kliens lecsatlakozik.

A setup() függvényben elindul a Serial 115200 baud sebességgel, a fehér LED kikapcsolva marad, meghívódik a startCamera(), a kártya csatlakozik a WiFi-hez a WiFi.begin() segítségével, és kiírja a kapott IP-címet. A loop() függvényben a program a server.available() hívással kliensre vár, és ha érkezik egy, a streamTo() segítségével kiszolgálja a video folyamot.

Eredmény:

Nyissa meg a Serial Monitort 115200 baud sebességgel. Indítás után meg kell jelennie a kamera inicializálásának visszaigazolásának a 0x5640 PID-del, majd a kártya IP-címének. Írja be a címet a böngészőbe, és megjelenik a kép valós időben.

ESP32-CAM OV5640 stream example
PSRAM found, using SVGA with 2 frame buffers
Camera init OK, sensor PID: 0x5640
Connecting to WiFi......
WiFi connected, IP address: 192.168.1.57
Open http://192.168.1.57/ in a browser to see the stream
Client connected
Streaming started
Client disconnected after 412 frames

Gyakori problémák:

A feltöltés csatlakozási hibával áll le. Gyakori oka a rossz indítási mód. Ellenőrizze, hogy az IO0 GND-re van kötve, nyomja meg a RESET gombot feltöltés előtt, és ellenőrizze, hogy a TXD az U0R-re, az RXD pedig az U0T-re megy, és nem közvetlenül.

Feltöltés után nem történik semmi, a Serial Monitorban pedig a programfeltöltésre való várakozás üzenete jelenik meg. Az IO0 és a GND közötti híd bent maradt. Vegye ki, majd nyomja meg a RESET gombot.

A kártya folyamatosan újraindul, vagy megjelenik a Brownout detector was triggered üzenet. A táplálás elégtelen, általában azért, mert a kártyát USB-ről vagy gyenge tápegységről látják el. Használjon stabil, legalább 2 A-es 5 VDC tápegységet, rövid kábelekkel.

A Camera init failed üzenet hibakóddal jelenik meg. A kamera szalagkábele nincs teljesen bedugva, vagy a FPC csatlakozó zárófüle nincs lezárva. Kapcsolja le a tápellátást, dugja vissza a kábelt az érintkezőkkel a helyes irányban, és zárja le a fület.

A kép zajos lesz, vagy lilás árnyalatot kap egy idő működés után. Az OV5640 szenzor túlmelegedett. Szereljen hűtőbordát a kamera hátoldalára, biztosítson szellőzést, és csökkentse a felbontást SVGA-ra vagy HD-re.

A kártya csatlakozik a WiFi-hez, de a kép akad, vagy kevés képkocka jön másodpercenként. A WiFi-jel gyenge, vagy a felbontás túl nagy. Vigye közelebb a kártyát a routerhez, és csökkentse a felbontást a kódban.

Korlátok és tanácsok:

A modul nem ajánlott folyamatos, napi 24 órás streamelésre, mert az OV5640 kamera ezen a kártyán erősen melegszik. Az ok az, hogy a kártyát az OV2640 kamerához tervezték, és a kamera csatlakozóját 3.3 V-tal, 2.8 V-tal és 1.2 V-tal táplálja, míg az OV5640 a magját a 3.3 V-ról működő belső 1.5 V-os szabályozóról kapja. A feszültségkülönbség hő formájában a szenzorban jelenik meg, és körülbelül 50 Celsius-fok felett zaj és lilás árnyalat jelenhet meg a képen.

Hardveres módosítás nélkül használjon hűtőbordát a kameránál, streamelésnél legfeljebb SVGA vagy HD felbontást, és a befogások között a szenzort a 0x3008 regiszteren keresztül kapcsolja standby üzemmódba (0x42 érték a standby-hoz, 0x02 az aktív üzemmódhoz). Saját teszteinkben a kártya fogyasztása körülbelül 338 mA-ről 163 mA-re csökkent, miközben a szenzor standby üzemmódban volt. A könyvtár által kínált maximális felbontás, 2560 x 1920 pixel, fényképezésre alkalmas.

Az SMD alkatrészek forrasztásában jártas felhasználók csökkenthetik a melegedést úgy, hogy a kamera csatlakozója melletti 1.2 V-os szabályozót 1.5 V-osra cserélik (például XC6206P152MR vagy ME6206A15XG típussal), és szoftveresen kikapcsolják a szenzor belső szabályozóját a 0x3031 regiszter 3. bitjén keresztül (0x08 érték), közvetlenül az esp_camera_init() után. Ezt a módosítást követően saját teszteinkben a kamera hűtőborda észrevehetően hidegebb maradt.

// Only on a board where the DVDD regulator was replaced with a 1.5 V one
sensor_t *s = esp_camera_sensor_get();
if (s->id.PID == OV5640_PID) {
  s->set_reg(s, 0x3031, 0x08, 0x08);  // bypass the internal 1.5 V core regulator
}

Ne kapcsolja ki a belső szabályozót egy módosítatlan kártyán, mert a szenzor magja a minimális feszültség alatt működne, ami sérült képekhez és lefagyásokhoz vezethet. A módosított kártya már nem alkalmas OV2640 kamerához, ezért megfelelően meg kell jelölni.

Ez az oktatóanyag alapján építhet böngészőből elérhető megfigyelő kamerát, microSD kártyára mentő időzített fényképező rendszert, vagy objektumfelismerő projektet, a szabad GPIO-kat pedig mozgásérzékelő szenzorokhoz vagy más modulokhoz használhatja.

Ez még talán érdekelhet