Placa dezvoltare ESP32-CAM cu OV3660 3MP
zoom_out_map
chevron_left chevron_right

Imaginile produselor au caracter informativ si pot prezenta diferente minore, in functie de lot si de furnizor. Este posibil ca specificatiile si pretul produselor sa fie modificate fara preaviz. Facem tot posibilul sa adaugam in pagina produselor specificatii cat mai exacte si corecte dar este posibil ca acestea sa nu fie in totalitate corecte. in cazul in care identificati un astfel de caz, va rugam sa ne semnalati acest lucru.

Produsele noastre sunt destinate in principal dezvoltarii, prototiparii si proiectelor tehnice. Informatiile privind specificatiile, instructiunile si conformitatea sunt furnizate conform datelor disponibile de la producatori sau furnizori. Pentru integrarea in produse finale sau aplicatii comerciale, recomandam verificarea compatibilitatii si conformitatii in functie de utilizarea dorita.

Specificatiile tehnice mentionate (curent, putere etc.) reprezinta valori maxime admise in conditii ideale de functionare. Pentru o utilizare sigura si o durata de viata optima, recomandam exploatarea produsului in regim continuu la cel mult 50% din valorile maxime specificate.

Placa dezvoltare ESP32-CAM, Wifi, Bluetooth, OV5640 5MP

Solutie compacta pentru proiecte de viziune artificiala, streaming video si IoT, cu conectivitate WiFi 802.11b/g/n si Bluetooth 4.2 LE pentru aplicatii wireless. Integreaza procesor dual core pana la 240MHz si 4MB PSRAM pentru procesare rapida a imaginilor, camera OV5640 de 5MP pentru cadre detaliate, suport card TF si formate JPEG, BMP, grayscale, compatibila cu Arduino IDE pentru dezvoltare rapida.

81,97 RON Cu TVA

67,74 RON Fara TVA

(5/5) din 4 total recenzii
Citeste recenziile
1-2 zile

Adauga si accesoriile potrivite

  • Detalii

Se adauga in cos impreuna cu produsul, in aceeasi cantitate.

check In Stoc
Ai gasit mai ieftin? Spune-ne! (autentifica-te pentru a trimite o solicitare)

Cumparand acest produs primesti 4,10 RON in puncte de fidelitate.

Garantie: 24 luni pentru persoane fizice
LIVRARE GRATUITA
Adauga in cos produse in valoare de 130 Ron si ai livrare gratuita daca alegi sa platesti online
EXPEDIERE RAPIDA
Produsele sunt expediate din stoc propriu
PUNCTE FIDELITATE
Primesti puncte la fiecare comanda, in valoare de 5%

Placa de dezvoltare ESP32-CAM combina pe un singur modul procesorul ESP32 cu WiFi si Bluetooth si o camera OV5640 de 5 MP atasata prin cablu flex la conectorul FPC al placii. Este o solutie completa pentru capturarea si transmiterea imaginilor in proiecte de viziune artificiala, streaming video si IoT. Placa poate functiona independent, trimitand imagini si fluxuri video in retea prin WiFi, sau poate fi programata sa raspunda unor comenzi primite prin UART, fiind potrivita pentru supraveghere, recunoasterea obiectelor, monitorizare la distanta si fotografiere automatizata.

Procesorul este un ESP32 dual core LX6 pe 32 de biti, cu frecventa de lucru intre 80 si 240 MHz si o putere de calcul de pana la 600 DMIPS. Memoria interna de 520 KB SRAM este completata de 4 MB PSRAM extern, necesar pentru procesarea imaginilor de rezolutie mare inainte de compresie si transmisie. Camera OV5640 ofera o rezolutie maxima de 2592 x 1944 pixeli (5 MP) si se conecteaza la un conector FPC cu 24 de pini. Modulul accepta WiFi 802.11 b/g/n, Bluetooth 4.2 LE, imagini in format JPEG, BMP sau grayscale si moduri de consum redus Deep-sleep, Modem-sleep si Light-sleep.

Printre caracteristicile principale se numara conectorul FPC pentru camera, slotul pentru card microSD de pana la 4 GB, un LED alb folosit ca blit, antena PCB imprimata pe placa, doua randuri de pini (16 in total) care expun alimentarea, GPIO-urile libere si interfata UART, si un buton de RESET. Alimentarea se face la 5 VDC pe pinul 5V, cu o sursa stabila de minim 2 A, placa putand fi alimentata si la 3.3 VDC prin pinul 3V3.

Prin interfata UART (pinii U0T si U0R), placa se programeaza si se testeaza cu ajutorul unui adaptor USB-serial conectat la calculator, iar dupa conectarea la retea imaginile si fluxul video pot fi accesate direct dintr-un browser de pe orice calculator sau telefon din reteaua locala. Pinii GPIO ramasi liberi permit conectarea unor senzori sau module suplimentare compatibile cu Arduino, ESP32, STM32 sau Raspberry Pi, folosind nivelul logic de 3.3 V al placii.

 

Specificatii:

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

Tensiune alimentare: 5 VDC (pin 5V)

Consum curent: 180 mA (Flash LED oprit) / 310 mA (Flash LED pornit, luminozitate maxima)

Consum curent Deep-sleep: 6 mA minim

Consum curent Modem-sleep: 20 mA minim

Consum curent Light-sleep: 6.7 mA minim

Numar pini: 16

WiFi: 802.11 b/g/n

Bluetooth: 4.2 LE

CPU: Dual core LX6, 32 biti

Frecventa CPU: 80 - 240 MHz

Memorie interna: 520 KB SRAM

Memorie externa: 4 MB PSRAM

Memorie Flash SPI: 32 Mbit

Interfete suportate: UART, SPI, I2C, PWM, ADC, DAC

Camera inclusa: OV5640, 5 MP, rezolutie maxima 2592 x 1944 pixeli

Conector camera: FPC, 24 pini

Format imagini: JPEG, BMP, grayscale

Card de memorie: microSD (TF), pana la 4 GB

Moduri consum redus: Deep-sleep, Modem-sleep, Light-sleep

Stack software integrat: LwIP, FreeRTOS

Moduri de operare retea: STA / AP / STA+AP

Smart Config / AirKiss: Da

Actualizare FOTA: Da

Programator inclus: Nu, necesita un adaptor extern (recomandat FT232 sau echivalent)

Dimensiuni: 42 x 27 x 12 mm

 

ATENTIE!

 Cititi cu atentie inainte de a cumpara
Camera OV5640 (lotul actual)

Acest modul se livreaza cu camera OV5640 (5MP) in locul OV2640, din cauza problemelor in aprovizionarea cu camere OV2640 calitative. Senzorul se incalzeste puternic in functionare si poate deveni fierbinte la atingere. Este un comportament normal pentru aceasta combinatie placa-camera, nu un defect.

Programatorul poate folosi driverul CH340 sau FT232, in functie de lot.

 

Conditii obligatorii de utilizare:

Radiator montat pe spatele camerei, cu banda sau pad termoconductor.

Ventilatie buna; nu folositi modulul in carcase inchise fara circulatie de aer.

Alimentare stabila de 5V, minim 2A, pe pinul 5V. Nu alimentati modulul din adaptorul USB-serial pe 3.3V.

 

Reducerea incalzirii camerei OV5640 pe placa ESP32-CAM

Placa ESP32-CAM (AI Thinker) a fost proiectata pentru camera OV2640 si alimenteaza conectorul camerei cu 3.3V (DOVDD), 2.8V (AVDD) si 1.2V (DVDD). Senzorul OV5640 necesita insa 1.5V pe nucleu (DVDD). Ca sa poata functiona si in aceste conditii, OV5640 isi activeaza implicit regulatorul intern de 1.5V, alimentat din tensiunea de 3.3V. Diferenta de tensiune se transforma in caldura chiar in interiorul senzorului, de aceea modulul se incalzeste puternic in functionare continua. Peste aproximativ 50°C pot aparea zgomot si o nuanta violet in imagine. Solutia este inlocuirea regulatorului de 1.2V cu unul de 1.5V, urmata de dezactivarea regulatorului intern din software.

 

Necesar

Regulator: XC6206P152MR sau ME6206A15XG (1.5V, SOT-23)

Unelte: statie de aer cald, multimetru

Registru OV5640: 0x3031, bit 3 (valoare 0x08)

 

Utilizare

Deconectati camera si alimentati placa la 5V.

Masurati cu multimetrul, fata de un pin GND al placii, iesirea regulatoarelor SOT-23 de langa conectorul camerei si identificati-l pe cel care furnizeaza aproximativ 1.2V. Regulatorul de 2.8V si AMS1117 (3.3V) nu se modifica.

Notati pozitia pinilor VIN (3.3V), VOUT (1.2V) si GND ai regulatorului identificat.

Desoldati regulatorul de 1.2V si montati in locul lui regulatorul de 1.5V, dupa ce verificati in datasheet ca pinii VIN, VOUT si GND corespund padurilor.

Alimentati placa fara camera si verificati ca iesirea noului regulator este intre 1.45V si 1.55V.

Conectati camera si adaugati in cod, imediat dupa esp_camera_init(), dezactivarea regulatorului intern (exemplul de mai jos).

Verificati in Serial Monitor ca registrul 0x3031 are valoarea 0x08.

Optional, montati pe spatele modulului camerei un radiator mic de aluminiu, lipit cu banda termoconductoare.

 

// OV5640: disable the internal 1.5V core regulator (register 0x3031, bit 3)

// Use ONLY when DVDD is supplied externally with 1.5V

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));

}

 

Dupa modificare, camera functioneaza corect la toate rezolutiile testate, pana la 2560x1920, iar temperatura modulului scade. Un radiator este necesar in continuare deoarece camera atinge oricum, in functionare, in jur de 50 grade C.

 

Alternativa fara lipire

Montati un radiator pe camera, folositi in stream rezolutii de cel mult SVGA sau HD si treceti senzorul in standby intre capturi (registrul 0x3008 = 0x42 pentru standby, 0x02 pentru activ).

 

Atentie! Nu dezactivati regulatorul intern pe o placa nemodificata, cu 1.2V pe DVDD. Nucleul senzorului ar functiona sub tensiunea minima specificata, cu risc de imagini corupte si blocari. Pe o placa fara regulator DVDD, dezactivarea lasa nucleul complet nealimentat.

Dupa modificare, placa nu mai este potrivita pentru camera OV2640, care necesita 1.2V pe nucleu. Marcati placa corespunzator. Modificarea necesita experienta in lipirea componentelor SMD.

 

Layout:

Element Functie
Modul ESP32-S cu antena PCB Procesorul ESP32 dual core si antena WiFi / Bluetooth imprimata pe placa.
LED alb Se foloseste ca blit pentru camera si este comandat de GPIO4. Se aprinde cand GPIO4 este pe HIGH si se stinge cand GPIO4 este pe LOW.
LED rosu de stare LED aflat pe spatele placii, comandat de GPIO33. Se aprinde cand GPIO33 este pe LOW si poate fi folosit ca indicator liber in program.
Conector FPC pentru camera Conector cu 24 de pini la care este atasat cablul flex al camerei OV5640.
Camera OV5640 Modul camera de 5 MP, montat separat de placa si conectat prin cablu flex.
Slot card microSD (TF) Stocare locala a imaginilor si fisierelor, carduri de pana la 4 GB. Foloseste pinii IO2, IO4, IO12, IO13, IO14 si IO15.
Doua randuri de pini (header dublu) Expun alimentarea, GPIO-urile libere si interfata UART, 16 pini in total.
Pinul IO0 Selecteaza modul de pornire. Legat la GND (pinul GND de langa el) in momentul resetarii, placa intra in modul de incarcare a programului. Lasat liber, placa ruleaza programul din memoria Flash.
Buton RESET Reseteaza microcontrolerul ESP32. Se apasa dupa legarea IO0 la GND pentru a intra in modul de incarcare si dupa scoaterea puntii pentru a rula programul.
Regulator de tensiune Converteste alimentarea de 5 V in tensiunea de 3.3 V necesara circuitelor placii.
Gauri de montare Doua orificii intre randurile de pini, pentru fixarea placii.

 

Pinout:

Conector Pin Functie
Header 5V 5V Alimentare placa, 5 VDC
Header 5V GND Masa
Header 5V IO12 GPIO12, folosit si ca MicroSD DATA2
Header 5V IO13 GPIO13, folosit si ca MicroSD DATA3
Header 5V IO15 GPIO15, folosit si ca MicroSD CMD
Header 5V IO14 GPIO14, folosit si ca MicroSD CLK
Header 5V IO2 GPIO2, folosit si ca MicroSD DATA0
Header 5V IO4 GPIO4, folosit si ca MicroSD DATA1, comanda LED-ul flash
Header 3V3 3V3 Alimentare placa, 3.3 VDC
Header 3V3 IO16 GPIO16, linie libera, poate fi UART2 RX
Header 3V3 IO0 GPIO0, selecteaza modul de pornire, se leaga la GND pentru incarcarea programului
Header 3V3 GND Masa
Header 3V3 VCC Iesire 3.3 V sau 5 V, nu se alimenteaza placa prin acest pin
Header 3V3 U0R (IO3) UART RX, receptie date seriale
Header 3V3 U0T (IO1) UART TX, transmisie date seriale
Header 3V3 GND Masa

 

Semnal camera (FPC) GPIO ESP32 Functie
D0 GPIO5 Linie de date camera (Y2)
D1 GPIO18 Linie de date camera (Y3)
D2 GPIO19 Linie de date camera (Y4)
D3 GPIO21 Linie de date camera (Y5)
D4 GPIO36 Linie de date camera (Y6)
D5 GPIO39 Linie de date camera (Y7)
D6 GPIO34 Linie de date camera (Y8)
D7 GPIO35 Linie de date camera (Y9)
XCLK GPIO0 Ceas de intrare pentru senzorul camerei
PCLK GPIO22 Ceas de iesire pixel
VSYNC GPIO25 Sincronizare verticala cadru
HREF GPIO23 Sincronizare orizontala linie
SIOD (SDA) GPIO26 I2C / SCCB, configurare senzor
SIOC (SCL) GPIO27 I2C / SCCB, configurare senzor
PWDN GPIO32 Oprire (power-down) senzor, HIGH pentru oprire intre capturi

 

Utilizare:

Daca modulul camera nu este deja montat, fixati-l pe conectorul FPC al placii respectand orientarea contactelor si inchideti clapeta de blocare a conectorului.

Montati un radiator mic, cu banda sau pad termoconductor, pe spatele camerei OV5640 inainte de prima utilizare, deoarece senzorul se incalzeste puternic in functionare si poate deveni fierbinte la atingere, acesta fiind un comportament normal pentru aceasta combinatie placa-camera.

Asigurati o ventilatie buna in jurul modulului si nu il folositi intr-o carcasa inchisa fara circulatie de aer.

Alimentati placa la 5 VDC, minim 2 A, pe pinul 5V, folosind o sursa stabila, si nu alimentati modulul din iesirea de 3.3 V a unui adaptor USB-serial. Nu aplicati tensiune pe pinul VCC, deoarece acesta este o iesire.

Pentru programare, conectati un adaptor FT232 sau echivalent la pinii U0R, U0T si GND, cu jumperul adaptorului pe 3.3 V, legand TXD-ul adaptorului la U0R si RXD-ul adaptorului la U0T, iar masa adaptorului la masa placii.

In Arduino IDE instalati pachetul de placi esp32 by Espressif Systems din Boards Manager, selectati placa AI Thinker ESP32-CAM si deschideti exemplul CameraWebServer din meniul File - Examples.

In cod, selectati linia cu modelul de camera CAMERA_MODEL_AI_THINKER si completati numele retelei WiFi si parola.

Inainte de incarcare, legati temporar pinul IO0 la GND, apasati butonul RESET si incarcati programul.

Dupa incarcare, scoateti puntea dintre IO0 si GND si apasati din nou RESET. Deschideti Serial Monitor la 115200 baud si notati adresa IP afisata, apoi introduceti-o in browserul unui calculator sau telefon aflat in aceeasi retea.

Pentru streaming continuu alegeti formatul JPEG si o rezolutie redusa (SVGA sau HD), iar rezolutia maxima folositi-o doar pentru fotografii. Daca realizati capturi periodice, treceti senzorul in oprire intre poze punand GPIO32 pe HIGH.

Daca folositi cardul microSD, tineti cont ca pinii IO2, IO4, IO12, IO13, IO14 si IO15 sunt ocupati de card, iar IO4 comanda si LED-ul alb.

Modulul nu este recomandat pentru streaming continuu 24 de ore din 24. Pentru rezultate stabile folositi o sursa de alimentare buna, cabluri de alimentare scurte si o retea WiFi cu semnal puternic in locul unde este montata placa.

 

Diagrama dimensiuni:

 

Tutorial:

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

9087

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:

Acest produs este destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie, cercetare si aplicatii tehnice similare. Produsul trebuie utilizat doar conform specificatiilor tehnice mentionate in pagina produsului si/sau in documentatia disponibila.

Utilizarea incorecta, depasirea valorilor maxime admise de tensiune, curent, temperatura sau conectarea gresita pot duce la defectarea produsului, deteriorarea altor echipamente sau la riscuri de siguranta.

Produsul nu este jucarie si nu este destinat copiilor. Montajul, testarea si utilizarea trebuie realizate de persoane cu cunostinte minime in domeniul electric/electronic. Se recomanda utilizarea produsului in montaje protejate, carcase adecvate sau sisteme care respecta normele de siguranta aplicabile.

 

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]

/*
  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);
}

Placa ESP32-CAM cu camera OV5640 de 5 MP este un modul ESP32 cu camera incorporata, folosit pentru a capta si a transmite imagini prin WiFi fara alte componente suplimentare. Se foloseste in proiecte de supraveghere, monitorizare la distanta, fotografiere automata si recunoastere de imagini.

Tutorialul foloseste chiar placa ESP32-CAM AI-Thinker ca platforma, programata din Arduino IDE. Placa nu are port USB, asa ca incarcarea programului se face printr-un adaptor USB-serial FT232RL, iar alimentarea se face separat, de la o sursa de 5 VDC cu minim 2 A. Programul porneste camera si serveste un flux video printr-un server web simplu.

Placa dezvoltare ESP32-CAM, Wifi, Bluetooth, OV5640 5MP

Cum functioneaza:

Senzorul OV5640 capteaza imaginea si o trimite catre ESP32 pe 8 linii de date paralele (D0 - D7), sincronizate de semnalele XCLK (ceasul dat senzorului), PCLK (ceasul pixelilor), VSYNC (inceput de cadru) si HREF (linie valida). Configurarea senzorului, adica rezolutia, expunerea si balansul de alb, se face printr-o magistrala I2C / SCCB pe liniile SIOD (GPIO26) si SIOC (GPIO27). Pinul PWDN (GPIO32) poate opri senzorul cand nu este folosit.

Calculul de mai jos arata de ce imaginea este comprimata JPEG direct in senzor. Rezolutia maxima este 2592 x 1944 = 5 038 848 pixeli. Cu 2 octeti pe pixel (format RGB565), un cadru ar avea putin peste 10 MB (10 077 696 octeti), mai mult decat cei 4 MB de PSRAM ai placii. In JPEG, un cadru ocupa mult mai putin si incape usor in memorie.

La rezolutia SVGA (800 x 600 = 480 000 pixeli), un cadru JPEG are, in functie de scena si de calitatea aleasa in cod, aproximativ 10 - 40 KB. In testele noastre, la calitatea 12, media a fost de aproximativ 13 KB pe cadru. Daca reteaua WiFi ofera in practica 400 KB/s, iar un cadru are 40 KB, rezulta 400 / 40 = 10 cadre pe secunda. Peste rezolutia HD, senzorul livreaza doar 4 - 6 cadre pe secunda cu ceasul XCLK de 20 MHz. Rezolutia maxima ramane astfel rezervata fotografiilor individuale, iar pentru flux video se aleg SVGA sau HD. Biblioteca esp32-camera ofera ca rezolutie maxima QSXGA de 2560 x 1920 pixeli, putin sub cei 2592 x 1944 pixeli ai senzorului.

Conectare:

Placa se alimenteaza de la o sursa separata de 5 VDC cu minim 2 A, pe pinul 5V. Nu o alimentati din adaptorul USB-serial, deoarece adaptorul si portul USB nu asigura curentul de varf cerut de camera OV5640 impreuna cu WiFi-ul, iar iesirea de 3.3 V a adaptorului nu este potrivita pentru aceasta placa. Pinul VCC al adaptorului FT232RL ramane neconectat, iar jumperul adaptorului se pune pe 3.3 V, pentru ca semnalele TXD si RXD sa aiba nivelul logic de 3.3 V al GPIO-urilor ESP32. Liniile seriale se incruciseaza: TXD al adaptorului merge la U0R, iar RXD al adaptorului la U0T. Puntea dintre IO0 si GND se pune doar pe durata incarcarii programului.

Pin produs Se conecteaza la Rol
5V Sursa 5 VDC, borna + Alimentare placa, minim 2 A
GND (header 5V) Sursa 5 VDC, borna - Masa alimentare
U0R (GPIO3) FT232 TXD Receptie date seriale pe placa
U0T (GPIO1) FT232 RXD Transmisie date seriale de la placa
GND (langa U0T) FT232 GND Masa comuna cu adaptorul
IO0 GND (pinul de langa IO0) Punte temporara pentru modul de incarcare a programului

Conectare ESP32-CAM AI-Thinker la adaptor FT232RL si sursa 5V 2A pentru programare

Imaginea de mai jos arata conectarea placii la programatorul FT232.

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

Butoane, reglaje si indicatoare:

Element Ce face Cum se foloseste
Buton RESET Reseteaza microcontrolerul ESP32. Se apasa scurt dupa legarea IO0 la GND pentru a intra in modul de incarcare, apoi dupa scoaterea puntii pentru a rula programul.
Punte IO0 - GND Selecteaza modul de pornire. Pusa la resetare, placa asteapta incarcarea unui program. Scoasa la resetare, placa ruleaza programul din Flash.
LED alb (blitz) Lumineaza scena pentru camera, comandat de GPIO4. Se aprinde cand GPIO4 este HIGH. In programul din tutorial ramane stins.
LED rosu de stare Indicator de pe spatele placii, comandat de GPIO33. Se aprinde cand GPIO33 este LOW. Nu este folosit de programul din tutorial.

Pentru incarcare, legati IO0 la GND, apasati RESET si incarcati programul. Placa a intrat in modul corect daca Arduino IDE porneste incarcarea fara eroarea de conectare.

Dupa incarcare, scoateti puntea dintre IO0 si GND si apasati RESET. Placa ruleaza acum programul, iar in Serial Monitor apar mesajele de pornire.

LED-ul alb ramane stins in program. Daca vreti iluminare suplimentara, comandati GPIO4 din cod, tinand cont ca LED-ul aprins la luminozitate maxima adauga aproximativ 130 mA la consum. In testele noastre, placa cu camera OV5640 a consumat aproximativ 340 - 360 mA la 5 V, cu camera activa si LED-ul stins.

Placa si biblioteci:

In Arduino IDE, mergeti la File - Preferences si adaugati in campul Additional Boards Manager URLs adresa https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json. Deschideti apoi Tools - Board - Boards Manager, cautati esp32 si instalati pachetul esp32 by Espressif Systems, intr-o versiune recenta (2.0.x sau mai noua).

Dupa instalare, selectati placa AI Thinker ESP32-CAM din Tools - Board - esp32. Capturile de mai jos ilustreaza pasii de configurare din Arduino IDE.

Nu trebuie instalata nicio biblioteca din Library Manager, deoarece esp_camera.h si WiFi.h vin odata cu pachetul esp32 by Espressif Systems.

Codul:

Programul initializeaza camera cu maparea de pini a placii AI-Thinker, se conecteaza la reteaua WiFi si trimite fluxul video JPEG catre un client conectat pe portul 80. Inlocuiti numele si parola retelei inainte de incarcare.

/*
  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();
  }
}

Cum functioneaza codul:

Prima parte contine definitiile. Constantele WIFI_SSID si WIFI_PASSWORD retin datele retelei, iar liniile cu PWDN_GPIO_NUM, XCLK_GPIO_NUM, SIOD_GPIO_NUM, SIOC_GPIO_NUM, Y2_GPIO_NUM - Y9_GPIO_NUM, VSYNC_GPIO_NUM, HREF_GPIO_NUM si PCLK_GPIO_NUM descriu pinii dintre ESP32 si conectorul camerei, aceiasi ca in tabelul din descriere. FLASH_LED_GPIO_NUM este GPIO4, iar obiectul server asculta pe portul 80.

Functia startCamera() completeaza structura camera_config_t cu pinii camerei, cu ceasul XCLK de 20 MHz si cu formatul PIXFORMAT_JPEG. Structura porneste golita (= {}), astfel incat campurile nesetate sa nu contina valori aleatoare. Daca psramFound() returneaza adevarat, se alege FRAMESIZE_SVGA cu doua buffere de cadru in PSRAM (fb_count = 2) si modul CAMERA_GRAB_LATEST, care trimite mereu cel mai nou cadru. Altfel se alege FRAMESIZE_CIF cu un singur buffer in memoria interna. Dupa esp_camera_init() functia citeste senzorul cu esp_camera_sensor_get(), afiseaza identificatorul PID, care pentru OV5640 este 0x5640, si avertizeaza daca senzorul conectat este altul.

Functia skipRequest() citeste si ignora antetul cererii HTTP trimise de browser, pana la prima linie goala. Functia streamTo() trimite antetul multipart/x-mixed-replace, apoi repeta in bucla: preia un cadru cu esp_camera_fb_get(), trimite separatorul, tipul si lungimea, scrie datele JPEG cu client.write() si elibereaza bufferul cu esp_camera_fb_return(). Bucla se opreste cand clientul se deconecteaza.

In setup() se porneste Serial la 115200 baud, se mentine LED-ul alb stins, se apeleaza startCamera(), se conecteaza placa la WiFi cu WiFi.begin() si se afiseaza adresa IP primita. In loop() programul asteapta un client cu server.available() si, cand apare unul, ii serveste fluxul prin streamTo().

Rezultat:

Deschideti Serial Monitor la 115200 baud. Dupa pornire trebuie sa apara confirmarea initializarii camerei cu PID 0x5640, apoi adresa IP a placii. Introduceti adresa in browser si va aparea imaginea in timp real.

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

Probleme frecvente:

Incarcarea se opreste cu o eroare de conectare. Cauza obisnuita este modul de pornire gresit. Verificati ca IO0 este legat la GND, apasati RESET inainte de incarcare si verificati ca TXD merge la U0R si RXD la U0T, nu direct.

Dupa incarcare nu se intampla nimic si in Serial Monitor apare un mesaj despre asteptarea incarcarii programului. Puntea dintre IO0 si GND a ramas pusa. Scoateti-o si apasati RESET.

Placa se reseteaza continuu sau apare mesajul Brownout detector was triggered. Alimentarea este insuficienta, de obicei pentru ca placa este alimentata din USB sau cu o sursa slaba. Folositi o sursa stabila de 5 VDC cu minim 2 A, cu cabluri scurte.

Apare mesajul Camera init failed cu un cod de eroare. Cablul flex al camerei nu este introdus complet sau clapeta conectorului FPC nu este inchisa. Deconectati alimentarea, reintroduceti cablul cu contactele in pozitia corecta si inchideti clapeta.

Imaginea are zgomot sau o nuanta violet dupa un timp de functionare. Senzorul OV5640 s-a incalzit prea mult. Montati un radiator pe spatele camerei, asigurati ventilatie si reduceti rezolutia la SVGA sau HD.

Placa se conecteaza la WiFi, dar imaginea se blocheaza sau are putine cadre pe secunda. Semnalul WiFi este slab sau rezolutia este prea mare. Apropiati placa de router si reduceti rezolutia din cod.

Limitari si sfaturi:

Modulul nu este recomandat pentru streaming continuu 24 de ore din 24, deoarece camera OV5640 se incalzeste puternic pe aceasta placa. Motivul este ca placa a fost proiectata pentru camera OV2640 si alimenteaza conectorul camerei cu 3.3 V, 2.8 V si 1.2 V, in timp ce OV5640 isi alimenteaza nucleul de la un regulator intern de 1.5 V pornit din 3.3 V. Diferenta de tensiune se transforma in caldura chiar in senzor, iar peste aproximativ 50 grade C pot aparea zgomot si o nuanta violet in imagine.

Fara modificari hardware, folositi un radiator pe camera, rezolutii de cel mult SVGA sau HD in streaming si treceti senzorul in standby intre capturi prin registrul 0x3008 (valoarea 0x42 pentru standby si 0x02 pentru activ). In testele noastre, consumul placii a scazut de la aproximativ 338 mA la 163 mA cu senzorul in standby. Rezolutia maxima oferita de biblioteca, 2560 x 1920 pixeli, este potrivita pentru fotografii.

Utilizatorii cu experienta in lipirea componentelor SMD pot reduce incalzirea inlocuind regulatorul de 1.2 V de langa conectorul camerei cu unul de 1.5 V (de exemplu XC6206P152MR sau ME6206A15XG) si dezactivand din software regulatorul intern al senzorului, prin bitul 3 al registrului 0x3031 (valoarea 0x08), imediat dupa esp_camera_init(). Dupa aceasta modificare, radiatorul camerei a ramas vizibil mai rece in testele noastre.

// 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
}

Nu dezactivati regulatorul intern pe o placa nemodificata, deoarece nucleul senzorului ar functiona sub tensiunea minima, cu risc de imagini corupte si blocari. O placa modificata nu mai este potrivita pentru camera OV2640 si trebuie marcata corespunzator.

Pe baza acestui tutorial puteti construi o camera de supraveghere cu acces din browser, un sistem de fotografiere periodica cu salvare pe cardul microSD sau un proiect de recunoastere a obiectelor, folosind GPIO-urile libere pentru senzori de miscare sau alte module.

Produse Asociate