FAVORITAR
FecharPlease login

Configurando GPIO 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.

No dia 25 de Junho de 2024, ocorrerá o “Seminário de Sistemas Embarcados e IoT 2024“, no Holiday Inn Anhembi — Parque Anhembi, São Paulo–SP.

Garanta seu ingresso

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.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
29 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Edson Botelho
Edson Botelho
16/01/2022 15:45

Boa tarde Josemar Estou tentando usar o GPIO0 e o GPIO2 do ESP 01 com um circuito que montei da seguinte forma: GPIO0 como INPUT e GPIO2 como OUTPUT que vai acionar um relé que abrirá uma fechadura elétrica, porém na inicialização do ESP o GPIO2 dá um pulso que quer dizer que se faltar energia e após a volta da energia o portão abrirá, estou usando a biblioteca SINRIC e já inseri o valor LOW para este pio no setup, mas ainda assim o pulso continua. Tem alguma idéia do que pode estar ocorrendo? Obs: estou usando resistor de… Leia mais »

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!

Home » Arduino » Configurando GPIO do ESP8266-01

EM DESTAQUE

WEBINARS

LEIA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste:


Seminário de
Sistemas Embarcados e IoT 2024
 
Data: 25/06 | Local: Hotel Holiday Inn Anhembi, São Paulo-SP
 
GARANTA SEU INGRESSO

 
close-link