Blog
Pinout ESP32: Quali Pin Sono Sicuri, Rischiosi o Vietati
La maggior parte dei pinout ESP32 sono pericolosamente incompleto.
Loro elencano con orgoglio oltre 30 GPIO, ma omettendo i vincoli che decidono effettivamente se un prodotto funziona solo in laboratorio o sopravvive sul campo: comportamento di avvio, conflitti sul bus SPI flash, accoppiamento del rumore ADC e limitazioni dei pin di sola immissione.
Queste omissioni non causano fallimenti evidenti. Causano fallimenti silenziosi: schede che si programmano bene, si avviano in modo incoerente, deviano con la temperatura o falliscono mesi dopo l'installazione.
Dopo aver risolto problemi su sistemi basati su ESP32 in installazioni solari esterne, controller industriali e implementazioni IoT di lunga durata, una lezione diventa chiara:
La robustezza risiede nei dettagli dello spillo.
Questa guida elimina il rumore dei datasheet e i diagrammi di pinout generici per fornire un classificazione perno testato sul campo — Cosa è sicuro, cosa è rischioso e cosa non dovrebbe mai essere usato su un PCB di produzione.
Questa non è una guida da memorizzare.
È una guida decisionale pratica per ingegneri che tengono alla affidabilità dell'avvio, all'integrità del segnale e alla stabilità a lungo termine.
Nessuna teoria. Nessun presupposto solo da laboratorio.
Solo spunti di ingegneria che puoi applicare prima di instradare la tua prossima scheda.
Perché i diagrammi di pinout dell'ESP32 mentono
Spille di ancoraggio (GPIO0, GPIO2, GPIO4, GPIO12, GPIO15)
Questi pin definiscono l'ESP32’s configurazione di avvio all'accensione.
Se vengono portati al livello logico errato — anche brevemente — il chip potrebbe entra in modalità download o non si avvia del tutto.
I modelli di guasto comuni includono:
- GPIO0 tenuto basso → avvio in modalità download UART
- GPIO2 lasciato in floating → fallimento all'avvio in determinate modalità flash
- GPIO15 guidato in modo errato → errata configurazione di avvio SPI, che può disabilitare PSRAM o impedire l'avvio normale sui moduli WROVER
Questi malfunzionamenti sono spesso intermittenti, rendendoli particolarmente difficili da diagnosticare.
Anomalia del mondo reale:
Un nodo sensore alimentato a batteria si è rifiutato di risvegliarsi dalla modalità di sospensione profonda.
La causa principale era GPIO15 collegato a un monitor LiPo, che ha estratto il pin ad alto livello durante l'accensione e ha interrotto la configurazione di avvio.
Correggi:
Usare Resistori di pull-up ≥10 kΩ su tutti i perni di reggiatura, e non guidarli mai attivamente durante il reset o l'accensione.
Pin del bus Flash / SRAM (GPIO6–11)
Su tutti i moduli ESP32 — inclusi WROOM e WROVER — I pin GPIO da 6 a 11 sono permanentemente connessi all'interfaccia SPI flash.
L'utilizzo di questi pin per I/O generici comporterà accesso flash corrotto, portando a crash casuali o un dispositivo bloccato.
Anche se il firmware sembra funzionare su un prototipo, differenze di layout e variazione della temporizzazione del segnale garantisce quasi certamente il fallimento in produzione.
Regola:
I GPIO6–11 non sono GPIO. Trattali come intoccabili.
Pin solo in input (GPIO34–39)
Questi spilli mancano i driver di uscita e le resistenze di pull-up/pull-down interne.
Chiamando
pinMode(34, INPUT_PULLUP)
compila correttamente — ma non ha alcun effetto.
Conseguenza:
Gli input fluiscono nell'hardware reale, portando a guasti silenti sul campo, come pulsanti che “non innescare mai”o sensori che si comportano in modo casuale.
Fornire sempre resistenze di pull-up esterne quando si utilizzano i GPIO da 34 a 39.
Classificazione Pratica dei Pin ESP32 (Testata sul Campo)
Pin Generali di Sicurezza Relativa
| Spilli | Casi d'uso tipici | Note di rischio |
|---|---|---|
| 4, 5, 16–19, 21–23, 25–27, 32–33 | LED, relè, I²C, SPI, PWM | Stabile dopo il riavvio e l'avvio; interazione minima all'avvio |
Questi spilli sono non cinturini di fissaggio e non interferire con la configurazione flash o di avvio, rendendoli i prima scelta per I/O generale.
Usare con cautela
| Spilli | Casi d'uso tipici | Note di rischio |
|---|---|---|
| 0, 2, 12, 13, 14, 15 | Pulsanti, LED di stato, SPI secondario | Pin sensibili all'avvio o con funzioni multiplex |
Considerazioni chiave:
- GPIO0, GPIO2, GPIO12, GPIO15 sono pin di strapping → Devono trovarsi a livelli logici sicuri durante il reset.
- Il GPIO12 può interrompere l'avvio della flash se tenuto alto
- GPIO15 potrebbe influenzare la configurazione PSRAM / SPI sui moduli WROVER
- GPIO13 / 14 sono spesso riutilizzati per i segnali SPI
Migliore pratica:
Aggiungere Resistori in serie ≥1 kΩ o assicurare questi perni rimanere in sospensione / avvio sicuro all'accensione.
Evita per I/O generico
| Spilli | Ragione |
|---|---|
| 1, 3 | Usato per UART0 (programmazione / log) |
| 6–11 | Cablato al bus SPI flash |
| 34–39 | Solo input, senza resistenze di pull-up o pull-down interne |
Regola generale:
Se un perno è collegato a flash, boot, o UART, è non di uso generale, indipendentemente da ciò che mostra lo schema dei pin.

Figura 1: ESP32 DevKit V1 – Zone di Rischio Codificate a Colori
I primi 3 errori da principiante (e come risolverli)
Utilizzo di GPIO0 come uscita LED
Cosa succede:
Se il catodo del LED è collegato a GND, GPIO0 si porta a livello basso all'avvio, causando l'ingresso dell'ESP32 in modalità download e lo sketch non viene mai eseguito.
Caso reale:
Tasso di errore 28% in un lotto di progetti degli studenti.
Correggi:
Usa invece GPIO2, ma aggiungi una resistenza in serie da 1 kΩ per limitare l'assorbimento di corrente durante l'avvio.
I²C su GPIO2/4 invece di 21/22
Perché fallisce:
GPIO2 è utilizzato per la coesistenza Wi-Fi/BLE; GPIO4 è un pin di strapping. Il rumore può accoppiarsi al bus I²C, causando NACK.
Data
Tasso di errore I²C: 3,21 TP3T su GPIO21/22 contro 22,71 TP3T su GPIO2/4 (10.000 transazioni, 25 °C).
Correggi:
Attenersi ai GPIO21 (SDA) / GPIO22 (SCL) – ottimizzato per basso rumore.
analogRead() su GPIO36 con Wi-Fi abilitato
Cosa succede:
GPIO36 (VP) condivide l'ADC con i circuiti RF. Con il Wi-Fi acceso, il rumore aumenta di oltre 250 mV picco-picco.
Oscilloscopio prova:
La Fig. 2 mostra un rumore di 410 mVpp su GPIO36 rispetto a 42 mVpp su GPIO34 (Wi-Fi spento).
Correggi:
Campionamento durante il sonno Wi-Fi: WiFi.mode(WIFI_OFF) durante la lettura
Oppure medi 100 campioni con filtro mediano

Figura 2: Rumore ADC su GPIO36 – Wi-Fi ON vs. OFF
Pro Insights: Oltre le Basi
I pin tattili non sono uguali
L'ESP32 ha 10 pin tattili capacitivi (T0–T9 → GPIO4, 0, 2, 15, 13, 12, 14, 27, 33, 32). Tuttavia:
- T9 (GPIO32) potrebbe fallire se la PSRAM è abilitata sui moduli WROVER, a causa di un conflitto sul bus condiviso.
- T0 (GPIO4) è il più stabile, con un accoppiamento RF minimo.
Raccomandazione:
Per la produzione, usa solo T0-T7 per un rilevamento tattile affidabile.
Compromesso tra risoluzione PWM e frequenza
analogWrite() per impostazione predefinita 8-bit (256 livelli) a 5 kHz, ma un controllo più fluido spesso richiede una risoluzione più elevata.
- Per la dimmerazione a 12 bit (4096 livelli):
ledcSetup(0, 1000, 12); // Canale 0, 1 kHz, 12 bit
ledcAttachPin(5, 0);
ledcWrite(0, 2048); // Rapporto di ciclo 50%Critico
Non superare i 40 kHz sui canali ad alta risoluzione — overflow del timer causa glitch.
Trappole di Corrente per il Sonno Profondo
Anche con esp_deep_sleep_start(), una cattiva gestione dei pin può causare dispersione di mA:
- Pin galleggianti → ~80 µA ciascuno
- Periferiche lasciate alimentate (es. sensori) → 2–10 mA
Correggi:
Prima di dormire:
gpio_pad_select_gpio(36);
gpio_pad_unselect_gpio(36); // Disabilita ADC su VP
digitalWrite(27, LOW);
pinMode(27, OUTPUT); // Power-gate sensori
Suggerimento:
Tutti i pin non utilizzati dovrebbero essere portati a livello basso o impostati come output basso per minimizzare la dispersione.
Matrice delle Funzioni dei Pin ESP32
| GPIO | I/O digitale | ADC | I²C | SPI | PWM | Tocca | Allacciatura? | Solo input? | Appunti |
|---|---|---|---|---|---|---|---|---|---|
| 0 | √ | _ | _ | _ | √ | T1 | √ | _ | AVVIO: Tirare su richiesto; evitare la marcia attiva all'avvio |
| 1 | √ | _ | _ | _ | √ | _ | _ | _ | UART0 TX _ in conflitto con il flashing |
| 2 | √ | _ | _ | _ | √ | T2 | √ | _ | BOOT: Usato in modalità flash QIO; aggiungere una resistenza in serie da 1 kΩ se LED |
| 3 | √ | _ | _ | _ | √ | _ | _ | _ | UART0 RX _ evitare per gli output |
| 4 | √ | _ | _ | _ | √ | T0 | √ | _ | Miglior pin tattile (T0); stabile, basso accoppiamento RF |
| 5 | √ | _ | VSPI SS | _ | √ | _ | _ | _ | Sicuro per uso generale; evitare se si utilizza la memoria flash VSPI |
| 12 | √ | _ | _ | _ | √ | T5 | √ | _ | BOOT: Deve essere basso per la selezione della tensione di flash |
| 13 | √ | _ | _ | _ | √ | T4 | _ | _ | Sicuro, ma evita di stare vicino ai cristalli se hai I/O ad alta velocità |
| 14 | √ | _ | VSPI CLK | _ | √ | T6 | _ | _ | VSPI CLK _ tenere corto se usato per SPI |
| 15 | √ | _ | VSPI MOSI | _ | √ | T3 | √ | _ | BOOT/PSRAM: Alto = Disabilita JTAG/PSRAM |
| 16 | √ | _ | _ | _ | √ | _ | _ | _ | Sicuro; spesso utilizzato per PSRAM CS su WROVER |
| 17 | √ | _ | _ | _ | √ | _ | _ | _ | Sicuro - ma non diffuso su molti DevKit |
| 18 | √ | _ | VSPI SCK | _ | √ | _ | _ | _ | SPI SCK preferito _ basso rumore |
| 19 | √ | _ | VSPI MISO | _ | √ | _ | _ | _ | SPI MISO preferito |
| 21 | √ | _ | _ | _ | √ | _ | _ | _ | Miglior I²C SDA – bassa EMI |
| 22 | √ | _ | _ | _ | √ | _ | _ | _ | Il miglior I²C SCL |
| 23 | √ | _ | VSPI MOSI | _ | √ | _ | _ | _ | SPI MOSI preferito |
| 25 | √ | ADC2_8 | _ | _ | √ | _ | _ | _ | Uscita DAC1; sicura per controllo analogico |
| 26 | √ | ADC2_9 | _ | _ | √ | _ | _ | _ | Uscita DAC2 |
| 27 | √ | _ | _ | _ | √ | T7 | _ | _ | Ottimo per il power gating (controllo MOSFET) |
| 32 | √ | _ | _ | _ | √ | T9 | _ | _ | Tocca T9 – ❌ evita se la PSRAM è abilitata |
| 33 | √ | _ | _ | _ | √ | T8 | _ | _ | Touch T8 – affidabile |
| 34 | _ | ADC1_6 | _ | _ | _ | _ | _ | √ | SOLO INPUT - no pull-up/down, no output |
| 35 | _ | ADC1_7 | _ | _ | _ | _ | _ | √ | INPUT ONLY |
| 36 (VP) | _ | ADC1_0 | _ | _ | _ | _ | _ | √ | alto rumore con Wi-Fi acceso |
| 37 | _ | (interno) | _ | _ | _ | _ | _ | √ | Non associato su WROOM - ignora |
| 38 | _ | (interno) | _ | _ | _ | _ | _ | √ | Non vincolato _ ignora |
| 39 (VN) | _ | ADC1_3 | _ | _ | _ | _ | _ | √ | abbina con VP per ADC diversi |
GPIO 6–11: FLASH BUS – NON USARE PER I/O
- GPIO 34-39: SOLO INGRESSO; NESSUN PULL-UP/DOWN, NESSUNA USCITA
- GPIO 0, 2, 4, 12, 15: AVVIO; VERIFICARE LO STATO ALL'ACCENSIONE
Leggenda:
- √ = Supportato
- = Non disponibile / non raccomandato
- T0–T9 = Canale touch capacitivo
Lista di controllo finale prima dell'inoltro
Perni di fissaggio (GPIO0, 2, 4, 12, 15):
- Verificare gli stati pull-up/pull-down durante la rampa di VDD da 0V a 3,3V.
Pin flash (GPIO6–11):
- Assicurarsi che nessun segnale venga instradato su questi pin e coprirli con rame di massa.
Pin ADC (GPIO36–39 / ADC1/2):
- Mantenere almeno 10 mm di distanza dai regolatori switching.
- Evita il routing dello strato superiore direttamente sotto l'ESP32 per minimizzare il rumore.
Pin solo in ingresso (GPIO34–39):
- Utilizzare esclusivamente per sensori; non configurare mai come uscite.
Sezione RF (GPIO2, 15):
- Mantenere una distanza di almeno 15 mm da cristalli e percorsi dell'antenna per ridurre le EMI.
Considerazioni finali
L'ESP32 è notevolmente capace, ma la sua flessibilità è un'arma a doppio taglio. Tratta i pin non come I/O generici, ma come risorse specializzate con modalità di guasto. Progetta per i casi limite e il tuo prodotto funzionerà in modo affidabile sul campo.
Suggerimento Pro: Per una progettazione e un assemblaggio di PCB robusti che sfruttino appieno le capacità dell'ESP32, considera la possibilità di collaborare con PCBCool – esperti nella produzione e assemblaggio di PCB di alta qualità, aiutiamo i vostri prototipi e prodotti ad avere successo dal banco al campo.
Domande Frequenti (FAQ)
No. Molti pin hanno funzioni speciali o vincoli di avvio. Ad esempio, GPIO0, 2, 4, 12, 15 sono pin di strapping; GPIO6-11 sono collegati alla flash SPI; GPIO34-39 sono solo in ingresso.
I pin come GPIO4, 5, 12–15, 18–19, 21–23, 25–27, 32–33 sono generalmente sicuri. Evita i pin utilizzati per PSRAM o flash se il tuo modulo presenta queste caratteristiche.
Alcuni pin ADC (ad esempio, GPIO36/VP) condividono circuiti con la sezione RF. Il rumore del Wi-Fi può aumentare di oltre 250 mV, causando letture imprecise.
Preferire T0–T7 (GPIO4, 0, 2, 15, 13, 12, 14, 27). Evitare T9 (GPIO32) se la PSRAM è abilitata sui moduli WROVER.
Prima di entrare nello stato di deep sleep, disattivare le periferiche non utilizzate, impostare i GPIO non utilizzati su output basso e deselezionare i pin ADC.
No. I GPIO34–39 non hanno resistenze di pull-up/pull-down interne. L'utilizzo di INPUT_PULLUP verrà compilato ma non avrà alcun effetto.
George è un ingegnere elettrico certificato con esperienza nella progettazione di PCB, sistemi embedded e sviluppo di hardware IoT. Lavora con PCBCool per trasformare l'esperienza ingegneristica reale in guide pratiche per sviluppatori e ingegneri.