Os pinos que você deve evitar ou usar com cuidado
O ESP32 tem 34 GPIOs, mas em um DevKit só uns dois terços deles se comportam como pinos comuns. Quatro grupos exigem atenção.
GPIO 6 a 11: ocupados pela flash
Estes seis pinos ligam o chip à flash SPI dentro do módulo. As placas DevKitC trazem esses pinos para fora como CLK, SD0, SD1, SD2, SD3 e CMD, mas mexer neles trava o programa ou impede a placa de inicializar.
GPIO 0, 2, 5, 12 e 15: pinos de strapping
O chip lê estes pinos no reset para decidir como inicializar. Com o programa rodando, eles são GPIOs normais, então funcionam bem como saídas ou para botões. O problema vem de qualquer coisa que force o nível errado ao ligar a placa, como um resistor de pull-up, um módulo que aciona a linha ou um sensor que a mantém em um nível.
| GPIO | Padrão no reset | O que seleciona | Na prática |
|---|---|---|---|
| 0 | Pull-up (ALTO) | Modo de boot: ALTO roda o programa, BAIXO entra no modo de download | Nada pode mantê-lo em BAIXO ao ligar a placa |
| 2 | Pull-down (BAIXO) | Precisa estar em BAIXO ou flutuando para o modo de download | Sem pull-up; muitas vezes é o LED da placa |
| 5 | Pull-up (ALTO) | Timing do SDIO slave, junto com o GPIO15 | Serve para quase tudo |
| 12 | Pull-down (BAIXO) | Tensão da flash: BAIXO 3,3 V, ALTO 1,8 V | Nunca em ALTO no reset |
| 15 | Pull-up (ALTO) | Log de boot na UART0: ALTO imprime, BAIXO desativa | Seguro; BAIXO só esconde o log |
GPIO 34 a 39: só entrada
Estes pinos não têm driver de saída nem pull-up ou pull-down internos. São uma boa opção para leituras analógicas e para botões com um resistor externo. Não conseguem acionar um LED, um relé ou uma linha de barramento. Os GPIOs 37 e 38 existem no chip, mas não são expostos nos módulos WROOM.
GPIO 1 e 3: a porta serial USB
A UART0 vai até o chip USB-serial e cuida tanto do upload quanto do Serial. Você pode reaproveitar estes pinos em um projeto pronto, mas perde o monitor serial, e o upload pode falhar enquanto houver algo conectado.
O ADC2 para de funcionar com o Wi-Fi ligado
O ESP32 tem dois ADCs. O ADC1 fica nos GPIOs 32 a 39, e o ADC2 nos GPIOs 0, 2, 4, 12 a 15 e 25 a 27. O driver do Wi-Fi usa o ADC2, então, assim que o Wi-Fi inicia, as leituras nesses pinos falham ou retornam lixo. Em um projeto conectado, coloque todas as entradas analógicas no ADC1. Vai medir uma bateria? GPIO 34 ou 35 com um divisor resistivo é a escolha comum.
Mesmo no ADC1, as leituras não são lineares perto dos extremos da faixa. Com atenuação de 12 dB, a Espressif recomenda ficar mais ou menos entre 0,15 V e 2,45 V para ter resultados precisos, então dimensione o divisor para manter o sinal nessa janela.
Tabela completa de GPIOs do ESP32
| GPIO | Status | ADC | Touch | RTC | Notas |
|---|---|---|---|---|---|
| GPIO0 | Com cuidado | ADC2_CH1 | T1 | RTC_GPIO11 | strapping |
| GPIO1 (TX) | Com cuidado | — | — | — | serial USB, UART0 TX |
| GPIO2 | Com cuidado | ADC2_CH2 | T2 | RTC_GPIO12 | strapping, LED em algumas placas |
| GPIO3 (RX) | Com cuidado | — | — | — | serial USB, UART0 RX |
| GPIO4 | Livre | ADC2_CH0 | T0 | RTC_GPIO10 | — |
| GPIO5 | Com cuidado | — | — | — | strapping, VSPI SS |
| GPIO6 (CLK) | Não usar | — | — | — | flash SPI |
| GPIO7 (SD0) | Não usar | — | — | — | flash SPI |
| GPIO8 (SD1) | Não usar | — | — | — | flash SPI |
| GPIO9 (SD2) | Não usar | — | — | — | flash SPI |
| GPIO10 (SD3) | Não usar | — | — | — | flash SPI |
| GPIO11 (CMD) | Não usar | — | — | — | flash SPI |
| GPIO12 | Com cuidado | ADC2_CH5 | T5 | RTC_GPIO15 | strapping, HSPI MISO |
| GPIO13 | Livre | ADC2_CH4 | T4 | RTC_GPIO14 | HSPI MOSI |
| GPIO14 | Livre | ADC2_CH6 | T6 | RTC_GPIO16 | possível atividade no boot, HSPI SCK |
| GPIO15 | Com cuidado | ADC2_CH3 | T3 | RTC_GPIO13 | strapping, HSPI SS |
| GPIO16 | Livre | — | — | — | PSRAM no WROVER, RX2/TX2 em algumas placas |
| GPIO17 | Livre | — | — | — | PSRAM no WROVER, RX2/TX2 em algumas placas |
| GPIO18 | Livre | — | — | — | VSPI SCK |
| GPIO19 | Livre | — | — | — | VSPI MISO |
| GPIO21 | Livre | — | — | — | I2C SDA |
| GPIO22 | Livre | — | — | — | I2C SCL |
| GPIO23 | Livre | — | — | — | VSPI MOSI |
| GPIO25 | Livre | ADC2_CH8 | — | RTC_GPIO6 | — |
| GPIO26 | Livre | ADC2_CH9 | — | RTC_GPIO7 | — |
| GPIO27 | Livre | ADC2_CH7 | T7 | RTC_GPIO17 | — |
| GPIO32 | Livre | ADC1_CH4 | T9 | RTC_GPIO9 | cristal de 32 kHz |
| GPIO33 | Livre | ADC1_CH5 | T8 | RTC_GPIO8 | cristal de 32 kHz |
| GPIO34 | Só entrada | ADC1_CH6 | — | RTC_GPIO4 | só entrada |
| GPIO35 | Só entrada | ADC1_CH7 | — | RTC_GPIO5 | só entrada |
| GPIO36 (VP) | Só entrada | ADC1_CH0 | — | RTC_GPIO0 | só entrada |
| GPIO39 (VN) | Só entrada | ADC1_CH3 | — | RTC_GPIO3 | só entrada |
Os pinos RTC podem despertar o chip do deep sleep (sono profundo): ext0 para um pino, ext1 para um grupo. Os pinos touch podem despertá-lo com um toque. As funções padrão são as do Arduino-ESP32: Wire em 21/22, SPI (VSPI) em 18/19/23/5. Os pinos padrão do Serial2 mudaram no core 3.x, então indique-os explicitamente.
Perguntas frequentes
Quais pinos do ESP32 são seguros para usar?
Em um DevKit, os GPIOs sem restrições são 4, 13, 14, 16 a 19, 21 a 23, 25 a 27, 32 e 33. Os GPIOs 34 a 39 servem como entradas. Os GPIOs 0, 2, 5, 12 e 15 funcionam com o programa rodando, mas definem como o chip inicializa, e os GPIOs 6 a 11 pertencem à flash. Nos módulos WROVER, os GPIOs 16 e 17 são usados pela PSRAM.
Posso usar os pinos do ADC2 com Wi-Fi?
Não. O driver do Wi-Fi usa o ADC2, então as leituras analógicas nos GPIOs 0, 2, 4, 12 a 15 e 25 a 27 falham enquanto o Wi-Fi está ligado. Use os pinos do ADC1, os GPIOs 32 a 39. O ADC2 só volta a funcionar com o Wi-Fi desligado.
Por que meu ESP32 não inicializa depois que liguei algo no GPIO12?
O GPIO12 define a tensão da flash no reset. Se um pull-up ou um módulo conectado o mantém em ALTO, o chip alimenta a flash com 1,8 V e os módulos com flash de 3,3 V não iniciam. Mude a ligação para outro pino, ou grave a tensão da flash nos eFuses com espefuse set-flash-voltage 3.3V. Esse último passo é permanente e não pode ser desfeito.
Quais pinos podem despertar o ESP32 do deep sleep?
Os GPIOs RTC: 0, 2, 4, 12 a 15, 25 a 27 e 32 a 39. Use ext0 para despertar com um pino e ext1 para despertar com um grupo de pinos. Os pinos touch também podem despertar o chip com um toque.
Quais são os pinos I2C e SPI padrão do ESP32?
No Arduino-ESP32, o Wire usa o GPIO 21 para SDA e o 22 para SCL, e o SPI usa os pinos VSPI: 18 SCK, 19 MISO, 23 MOSI e 5 SS. Graças à matriz GPIO, você pode movê-los para quase qualquer pino que funcione como saída, passando os pinos para Wire.begin() ou SPI.begin().
Os pinos do ESP32 toleram 5 V?
Não. Os GPIOs trabalham com 3,3 V e a Espressif não os garante para 5 V. Ligue sinais de 5 V por meio de um conversor de nível lógico ou de um divisor resistivo.