O guia básico de uso das GPIOs do ESP8266

Todos já sabem que o ESP é um sucesso, mesmo assim algumas informações não são facilmente encontradas na internet, ou estão em outros idiomas.

Desde que eu comecei a utilizar o ESP8266, muitas das dúvidas que eu respondia eram em relação ao uso das GPIOs e algumas limitações. Ainda recebo duvidas a respeito disso, então nada mais justo que fazer um artigo detalhando o uso e limitações das GPIOs do ESP.

A ideia deste guia, é de servir como base nos estudos do ESP8266, e visa em ajudar na definição e escolha de quais GPIOs serão utilizadas.

Entendendo as GPIOs

Definindo uma GPIO

GPIO, ou General Purpose Input/Output é uma interface/porta dos microcontroladores e microprocessadores para a interação com os periféricos externos. As GPIOs podem ser definidas como entrada ou saída de sinais digitais, com sinal alto (1) ou baixo (0).

No ESP8266

O ESP possui 16 GPIOs e que podem serem utilizadas com diferentes funcionalidades compartilhadas, como UART, I2C, I2S, SDIO, SPI, PWM e IR. Todas as GPIOs possuem pull-up e pull-down interno e uma GPIO que faz parte do circuito de RTC.

Como as GPIOs são multiplexadas, o uso das funções compartilhadas não são fixas, podendo mudar por software.

Com exceção da GPIO16, todas possuem função de interrupção.

Características das GPIOs

Todas as GPIOs do ESP operam em 3.3V e não possuem tolerância à 5V. Portanto, se faz necessário o uso de técnicas de acoplamento do sinal para 3.3V.

Existe uma nota no datasheet que diz que o ESP possui um circuito de proteção de sobretensão:

All digital IO pins are protected from over-voltage with a snap-back circuit connected between the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V. This provides protection from over-voltages and ESD. The output devices are also protected from reversed voltages with diodes.”

Mesmo com essa nota, existem relatos, inclusive já aconteceu comigo, de ocorrer a queima de GPIO ao ser conectada em 5V.

A corrente máxima de cada GPIO é de 12mA, portanto se for utilizar uma corrente maior, utilize um transistor para servir de driver de corrente.

Um ponto importante é que algumas GPIOs não podem ser utilizadas por estarem conectadas em outros circuitos, outras possuem limitações. Abaixo uma descrição das funcionalidades das GPIOs.

Mapa das GPIOs

Abaixo segue o mapa das GPIOs com as descrições de pino, nome e funções:

Mapa das GPIOs

Mapa das GPIOs

GPIOs que não podem serem utilizadas

As GPIOs abaixo, são utilizadas na memória flash, e o uso delas fica restrito:

  • GPIO6 – SDIO_CLK
  • GPIO7 – SDIO_DATA0
  • GPIO8 – SDIO_DATA1
  • GPIO9* – SDIO_DATA2
  • GPIO10* – SDIO_DATA3
  • GPIO11 – SDIO_CMD

Existe a possibilidade de utilizar a GPIO9 e a GPIO10, caso utilizar a memória em modo DIO (dual) e não QIO (quad). Para isso, é necessário fazer uma modificação no módulo, o que não é tão trivial e precisa de solda.

*Caso utilizar QIO, em DIO esses pinos não são utilizados.

GPIOs que podem ser utilizadas

As GPIOs abaixo, podem ser utilizadas normalmente:

  • GPIO4
  • GPIO5
  • GPIO12
  • GPIO13
  • GPIO14

GPIOs que podem ser utilizadas com limitações

Algumas portas possuem funcionalidades durante o boot, log ou são utilizadas para a programação do módulo.

Essas GPIOs podem ser utilizadas para outras funções, mas não podem interferir durante o processo de boot, já que o modulo pode entrar em um estado não esperado.

  • GPIO0 – Modo programação
  • GPIO1 – UART0_TX
  • GPIO2 – UART1_TX (log de boot)
  • GPIO3 – UART0_RX
  • GPIO15 – Modo da memória
  • GPIO16 – XPD (parte do circuito de RTC)

A GPIO2, ao iniciar o módulo, envia um log do processo de boot, e não tem como desativar essa função, pelo menos até onde eu sei. Esse log pode atrapalhar um pouco se você estiver utilizando um relé, por exemplo.

GPIO16

A GPIO16 faz parte do circuito de RTC, sendo utilizada para “acordar” o módulo do modo deep-sleep, e não pode ser utilizada da mesma forma que as outras GPIOs.

Para o modo deep-sleep, a GPIO16 deve permanecer conectada no reset do módulo! Se quiser saber mais a respeito do modo deep-sleep, leia este artigo.

Funcionalidades

As GPIOs do ESP possuem as seguintes funcionalidades:

  • 1 x SDIO – Secure Digital Input/Output
  • 3 x SPI – Serial Peripheral Interface
  • 1 x I2C – Inter-Integrated Circuit
  • 1 x I2S – Inter-IC Sound
  • 2 x UART – Universal Asynchronous Receiver/Transmitter
  • 4 x PWM – Pulse Width Modulation
  • 1 x IR Remote Control

Algumas funcionalidades, compartilham o mesmo pino, portanto não é possível utilizar todas ao mesmo tempo.

Conclusão

O ESP pode não ter um número memorável de GPIOs livres para o uso, mas é o suficiente para a maior parte das aplicações. Devemos levar em consideração todos os pontos acima, durante a escolha das GPIOs que serão utilizadas no projeto, e cautela no uso das GPIOs que desempenham funções no boot.

Se o projeto demandar de um número maior de GPIOs, ainda temos como resolver com um expansor de portas, como o MCP23017.

 

Happy Hacking!

7 Comments

  1. Edilson Maia Favero

    Olá Pedro. A expansão de portas pode ser feita no esp12e? No NodeMCU Lolin?

    Reply
  2. Guilherme

    Muito bom Pedro. o ESP é um hardware que funciona realmente. Obrigado pela artigo.

    Reply
  3. Luis Fernando

    Parabéns!!!! Excelente artigo!!!

    Reply
    1. Pedro Minatel (Post author)

      Obrigado!

      Reply
  4. Laercio Guerço Rodrigues

    Muito bom seu artigo.

    Reply
  5. Alexandre Magno

    Senti falta dos diagramas de pinout, relacionando pinos do chip e pinos da placa. Uma coisa interessante, segundo me lembro, é que na linguagem Wiring da Arduino IDE nós programamos para placa, não para o chip.

    Reply
    1. Pedro Minatel (Post author)

      O diagrama já tinha tratado no post de hardware: http://pedrominatel.com.br/pt/esp8266/esp8266-o-guia-basico-de-hardware/

      Obrigado!

      Reply

Deixe seu comentário