ESP32-CAM: Guida Completa al Programmatore USB per Prototipazione Avanzata

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.

Lascia un commento

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

Menu