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.

 

 

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.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Josemar Alves de Carvalho
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".

22
Deixe um comentário

avatar
 
11 Comment threads
11 Thread replies
4 Followers
 
Most reacted comment
Hottest comment thread
11 Comment authors
AlexandreviniciusDemétrioDiego AraujoMarinaldo Sousa Abdon Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Alexandre
Visitante
Alexandre

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

vinicius
Visitante
vinicius

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

Demétrio
Visitante
Demétrio

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
Visitante
Diego Araujo

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
Visitante
Renan

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
Visitante
Marinaldo Abdon

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
Visitante
Marinaldo Sousa Abdon

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 »

Roberto Peixoto
Visitante
Roberto Peixoto

Muito bom o artigo, mas infelizmente ainda estou com muitas dúvidas. Sou aluno de engenharia de telecomunicações e preciso fazer um projeto que consiste em medir um reservatório de água em tempo real, sendo que precisa de uma interface para um usuário comum usar o projeto. Já comprei o esp8266-01 e o sensor ultra sônico HC-sr40. Estou tentando configurar o esp para que ele leia os dados do sensor sem nenhum outro auxílio, sebdo que o projeto precisa ter um sinal luminoso ou sonoro. Você acha que da para configurar alguma porta GPIO do ezp para ligar o sinal luminoso?… Leia mais »

Josemar Alves de Carvalho
Visitante
Josemar

Ola Roberto, fico feliz que tenha gostado do artigo.

Referente ao seu projeto, vc citou que está usando os pinos TX e RX com o sensor HC-SR40, nesse caso está utilizando esses pinos como GPIO, correto?

Tem um artigo do Pedro Bertoleti aqui no embarcados que pode te ajudar com esse projeto: https://www.embarcados.com.br/vazao-sensor-ultra-sonico-de-distancia/

Você ainda tem os pinos GPIO0 e GPIO2 disponíveis, é só configurar ambos como saída e utilizar como quiser, a atenção que deve ter é quanto ao estado desses pinos na inicialização. Utilize o circuito que sugeri nesse artigo que irá funcionar (Figura 2).

Abraço.

RAFAEL CENTENARO
Visitante
RAFAEL CENTENARO

Olá Josemar, parabéns pelo artigo. Estou iniciando os estudos com o módulo esp8266, e criei um circuito para acionar dois relés, utilizando os gpios 0 e 2. Durante o processo de boot os relés são acionados (Apenas um pulso), este comportamento irá comprometer a ideia do projeto que seria acionar o portão eletrônico. Existe uma forma de contornar isso? Basicamente seria trocar os gpios por 1 e 3 ?

Josemar Alves de Carvalho
Visitante
Josemar

Ola Rafael, que bom que curtiu o artigo.

Para usar os GPIOs 0 e 2 como saída você apenas deve ser preocupar em manter ambos em nível alto na inicialização e acionar os reles em nível baixo, assim como descrevi no artigo.
Em que nível você está acionando os reles?

RAFAEL CENTENARO
Visitante
RAFAEL CENTENARO

Acho que não entendi esta questão de nível, você esta se referindo ao resistor utilizado? Utilizei resistores de 1KΩ 1/4W. Programei via UART, minha ideia e utilizar o modulo de forma standalone. Obrigado pelo retorno.

Josemar Alves de Carvalho
Visitante
Josemar

Me refiro ao nível lógico (0 ou 1) dos pinos.

Utilize resistores ligados ao pinos 0 e 2 e ao VCC (5V), isso garante nível lógico alto (1) na inicialização.

Monte seu circuito para acionar os reles colocando os pinos 0 e 2 em nível lógico baixo (0).

Pode enviar seu circuito também para avaliar como está sua ligação.

Abraço.

RAFAEL CENTENARO
Visitante
RAFAEL CENTENARO

Hehe agora entendi. No setup estou inicializando os pinos 0 e 2 com nível baixo, quando desejo ligar um dos relés utilizo o nível alto, a corrente positiva dos pinos ira acionar o rele através de um transistor NPN. Se eu iniciar com nível alto os reles ficarão ligados apos iniciar o modulo esp8266. Estou enviando meu circuito para sua avaliaçãocomment image . Valeu mesmo ai pela força.

Abraço

Josemar Alves de Carvalho
Visitante
Josemar

No artigo, onde tem a demonstração de uso do GPIO0 e 2 como saída (output) tem um circuito sugerido de como ligar.
Use esse circuito para testar seu projeto, com ele você irá acionar os reles em nível baixo.
No circuito foi usado um módulo rele para arduino, substitua por um transistor PNP e um rele.

Abraço.

RAFAEL CENTENARO
Visitante
RAFAEL CENTENARO

Show de bola, valeu pelas dicas, vou fazer um teste assim que tiver um tempinho.

Abraço.

Renan
Visitante
Renan

Josemar, uma força.... no meu caso eu preciso usar os dois pinos sendo um como INPUT e outro como OUTPUT. É possível?

Souza
Visitante
Souza

Muito bom.
Já vou ficar esperto. Mais esperto.