ESP32-CAM: piedinatura, specifiche e configurazione dell’Arduino IDE – 1

Spread the love

ESP32-CAM (clone): pinout, specs, wiring and Arduino IDE configuration

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 - Selectable - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 CP2104 CH340 - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S

Specifiche

Ecco la tabella di tutte le unità funzionali di questo microcontrollore.

Function Block diagram Espressif esp32 Wi-Fi Bluetooth Microcontroller
Function Block diagram Espressif esp32 Wi-Fi Bluetooth Microcontroller
  • 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:
  • 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

ESP32 CAM pinout
ESP32 CAM pinout

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.

CH340G Module It is my forced choice

Qui i due moduli AliExpress USB to TTL CH340G - AliExpress USB to TTL FT232RL


FT232RL Module

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:

esp32-cam upload sketch connection schema 5v
esp32-cam upload sketch connection schema 5v

Ecco lo schema di connessione utilizzando la tensione a 3.3v.

esp32-cam upload sketch connection schema 3v3
esp32-cam upload sketch connection schema 3v3

Come puoi vedere c’è un ponticello da GPIO0 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.

esp32-cam upload sketch and normal connection schema 5v external power
esp32-cam upload sketch and normal connection schema 5v external power

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 modePower
Pausa80mHa
In streaming100~160mAh
In streaming con flash270mAh

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”

Arduino IDE esp32 additional board manager
Arduino IDE esp32 additional board manager

Quindi devi aggiungere una nuova scheda in Boards Manager

Select board manager

Le schede da selezionare sono l’esp32

Arduino IDE esp32 boards manager
Arduino IDE esp32 boards manager

Ora puoi selezionare AI Thinker ESP32-CAM Dev Module

ArduinoIDE select ESP32-CAM AI Thinker
ArduinoIDE select ESP32-CAM AI Thinker

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

ArduinoIDE select ESP32-CAM AI Thinker IP Camera Web Server
ArduinoIDE select ESP32-CAM AI Thinker IP Camera Web Server

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

ESP32-cam IP camera open Web interface
ESP32-cam IP camera open Web interface

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:

ESP32-cam IP camera face recognition intruder detection
ESP32-cam IP camera face recognition intruder with malicious face detection

ma se fai l'”enroll” del tuo viso (con il relativo bottone) diventi una soggetto sicuro.

ESP32-cam IP camera face recognition enrolled people face
ESP32-cam IP camera face recognition after the enrolling of the face

Grazie

Firmware con funzionalità aggiuntive.


Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *