Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.
Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.
Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.
Scheda di sviluppo ESP32-CAM con CH340G, WiFi, Bluetooth, OV5640 5MP
Soluzione compatta per progetti di visione artificiale, streaming video e IoT, con processore ESP32 dual core fino a 240MHz, connettività WiFi 802.11 b g n e Bluetooth 4.2 LE per il controllo e la trasmissione wireless, fotocamera OV5640 da 5MP per immagini dettagliate, memoria con PSRAM da 4MB per acquisizioni ed elaborazione efficiente, programmazione semplice in Arduino IDE tramite CH340G con USB Type C.
Spedito entro giovedì 22 ottobre
Acquistando questo prodotto guadagni 4,58 RON in punti fedeltà.
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
Spediamo dal nostro magazzino entro 24 ore
Ricevi punti a ogni ordine, per un valore del 5%.
La scheda di sviluppo ESP32-CAM combina un modulo ESP32 con processore dual core e una camera OV5640 da 5 MP, offrendo connettività WiFi e Bluetooth in un formato compatto. La scheda supporta segnali video dal proprio sensore ottico, comandi e dati tramite UART, SPI, I2C, PWM, ADC e DAC, risultando adatta per progetti di visione artificiale, streaming video, sorveglianza, riconoscimento facciale, fotografia automatizzata e applicazioni IoT in generale.
Il processore dual core LX6 a 32 bit funziona a frequenze fino a 240 MHz, con una potenza di calcolo fino a 600 DMIPS, sufficiente per l'elaborazione delle immagini e la gestione simultanea della connessione WiFi 802.11 b/g/n e Bluetooth 4.2 LE. La memoria interna da 520 KB SRAM è completata da 4 MB di PSRAM esterna, necessaria per l'acquisizione e l'inquadratura di immagini ad alta risoluzione provenienti dalla camera OV5640. La scheda supporta i formati immagine JPEG, BMP e grayscale, può caricare foto tramite WiFi, può memorizzare dati su una scheda TF esterna fino a 4 GB e dispone di diverse modalità a basso consumo, Deep-sleep, Modem-sleep e Light-sleep, utili per progetti alimentati a batteria.
Tra le caratteristiche principali figurano il connettore FPC per la camera OV5640, lo slot per scheda microSD, il LED flash sulla scheda, il pulsante di reset, due file di pin di espansione con 16 pin totali di cui 9 utilizzabili come ingressi/uscite, il sensore Hall e il sensore di temperatura integrati nel chip ESP32, il supporto per Smart Config/AirKiss e FOTA, nonché le modalità operative STA, AP e STA+AP. L'alimentazione della scheda avviene a 5 VDC tramite il pin 5V, e il kit include anche un convertitore seriale USB-TTL con circuito CH340G e connettore Type-C, utilizzato per la programmazione e per la comunicazione seriale con un computer.
Tramite l'interfaccia UART e il pacchetto software fornito da Espressif, la scheda è compatibile con l'ambiente Arduino IDE, essendo riconosciuta come "AI Thinker ESP32-CAM". La connessione seriale consente anche la comunicazione con un computer o con altri microcontrollori, mentre la connettività WiFi permette l'integrazione in reti insieme ad altre schede ESP32, moduli IoT o applicazioni su computer e telefono.
ATTENZIONE
Camera OV5640 (lotto attuale)
Questo modulo viene fornito con la camera OV5640 (5MP) al posto della OV2640. Il sensore si riscalda notevolmente durante il funzionamento e può diventare caldo al tatto. È un comportamento normale per questa combinazione scheda-camera, non un difetto.
Condizioni obbligatorie di utilizzo:
Dissipatore montato sul retro della camera, con nastro o pad termoconduttivo.
Buona ventilazione; non utilizzare il modulo in contenitori chiusi senza circolazione d'aria.
Alimentazione stabile a 5V, minimo 2A, sul pin 5V. Non alimentare il modulo dall'adattatore USB-seriale a 3.3V.
Raccomandazioni:
In Arduino IDE selezionare la scheda “AI Thinker ESP32-CAM” e utilizzare l'esempio CameraWebServer.
Utilizzare il formato JPEG. Per lo streaming continuo scegliere una risoluzione ridotta (SVGA o HD); la risoluzione massima solo per le foto.
Per acquisizioni periodiche, spegnere il sensore tra uno scatto e l'altro (GPIO32 su HIGH).
Nella versione con autofocus, la messa a fuoco automatica richiede 3.3V sul pin 24 del connettore della camera e una libreria dedicata. Senza questi elementi, la camera funziona con messa a fuoco fissa.
Il modulo non è consigliato per streaming continuo 24/7. Se avete bisogno della versione con OV2640, contattateci prima di effettuare l'ordine.
Specifiche:
Tensione di alimentazione: 5 V (pin di alimentazione)
Corrente assorbita (Flash LED spento): 180 mA a 5 V
Corrente assorbita (Flash LED acceso, luminosità massima): 310 mA a 5 V
Corrente assorbita (Deep-sleep): 6 mA a 5 V, minimo
Corrente assorbita (Modem-sleep): 20 mA a 5 V, minimo
Corrente assorbita (Light-sleep): 6.7 mA a 5 V, minimo
Numero di pin: 16
Porti I/O: 9
WiFi: 802.11 b/g/n
Bluetooth: 4.2 LE
CPU: Dual core 32 bit, Xtensa LX6
Frequenza CPU: 80 - 240 MHz
Potenza di calcolo: fino a 600 DMIPS
Memoria integrata: 520 KB SRAM
Memoria esterna: 4 MB PSRAM
Supporto protocolli: UART / SPI / I2C / PWM / ADC / DAC
Camera inclusa: Sì, OV5640, 5 MP
Connettore camera: FPC
Formati immagini: JPEG, BMP, grayscale
Supporto upload immagine tramite WiFi: Sì
Supporto scheda TF: Sì, fino a 4 GB
Modalità basso consumo: Deep-sleep, Modem-sleep, Light-sleep
Stack software integrato: LwIP e FreeRTOS
Modalità operative: STA / AP / STA+AP
Supporto Smart Config / AirKiss: Sì
Supporto FOTA: Sì
SPI Flash: 32 Mbit
PSRAM: 4 Mbit
Programmatore: CH340G
Connettore programmatore: Type-C
Dimensioni: 42 x 27 x 12 mm
Layout:

| Element | Funzione |
|---|---|
| Camera OV5640 (sulla scheda ESP32-CAM) | Sensore ottico da 5 MP, collegato alla scheda tramite nastro FPC. |
| Slot scheda microSD (sulla scheda ESP32-CAM) | Memorizzazione locale delle immagini, scheda TF fino a 4 GB. |
| LED flash (sulla scheda ESP32-CAM) | LED di illuminazione, comandato da GPIO4. |
| Pulsante Reset (sulla scheda ESP32-CAM) | Reimposta il microcontrollore ESP32. |
| Header pin 5V (sulla scheda ESP32-CAM) | Alimentazione e pin usati dalla scheda microSD, marcati 5V, GND, IO12, IO13, IO15, IO14, IO2, IO4. |
| Header pin 3V3 (sulla scheda ESP32-CAM) | Pin di uscita 3.3 V, GPIO e UART, marcati 3V3, IO16, IO0, GND, VCC, U0R, U0T, GND. |
| Pulsante Download / IO0 (sul modulo CH340G) | Collega GPIO0 a GND per avviare la scheda ESP32-CAM in modalità caricamento codice. |
| Indicatore alimentazione (sul modulo CH340G) | LED acceso quando il modulo è alimentato tramite USB. |
| Interfaccia Micro USB (sul modulo CH340G) | Collegamento al computer per alimentazione e comunicazione seriale. |
| Pulsante Reset (sul modulo CH340G) | Reimposta la scheda ESP32-CAM collegata al modulo. |
| Circuito CH340G (sul modulo CH340G) | Convertitore USB-seriale, assicura la comunicazione UART con il computer. |
| Connettore per ESP32-CAM (sul modulo CH340G) | Due connettori femmina in cui si inserisce la scheda ESP32-CAM, con i pin 5V, GND, U0R, U0T e IO0 collegati al circuito CH340G. |
Pinout:

| Connettore | Pin | Funzione |
|---|---|---|
| Header sinistro | 5V | Alimentazione scheda, 5 V, consigliato minimo 2 A |
| Header sinistro | GND | Massa |
| Header sinistro | IO12 (GPIO12) | Data2 scheda SD, HSPI_Q, ADC2_5, pin di strapping MTDI |
| Header sinistro | IO13 (GPIO13) | Data3 scheda SD, HSPI_ID, ADC2_4 |
| Header sinistro | IO15 (GPIO15) | CMD scheda SD, HSPI_CS0, ADC2_3, pin di strapping MTDO |
| Header sinistro | IO14 (GPIO14) | CLK scheda SD, HSPI_CLK, ADC2_6, pin di strapping MTMS |
| Header sinistro | IO2 (GPIO2) | Data0 scheda SD, HSPI_WP, ADC2_2, pin di strapping |
| Header sinistro | IO4 (GPIO4) | Data1 scheda SD, HSPI_HD, ADC2_0, comando del LED flash |
| Header destro | 3V3 | Uscita 3.3 V dal regolatore della scheda |
| Header destro | IO16 (GPIO16) | U2_RXD, usato anche come Chip Select per PSRAM |
| Header destro | IO0 (GPIO0) | Selezione modalità di avvio, LOW al reset per la modalità di caricamento codice, usato anche come XCLK per la camera |
| Header destro | GND | Massa |
| Header destro | VCC | Uscita P_OUT, 3.3 V o 5 V, la scheda non va alimentata tramite questo pin |
| Header destro | U0R (GPIO3) | RX UART0, ricezione dati, usato per la programmazione |
| Header destro | U0T (GPIO1) | TX UART0, trasmissione dati, usato per la programmazione |
| Header destro | GND | Massa |
Utilizzo:
Montate la scheda ESP32-CAM sul modulo programmatore con CH340G, in modo che i pin 5V, GND, U0R, U0T e IO0 delle due schede si sovrappongano, oppure collegateli separatamente con fili se usate un altro convertitore USB-seriale.
Alimentate l'insieme con una sorgente stabile da 5 VDC, minimo 2 A, applicata al pin 5V e GND della scheda ESP32-CAM, ad esempio tramite un adattatore di rete con presa DC e un adattatore DC-terminal con morsetti a vite. Non alimentate la scheda dall'uscita a 3.3 V del convertitore USB-seriale e non usate il pin VCC come ingresso di alimentazione, poiché è un'uscita.
Montate un dissipatore sul retro della camera OV5640, fissato con nastro o pad termoconduttivo, e assicurate una buona ventilazione intorno alla scheda, poiché la camera OV5640 si riscalda molto durante il funzionamento, comportamento normale per questa combinazione scheda-camera e non un difetto. Evitate di usare il modulo in contenitori chiusi, senza circolazione d'aria, ed evitate lo streaming continuo per lunghi periodi.
Scaricate e installate il driver CH340G adatto al vostro sistema operativo dalla sezione Download della pagina prodotto, poiché la scheda potrebbe essere incompatibile con l'ultima versione del driver CH340 del 2023.
In Arduino IDE aggiungete le schede ESP32 da File -> Preferences, inserendo in Additional Boards Manager URLs l'indirizzo https://dl.espressif.com/dl/package_esp32_index.json, quindi installate il pacchetto "esp32 by Espressif Systems" da Tools -> Board -> Boards Manager.
Selezionate la scheda "AI Thinker ESP32-CAM" da Tools -> Board -> ESP32 e aprite l'esempio CameraWebServer da File -> Examples -> ESP32 -> Camera.
Nel codice, lasciate attiva la definizione CAMERA_MODEL_AI_THINKER e compilate il nome della rete WiFi e la password nelle variabili ssid e password.
Preparate un cavo Dupont femmina-femmina prima di caricare il programma, per poter collegare GPIO0 a GND se necessario.
Per il caricamento del codice, tenete premuto il pulsante Download sul modulo CH340G mentre iniziate l'upload, oppure, se il modulo non ha questo pulsante, collegate GPIO0 a GND con il cavo Dupont, alimentate la scheda, caricate il codice, quindi scollegate il collegamento e alimentate di nuovo la scheda per tornare al funzionamento normale.
Se il caricamento del codice non riesce, verificate che sia selezionato Flash Mode DIO in Tools -> Flash Mode e riprovate.
Dopo il messaggio di conferma del caricamento, premete il pulsante Reset, aprite il Monitor Seriale a 115200 baud e attendete la connessione alla rete WiFi, con l'indirizzo IP e le porte del server visualizzati nella finestra, come mostrato sotto.
Aprite un browser e accedete all'indirizzo IP mostrato nel Monitor Seriale, seguito dalla porta del server, per vedere il flusso video live e regolare i parametri della camera, in una pagina simile a quella dell'immagine qui sotto.
Per lo streaming continuo scegliete una risoluzione ridotta, ad esempio SVGA o HD, e il formato JPEG, mentre la risoluzione massima usatela solo per singole fotografie.
Per acquisizioni periodiche, spegnete il sensore tra uno scatto e l'altro portando GPIO32 a livello HIGH, per ridurre il riscaldamento della camera e il consumo.
Se la scheda è dotata della versione di camera con autofocus, la funzione di messa a fuoco automatica richiede 3.3 V sul pin 24 del connettore della camera e una libreria dedicata. Senza questa alimentazione e libreria, la camera funziona con messa a fuoco fissa.
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].
/*
ESP32-CAM OV5640 5MP - camera self test
Board: AI Thinker ESP32-CAM (Tools > Board > ESP32 > AI Thinker ESP32-CAM)
Board package: esp32 by Espressif Systems, installed from Boards Manager
Additional Boards Manager URL: https://dl.espressif.com/dl/package_esp32_index.json
Libraries: none to install separately, esp_camera.h is part of the esp32 board package
Wiring: power the board on the 5V and GND pins with a stable 5V / 2A supply,
program it through U0R, U0T, IO0 and GND using the included ESP32-CAM-MB CH340G programmer
This sketch does not use WiFi, it only checks that the OV5640 camera initializes
and captures frames correctly, printing the result on the Serial Monitor
*/
#include "esp_camera.h"
// Camera pin map for the AI Thinker ESP32-CAM board
#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
#define FLASH_LED_GPIO_NUM 4
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("ESP32-CAM OV5640 self test starting");
// Keep the flash LED off during the test
pinMode(FLASH_LED_GPIO_NUM, OUTPUT);
digitalWrite(FLASH_LED_GPIO_NUM, LOW);
// Report whether PSRAM is detected, required for larger frame buffers
if (psramFound()) {
Serial.println("PSRAM detected");
} else {
Serial.println("PSRAM not detected, using smaller frame size");
}
// Camera configuration structure
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.pixel_format = PIXFORMAT_JPEG;
config.frame_size = psramFound() ? FRAMESIZE_SVGA : FRAMESIZE_QVGA;
config.jpeg_quality = 12;
config.fb_count = psramFound() ? 2 : 1;
// Initialize the camera and report the result
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init FAILED with error 0x%x\n", err);
} else {
Serial.println("Camera init OK");
}
}
void loop() {
// Capture one frame every 5 seconds and print its size
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Capture failed, no frame buffer");
} else {
Serial.printf("Frame captured: %u x %u pixels, %u bytes JPEG\n",
fb->width, fb->height, fb->len);
esp_camera_fb_return(fb);
}
delay(5000);
}
La scheda ESP32-CAM con fotocamera OV5640 da 5 MP è una scheda di sviluppo ESP32 completa, con microcontrollore, fotocamera, slot per schede microSD e antenna sulla stessa scheda. È pensata per progetti di streaming video, sorveglianza, fotografia attivata da eventi e altre applicazioni IoT che hanno bisogno di un'immagine inviata via WiFi a uno smartphone, a un computer o a un server locale.
Trattandosi di una scheda ESP32, il tutorial usa direttamente la scheda ESP32-CAM, programmata in Arduino IDE come "AI Thinker ESP32-CAM", insieme al modulo programmatore CH340G incluso nel kit. Non serve nessun'altra scheda di sviluppo.

Come funziona:
La fotocamera OV5640 invia l'immagine all'ESP32 tramite un bus parallelo a 8 bit (pin D0-D7), accompagnato dai segnali di sincronizzazione PCLK, VSYNC e HREF e dal bus SCCB compatibile I2C (SIOD/SIOC), attraverso cui il microcontrollore configura la risoluzione, l'esposizione e il bilanciamento del bianco del sensore. L'ESP32 acquisisce i frame nella memoria PSRAM esterna da 4 MB, li comprime in formato JPEG usando l'encoder hardware integrato e li rende disponibili tramite un server HTTP avviato sul WiFi, all'indirizzo IP ricevuto dal router.
La risoluzione scelta nel codice, per esempio SVGA (800x600) o VGA (640x480), determina la dimensione di ogni frame JPEG e quindi la velocità di trasmissione via WiFi. Per questo, per un flusso video continuo si usa una risoluzione più bassa, mentre la risoluzione massima del sensore OV5640, 2592x1944 (5 MP), si usa solo per le foto singole.
Collegamento:
La scheda ESP32-CAM si alimenta separatamente a 5 V, mentre la programmazione avviene tramite il modulo programmatore CH340G, che collega i pin seriali della scheda alla porta USB del computer.
| Pin del prodotto | Si collega a | Funzione |
|---|---|---|
| 5V | Uscita + dell'adattatore DC-terminal, alimentato dall'alimentatore da 5 VDC 2 A | Alimentazione della scheda ESP32-CAM |
| GND (vicino a 5V) | Uscita - dell'adattatore DC-terminal | Massa dell'alimentazione |
| IO0 | IO0 sul modulo programmatore CH340G | Selezione della modalità di caricamento del codice |
| GND (vicino a U0T) | GND sul modulo programmatore CH340G | Massa comune con il programmatore |
| U0R | U0R sul modulo programmatore CH340G | Ricezione dati seriali (RX) |
| U0T | U0T sul modulo programmatore CH340G | Trasmissione dati seriali (TX) |
Tutta l'elettronica della scheda lavora a 3.3 V e il modulo programmatore con CH340G rispetta lo stesso livello logico sui pin seriali, quindi non serve un convertitore di livello tra le due schede. Il pin VCC della scheda ESP32-CAM è un'uscita a 3.3 V o 5 V e non deve essere usato per alimentare la scheda. L'alimentazione a 5 V, minimo 2 A, è obbligatoria per il funzionamento stabile della fotocamera OV5640. Una porta USB di un computer spesso non basta per il funzionamento normale, anche se può essere usata temporaneamente solo per la programmazione.
Scheda e librerie:
Selezionate la scheda "AI Thinker ESP32-CAM" dal menu Tools > Board, dopo aver installato il pacchetto "esp32 by Espressif Systems" da Tools > Board > Boards Manager. Se il pacchetto non compare nell'elenco, aggiungete l'indirizzo https://dl.espressif.com/dl/package_esp32_index.json in File > Preferences, alla voce Additional Boards Manager URLs.
Non è necessario installare nessuna libreria aggiuntiva da Library Manager. Le librerie esp_camera.h, WiFi.h e WebServer.h fanno parte del pacchetto esp32 installato sopra.
Il codice:
Il codice inizializza la fotocamera con la mappatura dei pin del modello AI Thinker, si connette alla rete WiFi e avvia un semplice server HTTP con una pagina principale e un indirizzo da cui è possibile scaricare una foto in formato JPEG.
/*
ESP32-CAM OV5640 5MP - simple snapshot web server
Board: AI Thinker ESP32-CAM (install package "esp32 by Espressif Systems" from Boards Manager,
Additional Boards Manager URL: https://dl.espressif.com/dl/package_esp32_index.json)
Libraries: none to install separately, esp_camera.h, WiFi.h and WebServer.h are part of the esp32 board package
Wiring: camera and microSD pins are fixed on board, programming uses U0R, U0T, IO0 and GND
through the included ESP32-CAM-MB CH340G programmer, power is supplied on the 5V/GND pins
*/
#include "esp_camera.h"
#include <WiFi.h>
#include <WebServer.h>
// Camera pin map for the AI Thinker ESP32-CAM board
#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
#define FLASH_LED_GPIO_NUM 4
// WiFi credentials, replace with your own network
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
WebServer server(80);
// Serve a simple HTML page with a link to the snapshot
void handleRoot() {
String html = "<html><body><h1>ESP32-CAM OV5640</h1>";
html += "<p><a href=\"/capture\">Get snapshot</a></p></body></html>";
server.send(200, "text/html", html);
}
// Capture one JPEG frame and send it to the browser
void handleCapture() {
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
server.send(503, "text/plain", "Camera capture failed");
return;
}
server.sendHeader("Content-Disposition", "inline; filename=capture.jpg");
server.send_P(200, "image/jpeg", (const char *)fb->buf, fb->len);
esp_camera_fb_return(fb);
Serial.printf("Snapshot sent, size %u bytes\n", fb->len);
}
void setup() {
Serial.begin(115200);
Serial.println();
// Flash LED pin kept off at startup
pinMode(FLASH_LED_GPIO_NUM, OUTPUT);
digitalWrite(FLASH_LED_GPIO_NUM, LOW);
// Camera configuration structure
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.pixel_format = PIXFORMAT_JPEG;
// Use a larger frame and double buffering when PSRAM is available
if (psramFound()) {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_VGA;
config.jpeg_quality = 15;
config.fb_count = 1;
}
// Initialize the camera
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x\n", err);
return;
}
Serial.println("Camera initialized");
// Connect to WiFi
WiFi.begin(ssid, password);
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());
// Register HTTP routes and start the server
server.on("/", handleRoot);
server.on("/capture", handleCapture);
server.begin();
Serial.println("HTTP server started");
Serial.println("Open the IP address above in a browser, then click Get snapshot");
}
void loop() {
server.handleClient();
}
Come funziona il codice:
All'inizio del file sono definite le costanti dei pin della fotocamera, PWDN_GPIO_NUM, RESET_GPIO_NUM, XCLK_GPIO_NUM, SIOD_GPIO_NUM, SIOC_GPIO_NUM, Y2_GPIO_NUM-Y9_GPIO_NUM, VSYNC_GPIO_NUM, HREF_GPIO_NUM e PCLK_GPIO_NUM, con i valori fissi usati sulla scheda AI Thinker, più FLASH_LED_GPIO_NUM per il LED su GPIO4. Le variabili ssid e password devono essere compilate con i dati della rete WiFi, mentre l'oggetto server, di tipo WebServer, viene creato sulla porta 80.
Nella funzione setup, dopo l'avvio della comunicazione seriale, la struttura camera_config_t viene compilata con i pin della fotocamera, il formato immagine PIXFORMAT_JPEG e, in base al risultato di psramFound, la risoluzione FRAMESIZE_SVGA con due buffer di frame quando la scheda ha la PSRAM, oppure FRAMESIZE_VGA con un solo buffer in caso contrario. La funzione esp_camera_init avvia la fotocamera e, in caso di errore, il messaggio viene mostrato su Serial. Segue la connessione al WiFi con WiFi.begin, un'attesa in un ciclo finché WiFi.status restituisce WL_CONNECTED, e la registrazione delle due rotte, handleRoot per la pagina principale e handleCapture per la foto, prima di avviare server.begin.
La funzione handleCapture richiede un nuovo frame con esp_camera_fb_get, lo invia al browser con server.send_P usando il tipo image/jpeg, quindi libera la memoria del frame con esp_camera_fb_return. Nella funzione loop, server.handleClient viene chiamata continuamente per rispondere alle richieste ricevute via HTTP.
Risultato:
Sul Monitor Seriale, a 115200 baud, si vede la connessione alla rete WiFi e l'indirizzo IP ricevuto dalla scheda, poi la conferma dell'avvio del server HTTP. Accedendo con un browser all'indirizzo IP mostrato, seguito da /capture, si scarica una foto scattata in quel momento dalla fotocamera OV5640.
Camera initialized
Connecting to WiFi.......
WiFi connected, IP address: 192.168.0.115
HTTP server started
Open the IP address above in a browser, then click Get snapshot
Snapshot sent, size 48213 bytes
Snapshot sent, size 51042 bytes
Problemi frequenti:
Non compare nulla sul Monitor Seriale: verificate che la velocità selezionata nel Monitor Seriale sia 115200 baud e che il modulo programmatore sia collegato correttamente, con U0R e U0T non invertiti.
Il caricamento del codice fallisce con un messaggio di connessione o di sincronizzazione: tenete premuto il pulsante Download oppure collegate GPIO0 a GND prima di iniziare il caricamento, e verificate che sia selezionato Flash Mode DIO da Tools > Flash Mode.
La fotocamera non si avvia e su Serial compare un errore di inizializzazione: controllate l'alimentazione a 5 V, minimo 2 A, perché un alimentatore debole provoca reset (brownout) al momento dell'inizializzazione della fotocamera.
L'immagine è bianca, scura o ha delle strisce: lasciate alla fotocamera qualche secondo per regolare automaticamente l'esposizione e il bilanciamento del bianco, e verificate che il flat FPC della fotocamera sia inserito correttamente nel connettore.
La scheda si resetta da sola durante lo streaming: riducete la risoluzione e la qualità JPEG nel codice e controllate di nuovo l'alimentatore, perché un consumo di picco superiore a 300 mA con un alimentatore debole provoca reset ripetuti.
La fotocamera diventa molto calda al tatto: è un comportamento normale del sensore OV5640, ma montate obbligatoriamente un dissipatore sul retro ed evitate lo streaming continuo per lunghi periodi.
Limiti e consigli:
La risoluzione massima di 5 MP del sensore OV5640 è utile per le foto, non per lo streaming continuo, dove la velocità di trasmissione via WiFi e la memoria PSRAM limitano di fatto la risoluzione a SVGA o HD. Il modulo non è consigliato per il funzionamento ininterrotto 24/7, e per i progetti con scatti periodici è opportuno spegnere la fotocamera tra una foto e l'altra, usando GPIO32, per ridurre il riscaldamento e il consumo. Partendo da questo codice, la scheda può essere ampliata con il salvataggio su scheda microSD, il rilevamento del movimento con un sensore PIR esterno su uno dei pin liberi, oppure l'integrazione in un sistema di sorveglianza più grande con più fotocamere ESP32-CAM.