ESP32-CAM: streaming video e snapshot HTTP

Published on 02/05/2026 ESP32

ESP32-CAM in breve

L'ESP32-CAM è un modulo low-cost (~€8) con sensore OV2640 da 2 MP, slot microSD e connessione WiFi. È perfetto per videocitofoni, webcam su modellini, stampanti 3D, nidi di uccelli e progetti di sorveglianza domestica.

Cablaggio per la programmazione

L'ESP32-CAM non ha USB. Per programmarla serve un adattatore FTDI USB-seriale a 3.3V:

  • FTDI VCC 5V → ESP32-CAM 5V
  • FTDI GND → ESP32-CAM GND
  • FTDI TX → ESP32-CAM U0R (RX)
  • FTDI RX → ESP32-CAM U0T (TX)
  • IO0 → GND (solo durante il flash, poi rimuovere)

Premi RESET sull'ESP32-CAM mentre carichi lo sketch. A fine upload togli IO0-GND e premi di nuovo RESET per avviare il programma.

Sketch CameraWebServer

In Arduino IDE: File → Esempi → ESP32 → Camera → CameraWebServer. Modifica le credenziali WiFi e seleziona la board AI-Thinker ESP32-CAM:

const char* ssid = "TUA_RETE";
const char* password = "TUA_PASSWORD";

// Decommentare la board corretta:
#define CAMERA_MODEL_AI_THINKER  // Default Banggood/AliExpress
//#define CAMERA_MODEL_M5STACK_PSRAM

Endpoint disponibili

Dopo il boot, il monitor seriale stampa l'IP. Apri il browser e visita gli endpoint:

  • http://<ip>/ — pannello web con anteprima e controlli (esposizione, risoluzione, qualità JPEG)
  • http://<ip>:81/stream — streaming MJPEG diretto, integrabile in tag <img>
  • http://<ip>/capture — singolo JPEG (per snapshot via cron)

Integrare lo stream in una pagina HTML

<img src="http://192.168.1.50:81/stream" width="640">

Apri la pagina su qualsiasi dispositivo della rete: vedrai il flusso video in tempo reale con ~10 fps a 640×480.

Salvare snapshot su microSD

Inserisci una microSD da max 32 GB formattata FAT32. Sketch minimo per salvare ogni 60 secondi:

#include "esp_camera.h"
#include "FS.h"
#include "SD_MMC.h"

void setup() {
  // ... init camera ...
  SD_MMC.begin();
}

void loop() {
  camera_fb_t *fb = esp_camera_fb_get();
  String path = "/snap_" + String(millis()) + ".jpg";
  File file = SD_MMC.open(path, FILE_WRITE);
  file.write(fb->buf, fb->len);
  file.close();
  esp_camera_fb_return(fb);
  delay(60000);
}

Integrazione Home Assistant

Configurazione in configuration.yaml:

camera:
  - platform: mjpeg
    name: Citofono
    mjpeg_url: http://192.168.1.50:81/stream
    still_image_url: http://192.168.1.50/capture

L'ESP32-CAM apparirà come una camera nativa di Home Assistant con tutti i benefici (registrazioni, automazioni, notifiche).

Limiti e accortezze

  • Calore: il modulo scalda parecchio in streaming continuo. Aggiungi un dissipatore al chip ESP32.
  • Alimentazione: serve almeno 1A stabile a 5V. Alimentatori USB scadenti causano crash continui.
  • WiFi: solo 2.4 GHz. In ambienti rumorosi cala a pochi fps.
  • Sicurezza: lo sketch base non ha autenticazione. Mai esporre l'IP su internet senza VPN o proxy.