Configurando GPIO do ESP8266-01

O ESP8266-01 é o módulo Wi-Fi de menor custo da família, mas possui a menor quantidade de recursos disponíveis. Confira como configurar GPIOs do ESP8266-01.
GPIO do ESP8266-01

O ESP8266-01 é o módulo Wi-Fi de menor custo da família, em contrapartida, é o módulo com a menor quantidade de recursos disponíveis. Em termos de GPIO, temos apenas 4 pinos que podem ser usados para isso, GPIO0, 1, 2 e 3. Destes, GPIO1 e GPIO3 são compartilhados com os pinos TX e RX respectivamente, usa-los como GPIO impossibilita o uso de comunicação serial em nosso programa. Assim ficamos apenas com 2 pinos disponíveis para GPIO, correto? Não é bem assim que as coisas funcionam. Neste artigo iremos configurar GPIO do ESP8266-01, abordando as particularidades desses dois pinos, o que acaba limitando sua utilização.

Opções de Boot do ESP

Os módulos da família ESP podem ser inicializados de formas diferentes de acordo com o estado lógico de alguns de seus pinos. A tabela a seguir demonstra essa lógica de inicialização:

Tabela de configuração de boot no ESP-01 de acordo com os níveis dos GPIOS.
Figura 1 – Tabela de boot do ESP-01

Como podemos perceber na imagem, os pinos GPIO0 e GPIO2, que são os dois disponíveis no ESP-01, são usados para o sistema de boot (GPIO15 também é utilizado, mas no ESP-01 ele é mantido em nível 0 por um resistor de pull down). Isso impacta na forma como podemos utiliza-los em nossos circuitos, pois temos que manter os estados deles em nível alto na inicialização e reset do sistema.

Para manter o nível alto, devemos ter resistores de pull up nesses dois pinos, o valor deste resistores pode variar entre 2KR a 10KR.

GPIO0 e GPIO2 como Output

Com os resistores de pull up, devemos fazer o acionamento de nossos dispositivos externos em nível baixo, mantendo os resistores em paralelo. A imagem abaixo mostra como podemos acionar um rele através de um optoacoplador e um led com do ESP-01.

Configuração elétrica para usar os GPIOs do ESP8266-01 como Output.
Figura 2 – GPIOs como Output.

Utilizamos resistores de 3K3R para manter o nível dos pinos no reset, quando o firmware do ESP subir, mantemos o nível alto destes pinos e quando desejarmos acionar a carga enviamos nível baixo para o respectivo pino.

GPIO0 e GPIO2 como Input

Para utilizarmos os pinos como entrada, a princípio, a lógica seria a mesma. Mante-los em nível alto na inicialização através de resistores e após o firmware iniciar passarmos a ler nível baixo como acionamento. Isso é verdade quando podemos afirmar que na inicialização as entradas não estarão acionadas.

Imagine um interruptor/botão que envia nível 0 quando ligado/pressionado, se o ESP, por algum motivo, reiniciar com o interruptor ligado, o módulo não ira inicializar o firmware e o projeto ira travar.

Para evitar esse problema podemos fazer um truque que nos garante que o módulo sempre ira inicializar corretamente. Em contrapartida iremos perder uma entrada. Veja o circuito a seguir.

Configuração elétrica para usar os GPIOs do ESP8266-01 como Input.
Figura 3 – GPIOs como Input.

No circuito utilizamos uma chave ligada entre os GPIO0 e 2, nesse caso, independente da posição da chave, na inicialização do ESP os resistores de pull up irão garantir o boot corretamente.

O truque está após o boot, quando nosso firmware for executado não precisamos se preocupar mais com o estado dos pinos, então na função setup() (caso estiver usando a IDE do Arduino) configuramos o GPIO0 como saída e escrevemos 0 nele. Assim, se a chave estava fechada, só neste momento ela irá enviar nível 0 para o GPIO2. Na função loop() podemos fazer a leitura do GPIO2 sem nenhum problema.

Conclusão

O ESP-01 é muito útil e fácil de ser encontrado mas é preciso estar atento para não travar em alguns obstáculos que ele nos impõe. Aprendi por experiência própria e aqui está a dica para que você não caia nessa também. Tem alguma dúvida ou alguma dica que gostaria de passar? Deixe seu comentário e compartilhe seu conhecimento conosco.

Referências

Créditos para a imagem de destaque.

Formado em Engenharia Elétrica com ênfase em Eletrônica pela Universidade São Judas Tadeu em 2014, atua em São Paulo com desenvolvimento de sistemas embarcados para controle de acesso.
Apaixonado por eletrônica e sistemas embarcados, teve seu primeiro contato com microcontroladores no ensino técnico em 2008 e desde então utiliza-os em suas "invenções".

Notificações
Notificar
guest
28 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Reginaldo Assis
Reginaldo Assis
04/08/2021 13:41

Pelo que vi no datasheet, o GPIO0 corresponde ao pino 15 e GPIO2 ao pino 14. Como na programação na IDE Arduino colocam PinMode(0, OUTPUT) e DigitalWrite(0, LOW). Que zero é esse? Não seria 14 ou 15?
Desde já, Agradeço!
Parabéns pelo excelente artigo!
Reginaldo Assis, Bahia

Rubens Junior
Rubens Junior
14/07/2021 08:42

Ótimo! Parabéns!

Hamanda
Hamanda
16/10/2020 14:36

Como faço ligaçoes nos pinos 0 1 2 e 3 do esp 01?

Eduardo
Eduardo
11/06/2020 15:34

Ola, qual é a corrente max dos GPIO?

Alexandre
Alexandre
26/08/2019 10:51

Bom dia.

Estou iniciando nesse mundo….e comprei o esp8266 é juntantamente com um conjunto rele aciona duas lâmpadas via comando blink. Porém quando cai a energia …e o ESP reinicia ele liga a lampadas . Tem algum comando de programação para eu reset as output imediatamente quando a energia e restabelecida? Obrigado

Olinto Godinho
Olinto Godinho
Reply to  Alexandre
04/03/2020 11:00

Bom dia Alexandre. Coloque no sketch (definições) que GPIO 0 e 2 fiquem em estado de desligado (LOW ou HIGH dependendo do hardware).
No caso dos relés tambem resolve-se usar os contatos NORMALMENTE FECHADOS ou ABERTOS (NO ou NC). Abs.

vinicius
vinicius
17/04/2019 10:12

Bom dia, gostaria de utilizar um dos pinos GPIO como interrupção isso é possivel ?

Demétrio
Demétrio
30/09/2018 18:24

Boa noite. Como faço para gravar códigos no arduino sem utilizar o cabo USB? Este módulo permite fazer isso? Obrigado.

Diego Araujo
Diego Araujo
04/06/2018 11:22

Gostaria de usar o GPIO 2 como INPUT_PULLUP para ao pressionar um botao ligar meu dispositivo em um modo de configuração e aprendizagem dentro do meu algoritmo. O GND por ser ligado direto ao GPIO 2 ou precisa de um resistor de 10k?

Renan
Renan
25/02/2018 12:09

Bom dia Josemar!
No meu circuito, o GPIO0 faz o acionamento de um relé através de um transistor.
Quando ligo o circuito na rede, a GPIO0 do ESP emite uma pequena corrente e isso faz a luz que está conectada no rele piscar. Após o boot, funciona perfeitamente. Existe alguma forma de fazer com que quando dê o boot no circuito eu “jogue fora” essa corrente inicial do GPIO0?
Muito obrigado!

Marinaldo Abdon
Marinaldo Abdon
04/12/2017 09:41

Amigo, bom dia. Eu gostaria de usar as GPIOs 0 e 2 como saídas. Consigo fazer a GPIO 2 funcionar ativando um relê em nível baixo (0), mas não consigo ativar o outro relê também com nível baixo pela GPIO 0, quando o microcontrolador dá o boot ele ativa momentaneamente o relê, como se estivesse em nível baixo, depois desliga como se estivesse em nível alto, aí não consigo ativar essa saída em nível baixo. Você pode me ajudar???

Marinaldo Sousa Abdon
Marinaldo Sousa Abdon
Reply to  Josemar Alves
20/03/2018 10:15

Caro Josemar, bom dia. Desculpe-me não ter disponibilizado o circuito que estou usando, estive ausente a trabalho e retornei agora. Vou explicar o que estou tentando fazer. Pois bem, tenho alguns ESP8266-01 e estou tentando implementar um circuito que viabilize o uso de alguns sensores, HC SR501 (sensor de presença), ou seja, quero usar um pino como entrada do sinal do sensor e o outro pino como saída para acionar um relê em nível zero que acionará um sirene. Eu não consegui fazer com que o ESP leia o sinal do sensor e libere o sinal baixo para acionar o… Leia mais »

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H