ESP32-CAM Development Board รจ una speciale versione della popolare ESP-32, quindi una scheda di sviluppo e prototipazione basata su un SoC (System On Chip) ESP32, equipaggiata con una videocamera da 2MPixel (OV2640) di cui รจ possibile impostare il frame-rate, nonchรฉ provvista di uno slot per una memoria miniSD fino a 4GByte.
Sulla scheda รจ presente un LED ad alta luminositร che puรฒ essere impiegato come flash nelle fotografie o come illuminatore per la scena da riprendere, ma vi sono anche alcune linee GPIO configurabili da firmware per interfacciarsi con il mondo esterno, oltre alle connessioni per le piรน comuni interfacce di comunicazione.
Giร in passato abbiamo ospitato nelle pagine della nostra rivista diverse applicazioni con questo modulo ed ora torniamo sullโargomento proponendo un progetto che interesserร a molti di voi: un programmatore dedicato, interfacciabile via USB, che permette di sfruttare al meglio le librerie che la Espressif ha rilasciato per la programmazione attraverso lโIDE di Arduino, rendendo cosรฌ piรน accessibile il modulo a chi un tempo si fermava di fronte alla necessitร di procurarsi un sistema di sviluppo dedicato.
Il programmatore รจ sostanzialmente una scheda progettata per ospitare il modulo ESP32-CAM e interfacciarla ad un Personal Computer tramite USB per caricare gli sketch ed eventualmente un bootloader; questa board, che possiamo considerare un adattatore sia fisico che elettronico, permette di adattare lโinterfaccia UART nativa del modulo a quella piรน comune e versatile che รจ la USB, gestendo alcuni segnali di controllo come RTS e DTR.
Praticamente implementa quello che altrimenti andrebbe realizzato interfacciando la porta seriale (TXD/RXD) dellโESP32-CAM con uno dei classici moduli convertitori USB to serial, risolvendo perรฒ a bordo anche il problema dellโadattamento dei livelli di tensione, che in alcuni moduli (per esempio lโFT782M della Futura Elettronica) non รจ possibile (cioรจ sul lato seriale lavorano a 0/5V, quindi su standard TTL) mentre in altri richiede lโimpostazione di jumper (UC00A della Futura Elettronica).
SCHEMA ELETTRICO
Vedremo meglio questi dettagli analizzando lo schema elettrico del circuito, proposto in cima a questa pagina e centrato sullโintegrato U1, che รจ un convertitore seriale/USB di tipo CH340C, molto diffuso perchรฉ utilizzato anche in alcune schede Arduino non originali.
Il CH340 รจ un chip di conversione dal bus USB alla classica porta seriale bidirezionale con linee TX ed RX. In modalitร interfaccia seriale, CH340 fornisce il set di segnali per i tradizionali modem da linea commutata, utilizzato per estendere lโinterfaccia seriale asincrona del computer o aggiornare direttamente il dispositivo affacciato con una seriale comune, mediante USB; per questo fa al caso nostro.
Il CH340 supporta la modalitร USB full-speed conforme alle specifiche USB versione 2.0 ed รจ molto semplice da utilizzare e configurare, in quanto necessita solo di un quarzo e di due capacitร esterni per il clock, ma puรฒ anche funzionare con lโoscillatore interno. Lโinterfaccia seriale hardware รจ di tipo full-duplex, imposta il buffer del ricetrasmettitore e supporta vari valori di baud-rate, da 50 bps a ben 2 Mbps.
Estrae e supporta il segnale di controllo della RS232 e quindi funziona da DTE (Data Terminal Equipment) disponendo dei segnali per il controllo dei comuni modem (DCE=Data Communication Equipment) che sono:
โข RTS (Request To send), uscita utilizzata dal DTE per richiedere al dispositivo collegato (tipicamente un DCE) lโinvio di dati; la linea RTS si connette alla CTS del dispositivo collegato;
โข DTR (Data Terminal Ready) utilizzato per indicare al DCE che il terminale รจ pronto alla comunicazione;
โข DCD (Data Carrier Detect) che indica quando รจ stata rilevata la portante che i dati modulano per la comunicazione;
โข RI (Ring Indicator) che i modem utilizzano per avvisare il computer (o comunque il DTE dellโapplicazione) dellโarrivo di una chiamata su linea commutata (PSTN);
โข DSR (Data Set Ready) impiegato per indicare al DTE che i dati sono pronti;
โข CTS (Clear To Send) che serve al DCE per comunicare al terminale (DTE) di essere pronto per lโinvio dei dati.
Di queste linee utilizziamo RTS e DTR, come vedete dallo schema elettrico, sebbene la loro gestione non sia affidata in toto allโESP32-CAM.
Naturalmente della porta UART del modulo usiamo il canale dati bidirezionale TX-RX.
Il lato USB dellโU1 รจ connesso al connettore USB Type-C (maschio da circuito stampato) per trasportare i segnali DP e DN del bus da e verso il convertitore.
Notate che avendo scelto un connettore USB tipo C e disponendo di un integrato che supporta lโUSB 2.0, abbiamo configurato la connessione per lโutilizzo secondo questo protocollo e quindi vedete che i contatti DP1 e DP2 sono uniti e cosรฌ pure DN1 e DN2.
Lโunione dei pin รจ dovuta al fatto che sono sdoppiati perchรฉ per come sono disposti, qualunque sia il verso di inserimento del connettore femmina volante, la polaritร rimane invariata.
Inoltre abbiamo portato a massa i contatti CC1 e CC2 del connettore, sia pure attraverso due resistenze di limitazione della corrente (rispettivamente R7 ed R8).
Ricordiamo che nello standard USB-C i pin CC1 e CC2 consentono la configurazione del canale dati (si chiamano, infatti, Configuration Channel) e, nello specifico, lโimpostazione della modalitร di trasporto dei dati, che nel nostro caso รจ quella conforme allโUSB 2.0.
Lโintegrato CH340 si alimenta con una tensione continua di valore compreso fra 3,3 V e 5V.
Nel nostro circuito viene fatto funzionare con il potenziale fornito dal pin 5 (OUT) del regolatore integrato U2, un LDO siglato MIC5317-3.3, che partendo dalla tensione dโingresso prelevata dalla linea VBUS del connettore USB-C (quindi 5 Vcc) ricava 3,3V ben stabilizzati.
Notate che, sebbene lโintegrato preveda la possibilitร di porlo in standby o accenderlo tramite lโapposita linea EN, in questo caso lo manteniamo sempre attivo e ciรฒ lo facciamo connettendo fisso il suo pin 3 al VIN (1).
La linea di alimentazione a 3,3V come del resto quella a 5V VBUS, viene adeguatamente filtrata dai disturbi impulsivi mediante i condensatori ceramici C1 e C3.
Andiamo ora sul lato seriale RS232 del CH341 e vediamo che il chip rende disponibili il canale dati formato dalle linee TX (uscita dati verso lโESP32-CAM) ed RX (ingresso dati in arrivo dallโESP32-CAM) oltre ai criteri di controllo della comunicazione che servono a sincronizzare il flusso dei dati.
Nello specifico il nostro circuito fa uso dei soli RTS e DTR, interconnessi attraverso una rete formata da due transistor bipolari e disposti in modo da interagire con il modulo ESP32-CAM che prenderร posto nel connettore omonimo (lo vedete a destra nello schema elettrico).
Il circuito formato dai transistor ha il duplice scopo di accendere il modulo ESP32-CAM mediante il MOSFET a canale N siglato Q1.
Essendo questโultimo di tipo enhancement-mode, il suo terminale di drain entrerร praticamente in contatto con il source quando tra gate e questโultimo verrร a trovarsi una tensione di almeno 3 volt, accendendo il modulo perchรฉ in tale condizione le linee Vss verranno portate a massa.
Questa condizione si verificherร ogniqualvolta la linea DTR si troverร a livello basso e la RTS ad uno logico, quindi durante lโinvio dei dati, giacchรฉ lโRTS viene attivato quando รจ necessario inviare una richiesta di invio dati allโESP32-CAM e il DTR รจ invece a zero in tale condizione.
Per comprendere meglio la cosa considerate che i segnali di controllo sono negati, quindi attivi a zero.
Analizziamo dunque le varie combinazioni possibili: quando DTR รจ a zero logico e RTS a livello alto, i transistor T1 e T2 sono interdetti entrambi, perchรฉ il primo (che รจ un NPN) ha lโemettitore positivo rispetto alla base ed il secondo (PNP) ha la base positiva rispetto allโemettitore.
In queste condizioni il MOSFET รจ in stato di ON perchรฉ il suo gate viene portato a 3,3V (livello alto) dalla resistenza R2, quindi il suo canale รจ acceso.
Se il pin RTS passa a zero anchโesso, i transistor BJT sono ancora interdetti perchรฉ entrambi hanno una Vbe nulla, essendo i loro terminali di base ed emettitore equipotenziali.
Lo stesso accade se RTS e DTR sono tutti e due a livello logico alto.
Invece se RTS assume lo stato zero quando DTR รจ a livello alto, la base del T1 diviene positiva rispetto allโemettitore ed il transistor conduce, trascinando a poche centinaia di millivolt il gate del MOSFET, il quale andrร quindi in interdizione lasciando spegnere il modulo ESP32-CAM.
Anche T2 conduce, perchรฉ la sua base diviene negativa rispetto allโemettitore.
Dunque, il modulo viene acceso quando almeno DTR รจ a livello basso, ovvero quando da USB il computer comunica allโESP32-CAM di essere pronto a comunicare dati, a prescindere da quale sia lo stato del Request To Send.
La funzione dei due transistor รจ quindi questa: T1 serve a controllare lโaccensione del modulo ESP32-CAM intervenendo sulla polarizzazione di gate del MOSFET, quindi ogni volta che rimane interdetto (RTS a livello alto o DTR basso) il modulo viene alimentato, mentre se va in conduzione (RTS a livello basso e DTR nello stato logico alto) lo stesso viene privato della connessione di massa e si spegne.
Quanto al T2, funziona da interruttore statico per controllare la linea IO0, facente capo al pin 14 del connettore header della ESP32-CAM, la quale durante la programmazione deve essere tenuta a livello basso.
Quindi durante il periodo di caricamento del firmware il T2 deve rimanere interdetto, mentre negli altri momenti devโessere in conduzione (condizione che si verifica quando il RTS รจ a zero logico e il DTR ad 1) per portare ad 1 logico (+3,3V) la predetta linea IO0.
I due pin U0TXD (TX) e U0RXD (RX) che permettono di caricare il nostro codice sul modulo ESP32-CAM sono esposti sul connettore esterno, sul quale รจ presente anche una seconda seriale U2RXD (RX) utilizzabile nel caso in cui serva ricevere dati tramite seriale.
Tali pin sono anche utilizzabili come GPIO, rispettivamente GPIO1 (UOTXD) e GPIO3 (UORXD) nelle applicazioni in cui non occorra utilizzare lโUART.
Per quanto riguarda la gestione da parte del Personal Computer, il chip CH340 utilizza dei driver software compatibili con il chip CH341, quindi la nostra scheda verrร riconosciuta dal sistema operativo Windows utilizzando direttamente il driver del CH341.

La scheda ospita lโESP32-CAM grazie a due strip femmina.
REALIZZAZIONE PRATICA

Il modulo ESP32-CAM dotato di pin-strip, visto dallโalto.
Ricordiamo che la ESP32-CAM va orientata in modo che il lato dello zoccolo per SD-Card sia rivolto dalla parte del connettore USB Type C della demoboard, come mostrato chiaramente dalla Fig. 1 in questa pagina.
Una volta completate le saldature e verificato che sia tutto a posto, la scheda del programmatore รจ pronta per assolvere alla propria funzione: potete quindi inserirvi la vostra ESP32-CAM, badando allโorientamento (state attenti che gli strip femmina sono in ugual numero e disposti parallelamente, quindi il modulo potrebbe anche entrare girato) connetterla ad un Personal Computer mediante un cavo USB/A-microUSB e iniziare a gestire i firmware, ovvero a programmare il modulo.
Rammentiamo che sulla linea di alimentazione, quindi dal connettore USB-C, lโinsieme della scheda del programmatore e dellโESP32-CAM assorbe un massimo di 360 milliampere: questa corrente puรฒ essere erogata da qualsiasi porta USB, ragion per cui non fatevi problemi a collegare il programmatore a un PC dotati di comuni porte USB mediante un adattatore, giacchรฉ non รจ obbligatorio utilizzare porte di tipo USB-C.
I driver per il converter USB/seriale si possono scaricare da Internet alla pagina www.wch-ic.com/downloads/CH341SER_EXE.html.

LโESP32-CAM va inserita in modo che il socket per SD e il connettore USB siano dallo stesso lato.