Dettagli ESP32-CAM
Questo dispositivo è molto potente con WIFI, Bluetooth ma soprattutto una fotocamera da 2 Mp.
Qui la nostra ESP32-CAM ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S
Specifiche
Ecco la tabella di tutte le unità funzionali di questo microcontrollore.
- Processore:
- CPU: microprocessore Xtensa dual-core LX6 a 32 bit, funzionante a 240 MHz e con prestazioni fino a 600 DMIPS
- Coprocessore a bassissima potenza (ULP)
- Memoria: SRAM da 520 KiB, PSRAM esterna da 4Mb
- Connettività senza fili:
- Wi-Fi: 802.11 b/g/n
- Bluetooth: v4.2 BR/EDR e BLE (condivide la radio con Wi-Fi)
- Supporta fotocamere OV2640 e OV7670, flash integrato
- Supporta TF card
- Sicurezza:
- Funzionalità di sicurezza standard IEEE 802.11 tutte supportate, inclusi WFA, WPA/WPA2 e WAPI
- Avvio sicuro
- Crittografia flash
- OTP a 1024 bit, fino a 768 bit per i clienti
- Accelerazione hardware crittografica: AES , SHA-2 , RSA , crittografia a curva ellittica (ECC), generatore di numeri casuali (RNG)
- Gestione energetica:
- Regolatore interno a bassa caduta
- Dominio di potenza individuale per RTC
- 5μA di corrente in hibernazione
- Sveglia tramite GPIO, timer, misurazioni ADC, interrupt con sensore tattile capacitivo
Piedinatura
Questo dispositivo è molto potente, ma è possibile utilizzare un numero di pin molto basso, la maggior parte viene utilizzata per la fotocamera e parte per l’SD.
Utilizzo
Questo dispositivo non ha installato un convertitore da USB a TTL, quindi è necessario un programmatore FTDI, normalmente uso un modello base, ma in questo caso è più semplice utilizzare un modulo con possibilità di alimentazione integrata.
Esiste un modulo FT232RL o FT232 più costoso, ma un CH340G o CH340 funziona molto bene comunque.
Qui i due moduli USB to TTL CH340G - USB to TTL FT232RL
Schema di connessione
Come dicevo l’ESP32-CAM non ha una porta USB integrata con convertitore UART, quindi devi usare il tuo FTDI, ecco un esempio di schema di connessione al pin 5v:
Ecco lo schema di connessione utilizzando la tensione a 3.3v.
Come puoi vedere c’è un ponticello da GPIO0
e GND
, questo è necessario per caricare lo sketch, quando lo schizzo viene caricato rimuovilo per utilizzare il dispositivo.
Puoi connetterti (e configurare l’FTDI) al pin 3.3v o al pin 5v, funziona correttamente con tutte le configurazioni.
Se la potenza non è sufficiente si riceve un “Brownout detector was triggered
“
Ma per usarlo è necessario collegare un’alimentazione esterna come questa.
L’errore “Brownout detector was triggered
” può essere bypassato, ma spiego meglio poi.
Senza streaming il dispositivo consuma 80mAh e durante lo streaming il contenuto è di circa 100~160mAh, se si attiva il flash può aumentare fino a 270mAh.
Operation mode | Power |
---|---|
Pausa | 80mHa |
In streaming | 100~160mAh |
In streaming con flash | 270mAh |
Configura il tuo IDE
Per prima cosa devi aggiungere il descrittore dell’URL esp32 al tuo IDE
https://dl.espressif.com/dl/package_esp32_index.json
Vai su File -> Preferenze e aggiungi l’URL su ” Additional Boards Manager URLs”
Quindi devi aggiungere una nuova scheda in Boards Manager
Le schede da selezionare sono l’esp32
Ora puoi selezionare AI Thinker ESP32-CAM Dev Module
E caricare il tuo sketch.
Modificare lo sketch CameraWebServer per la versione CLONE dell’ESP32-CAM
C’è un bellissimo esempio per ESP32-CAM sul pacchetto della scheda ESP32 predefinito
Se acquisti ESP32-CAM generico sul mercato cinese o da qualche fornitore, probabilmente dovrai modificare la configurazione in questo modo.
Per prima cosa devi decommentare il modello clone corretto:
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
Brownout detector was triggered
Dopo il caricamento potresti ricevere un errore nel monitor seriale con questo messaggio, questo significa che l’alimentatore che usi offre sufficiente potenza.
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Brownout detector was triggered
puoi provare a connetterti a un alimentatore esterno o aggiungere questa linea alla configurazione con l’inclusione corretta
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
[...]
setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
ricordati di impostare SSID e passwd
const char* ssid = "<YOUR-SSID>";
const char* password = "<YOUR-PASSWD>";
Il codice completo dello sketch risulta così.
#include "esp_camera.h"
#include <WiFi.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
const char* ssid = "<YOUR-SSID>";
const char* password = "<YOUR-PASSWD>";
void startCameraServer();
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
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;
//init with high specs to pre-allocate larger buffers
if(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif
// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
sensor_t * s = esp_camera_sensor_get();
//initial sensors are flipped vertically and colors are a bit saturated
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1);//flip it back
s->set_brightness(s, 1);//up the blightness just a bit
s->set_saturation(s, -2);//lower the saturation
}
//drop down frame size for higher initial frame rate
s->set_framesize(s, FRAMESIZE_QVGA);
#if defined(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
}
void loop() {
// put your main code here, to run repeatedly:
delay(10000);
}
Se è tutto ok ricevi questo messaggio sull’output seriale:
.
WiFi connected
Starting web server on port: '80'
Starting stream server on port: '81'
Camera Ready! Use 'http://192.168.1.171' to connect
E qui il risultato nella pagina web per l’url http://192.168.1.171
ma puoi trovare lo stream IP su http://192.168.1.171:81/stream (da usare con altri programmi).
Questo esempio di base ha alcune funzionalità interessanti come la gestione del riconoscimento facciale, puoi abilitare il riconoscimento facciale e prima vieni rilevato come “intruso” dannoso:
ma se fai l'”enroll” del tuo viso (con il relativo bottone) diventi una soggetto sicuro.
Grazie
- ESP32-CAM: piedinatura, specifiche e configurazione dell’Arduino IDE
- ESP32-CAM: aggiornare CameraWebServer con la funzionalità di flash
- ESP32-CAM: controllare il CameraWebServer dalla tua pagina web
Firmware con funzionalità aggiuntive.