Gli
ESP32x hanno molte porte disponibili, che permettono
svariate possibilità. Per cui è utile avere una infarinatura
del loro utilizzo, e magari anche una tabella che a colpo
d'occhio permette di valutare l'uso migliore di ogni porta
(GPIO) disponibile. Le informazioni relative alle porte dei microcontroller sono tantissime. In questa pagina sono riportate solo informazioni estremamente sintetiche, ma che spero siano sufficienti per una introduzione all'uso della BDS. Si possono trovare preziose informazioni presso questo link (esterno al nostro sito): https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ Ecco quindi la tabella riassuntiva: |
Qui
pui visualizzare/scaricare il file in formato ".ods"
(foglio elettronico) oppure in formato ".pdf". |
|
Una
breve spiegazione della tabella delle GPIO |
La prima colonna riguarda la denominazione delle porte: "0" significa "GPIO0" e così via. Le successive tre colonne sono relative ai tre ESP32 disponibili per la basetta didattica e sperimentale (BDS): la seconda colonna riguarda un ESP32 a 38 pin; la terza un ESP32 a 30 pin; l'ultima un ESP32 CYD (Cheap Yellow Display), ovvero ESP32 + display LGVL. I riquadri verdi indicano le porte disponibili; quelli rossi, le porte che non si possono usare o mancanti in quella versione del microcontroller. |
Le
colonne "Input" e "Output" rappresentano
rispettivamente le porte che possono essere utilizzate in
ingresso e/o in uscita. Anche in questo caso, il colore verde indica che la porta può essere utilizza, mentre il colore rosso che non è disponibile. Il colore giallo indica che quella determinata porta può essere utilizzata, ma richiede attenzione, perchè in alcuni casi potrebbe dare alcuni problemi. Fortunatamente le porte "problematiche" sono poche:
|
La
colonna "Touch sensor" è relativa alla possibilità di
alcune potre di Input di permettere un contatto
capacitativo, ovvero toccando un cavetto elettrico collegato
a una porta "Touch", si comporta come se si premesse un
pulsante, quindi potrebbero essere inseriti in "pad"
capacitativi, sostituendo quindi pulsanti meccanici. Nota: nella pratica, ho notato che possono avere degli effetti negativi quando a queste porte sono connesssi dei pulsanti tradizionali: avvicinandosi potrebbero segnalare un contatto, ma dicscontinuo. In questi casi, è meglio usare il comando "INPUT_PULLUP", piuttosto che il semplice "INPUT", per evitare questo spiacevole inconveniente. La colonna successiva , "ADC", si riferisce alle 18 porte di input che hanno integrate un convertitore analogico/digitale, ovvero che permettono in ingresso dei sensori che emettono segnali analogici. Rispetto a un ESP8266 hanno grandi vantaggi: infatti quest'ultimo possiede una sola porta ADC, a 10 bit; mentre ESP32 ne fornisce be 18, a 12 bit (ovvero una gradazione di segnale con un intervallo da 0 a 4095). Nota 1: Le porte che iniziano con "ADC2", non possono esere usate quando si attiva il Wi-Fi. In questo caso utilizzare quelle che iniziano con "ADC1". Nota 2: i pin ADC di un ESP32 non hanno un comportamento lineare, per cui è bene tenerne conto, se si desidera ottenere dei valori precisi da un punto di vista quantitativo. La colonna "DAC" indica che ci sono due canali che convertono i segnali digitali in uscita in segnali di tensione analogica ad otto bit (da 0 a 255). Essi sono: DAC1 (GPIO25) e DAC2 (GPIO26). |
ESP32
dispone di 16 porte RTC. Le porte GPIO indirizzati
nel sottosistema RTC a basso consumo possono essere
utilizzati per riattivare l'ESP32 quando è
in modalità "deep sleep" e lil coprocessore Ultra Low Power
(ULP) è in esecuzione. Le porte disponibili sono: RTC_GPIO0 (GPIO36), RTC_GPIO3 (GPIO39), RTC_GPIO4 (GPIO34), RTC_GPIO5 (GPIO35) RTC_GPIO6 (GPIO25), RTC_GPIO7 (GPIO26),RTC_GPIO8 (GPIO33), RTC_GPIO9 (GPIO32), RTC_GPIO10(GPIO4),RTC_GPIO11(GPIO0), RTC_GPIO12 (GPIO2), RTC_GPIO13(GPIO15), RTC_GPIO14(GPIO13),RTC_GPIO15(GPIO12),RTC_GPIO16(GPIO14),RTC_GPIO17(GPIO27) La porta successiva "PWM" (Pulse Width Modulation) permete la modulazione dell'ampiezza degli impulsi in uscita ad 8 bit (da 0 a 255), comunemente usata per il controllo della velocità di rotazione di un motore elettrico, oppure la luminosità di un led. Tutte le porte in uscita, permettono di generare impulsi PWM. |
ESP32
ha due canali I2C, e ogni pin del microcontroller
può essere utilizzato com SDA (data) e SCL (a volte SCK)
(clock). Il protocollo I2C è molto utile, perchè permette di
connettere più periferiche I2C sulle stesse porte, purchè
abbiano indirizzi interni diversi, potendo creare delle
catene di sensori composto virtualmente di decine di
apparecchi. I GPIO di default per I2C sono: GPIO21 per SDA; GPIO22 per SCL. Nota: nel caso si desideri utilizzare altri pin con la libreria "wire.h", è necesario dichiarare nel programma: Wire.begin (SDA, SCL), dove al psto di SDA e SCL si dichiareranno le porte utilizzate. Il protocollo SPI (Serial Peripheral Interface) è un protocollo seriale sincrono di comunicazione tra microcontroller e periferiche. C'è un unico master (un microcontroller) e più slave, che possono essere sensori, attuatori, display, ma anche altri microcontroller. Essi possono comunicare contemporaneamente in modo bidirezionale, creando una complessa ed efficace rete di comunicazione. Gli acrronimi delle porte utilizzate:
Nota
1: nella mappa iniziale sono indicati le porte SPI
di default per VSPI e HSPI, ma alcuni microcontroller
usano porte diverse, oppure non ne anno di predefinite e
devono essere indicate nel programma. Verificare
attentamente. |
Gli
ESP32 possono utilizzare fino a tre interfacce UART: UART0,
UART1, UART2. Quante ne possono usare, dipende dal tipo di
ESP32 si sta usando (vedere la mappa relativa alle porte). Come per I2C e SPI, qualunque porta può essere utilizzata per UART; tuttavia ne sono state definite alcune come default:
|
Qualunque
porta può essere usata come Interrupts. Per innescare un evento con un sensore di movimento PIR (come esempio), si usano gli interrupt. Essi sono utili per far sì che le cose accadano automaticamente nei programmi dei microcontrollori e possono aiutare a risolvere i problemi di temporizzazione. Con gli interrupt non è necessario controllare costantemente il valore corrente di un pin, infatti quando viene rilevato un cambiamento, viene attivato un evento (ovvero viene chiamata una funzione). Per impostare un interrupt nell'IDE Arduino, utilizzare la funzione attachInterrupt(), che accetta come argomenti: il pin GPIO, il nome della funzione da eseguire e la modalità: attachInterrupt(digitalPinToInterrupt(GPIO), function, mode). Alcune porte vengono usate come strapping pin: GPIO 0 (deve essere BASSO (LOW) per entrare in modalità di avvio) GPIO 2 (deve essere fluttuante o BASSO durante l'avvio) GPIO 4 GPIO 5 (deve essere ALTO (HIGH)durante l'avvio) GPIO 12 (deve essere BASSO (LOW)durante l'avvio) GPIO 15 (deve essere ALTO (LOW)durante l'avvio). Essi servono per porre l'ESP32 in modalità bootloader o flashing. Sulla maggior parte delle schede di sviluppo con USB/seriale integrata, non è necessario preoccuparsi dello stato di questi pin. La scheda pone i pin nello stato corretto per la modalità flashing o boot. Porte alte (up) durante il boot. Alcuni GPIO cambiano il loro stato in HIGH o emettono segnali PWM all'avvio o al reset. Ciò significa che se hai output collegati a questi GPIO potresti ottenere risultati inaspettati quando l'ESP32 si resetta o si avvia. GPIO 1, GPIO 3, GPIO 5, GPIO 14, GPIO 15. Da GPIO 6 a GPIO 11 (collegato alla memoria flash SPI integrata nell'ESP32, se ne sconsiglia l'uso). |
E per
finire: Enable (EN) Enable (EN) è il pin che abilita la tensione di 3,3 V. Di default è attivato, quindi deve essere collegato a massa (GND) a terra per disabilitarla. Ciò significa che ad esempio, puoi usare questo pin collegato a un pulsante per riavviare il tuo ESP32 . Corrente disponibile per GPIO: la corrente massima assoluta che può essere fornita da ogni singolo GPIO è di 40 mA (massima corrente consigliata: 20 mA), secondo la sezione "Condizioni operative consigliate" nella scheda tecnica dell'ESP32. Se si usano periferiche con assorbimento maggiore come relè, analizzatori di gas, ecc., è consigliabile usare un alimentatore esterno adeguato, come possibile sulla nostra BDS. Sensore ad effetto Hall integrato ESP32. L'ESP32 è dotato anche di un sensore ad effetto Hall integrato che rileva le variazioni del campo magnetico circostante. Nota: la funzione hallRead() non è più supportata sulla versione 3.X dell'ESP32. Puoi comunque usare questa funzione, ma devi effettuare il downgrade del componente aggiuntivo della scheda ESP32 alla versione 2. |
La
mappa delle funzionalitàper ESP32x |
ESP
32 con 38 pin
Immagine
liberalemte scaricata da https://forum.arduino.cc/t/esp-32-pinout-confusion/1150090
Ringrazio per la disponibilità |
ESP32
con 30 pin Ho
scaricato questa immagine dal seguente sito:
https://www.circuitstate.com/tutorials/getting-started-with-espressif-esp32-wifi-bluetooth-soc-using-doit-esp32-devkit-v1-development-board/
Ringrazio per l'immagine rilasciata con licenza Creative common. |