Aziz Bench

Pinout ESP32: quali GPIO usare e quali evitare

Tocca un pin per vedere cosa può fare e a cosa fare attenzione. Poi elenca i pin del tuo progetto: il pianificatore segnala pin di strapping, GPIO solo ingresso e pin ADC2 che smettono di funzionare con il WiFi.

Pinout Raspberry Pi Pico →
  • Libero
  • Con cautela
  • Solo ingresso
  • Da non usare
  • Alimentazione e controllo
Progetto

I pin ADC2 smettono di funzionare quando il WiFi è acceso.

Aggiungi pin

Il mio piano dei pin

    Nessun pin per ora. Scegline uno sulla mappa o aggiungilo con il modulo.

    Pronto da incollare in cima a uno sketch o in una issue.

    I pin da evitare o da usare con cautela

    L’ESP32 ha 34 GPIO, ma su una DevKit solo due terzi circa si comportano come pin qualsiasi. Quattro gruppi richiedono attenzione.

    GPIO da 6 a 11: occupati dalla flash

    Questi sei pin collegano il chip alla flash SPI dentro il modulo. Le DevKitC li portano fuori come CLK, SD0, SD1, SD2, SD3 e CMD, ma usarli blocca il programma o impedisce l’avvio della scheda.

    GPIO 0, 2, 5, 12 e 15: pin di strapping

    Il chip legge questi pin al reset per decidere come avviarsi. Quando il programma gira sono GPIO normali, quindi vanno bene come uscite o per i pulsanti. I problemi nascono da tutto ciò che impone il livello sbagliato all’accensione, come una resistenza di pull-up, un modulo che pilota la linea o un sensore che la tiene.

    GPIOValore al resetCosa sceglieIn pratica
    0Pull-up (ALTO)Modo di avvio: ALTO esegue il programma, BASSO entra in modalità downloadNiente deve tenerlo BASSO all’accensione
    2Pull-down (BASSO)Deve essere BASSO o scollegato per la modalità downloadNiente pull-up; spesso è il LED della scheda
    5Pull-up (ALTO)Temporizzazione SDIO slave, insieme a GPIO15Va bene per quasi tutto
    12Pull-down (BASSO)Tensione della flash: BASSO 3,3 V, ALTO 1,8 VMai ALTO al reset
    15Pull-up (ALTO)Log di avvio su UART0: ALTO lo stampa, BASSO lo silenziaSicuro; BASSO nasconde solo il log

    GPIO da 34 a 39: solo ingresso

    Questi pin non hanno stadio di uscita né pull-up o pull-down interni. Sono ottimi per le letture analogiche e per i pulsanti con una resistenza esterna, ma non possono accendere un LED, un relè o una linea di bus. GPIO 37 e 38 esistono nel chip ma non sono portati fuori sui moduli WROOM.

    GPIO 1 e 3: la porta seriale USB

    La UART0 va al convertitore USB-seriale e porta sia il caricamento dei programmi sia Serial. In un progetto finito puoi riusare questi pin, ma perdi il monitor seriale e il caricamento può fallire mentre è collegato qualcosa.

    L’ADC2 smette di funzionare con il WiFi acceso

    L’ESP32 ha due ADC. L’ADC1 è sui GPIO da 32 a 39, l’ADC2 sui GPIO 0, 2, 4, da 12 a 15 e da 25 a 27. Il driver WiFi usa l’ADC2, quindi appena il WiFi parte le letture su quei pin falliscono o danno valori senza senso. In un progetto connesso metti tutti gli ingressi analogici sull’ADC1. Per misurare la batteria la scelta abituale è GPIO 34 o 35 con un partitore resistivo.

    Anche sull’ADC1 le letture non sono lineari vicino agli estremi. Con l’attenuazione da 12 dB Espressif consiglia di restare all’incirca tra 0,15 V e 2,45 V per risultati precisi, quindi dimensiona il partitore per tenere il segnale in quella finestra.

    Tabella completa dei GPIO dell’ESP32

    GPIOStatoADCTouchRTCNote
    GPIO0Con cautelaADC2_CH1T1RTC_GPIO11strapping
    GPIO1 (TX)Con cautela———seriale USB, UART0 TX
    GPIO2Con cautelaADC2_CH2T2RTC_GPIO12strapping, LED su alcune schede
    GPIO3 (RX)Con cautela———seriale USB, UART0 RX
    GPIO4LiberoADC2_CH0T0RTC_GPIO10—
    GPIO5Con cautela———strapping, VSPI SS
    GPIO6 (CLK)Da non usare———flash SPI
    GPIO7 (SD0)Da non usare———flash SPI
    GPIO8 (SD1)Da non usare———flash SPI
    GPIO9 (SD2)Da non usare———flash SPI
    GPIO10 (SD3)Da non usare———flash SPI
    GPIO11 (CMD)Da non usare———flash SPI
    GPIO12Con cautelaADC2_CH5T5RTC_GPIO15strapping, HSPI MISO
    GPIO13LiberoADC2_CH4T4RTC_GPIO14HSPI MOSI
    GPIO14LiberoADC2_CH6T6RTC_GPIO16possibile attività all’avvio, HSPI SCK
    GPIO15Con cautelaADC2_CH3T3RTC_GPIO13strapping, HSPI SS
    GPIO16Libero———PSRAM sui WROVER, RX2/TX2 su alcune schede
    GPIO17Libero———PSRAM sui WROVER, RX2/TX2 su alcune schede
    GPIO18Libero———VSPI SCK
    GPIO19Libero———VSPI MISO
    GPIO21Libero———I2C SDA
    GPIO22Libero———I2C SCL
    GPIO23Libero———VSPI MOSI
    GPIO25LiberoADC2_CH8—RTC_GPIO6—
    GPIO26LiberoADC2_CH9—RTC_GPIO7—
    GPIO27LiberoADC2_CH7T7RTC_GPIO17—
    GPIO32LiberoADC1_CH4T9RTC_GPIO9quarzo 32 kHz
    GPIO33LiberoADC1_CH5T8RTC_GPIO8quarzo 32 kHz
    GPIO34Solo ingressoADC1_CH6—RTC_GPIO4solo ingresso
    GPIO35Solo ingressoADC1_CH7—RTC_GPIO5solo ingresso
    GPIO36 (VP)Solo ingressoADC1_CH0—RTC_GPIO0solo ingresso
    GPIO39 (VN)Solo ingressoADC1_CH3—RTC_GPIO3solo ingresso

    I pin RTC possono svegliare il chip dal deep sleep (ext0 per un pin, ext1 per un gruppo), i pin touch possono svegliarlo con un tocco. I ruoli predefiniti sono quelli di Arduino-ESP32: Wire su 21/22, SPI (VSPI) su 18/19/23/5. I pin predefiniti di Serial2 sono cambiati con il core 3.x, quindi indicali sempre.

    Domande frequenti

    Quali pin dell’ESP32 si possono usare senza problemi?

    Su una DevKit i GPIO senza limitazioni sono 4, 13, 14, da 16 a 19, da 21 a 23, da 25 a 27, 32 e 33. I GPIO da 34 a 39 vanno bene come ingressi. I GPIO 0, 2, 5, 12 e 15 funzionano quando il programma gira ma decidono come si avvia il chip, mentre i GPIO da 6 a 11 appartengono alla flash. Sui moduli WROVER i GPIO 16 e 17 sono occupati dalla PSRAM.

    Posso usare i pin ADC2 con il WiFi?

    No. Il driver WiFi usa l’ADC2, quindi le letture analogiche sui GPIO 0, 2, 4, da 12 a 15 e da 25 a 27 falliscono con il WiFi acceso. Usa i pin dell’ADC1, i GPIO da 32 a 39. L’ADC2 torna a funzionare solo a WiFi spento.

    Perché il mio ESP32 non si avvia dopo che ho collegato qualcosa al GPIO12?

    Il GPIO12 sceglie la tensione della flash al reset. Se un pull-up o un modulo collegato lo tiene ALTO, il chip alimenta la flash a 1,8 V e i moduli con flash a 3,3 V non partono. Sposta il collegamento su un altro pin, oppure scrivi la tensione della flash negli eFuse con espefuse set-flash-voltage 3.3V. Quest’ultimo passo è permanente e non si può annullare.

    Quali pin possono svegliare l’ESP32 dal deep sleep?

    I GPIO RTC: 0, 2, 4, da 12 a 15, da 25 a 27 e da 32 a 39. Con ext0 il risveglio avviene su un pin, con ext1 su un gruppo di pin. Anche i pin touch possono svegliare il chip con un tocco.

    Quali sono i pin I2C e SPI predefiniti dell’ESP32?

    In Arduino-ESP32 Wire usa il GPIO 21 per SDA e il 22 per SCL, mentre SPI usa i pin VSPI: 18 SCK, 19 MISO, 23 MOSI e 5 SS. Grazie alla GPIO matrix puoi spostarli su quasi tutti i pin che supportano l’uscita, passando i pin a Wire.begin() o SPI.begin().

    I pin dell’ESP32 tollerano i 5 V?

    No. I GPIO lavorano a 3,3 V ed Espressif non li garantisce per i 5 V. Collega i segnali a 5 V tramite un traslatore di livello o un partitore resistivo.