ESP8266: GPIO no módulo ESP-01

esp8266_esp01_automalabs

ESP-01_pinout_automalabs

O problema: o ESP-01 tem apenas dois GPIO disponíveis: GPIO0 e GPIO2 e ambos são usados no processo de boot do chip.

Por que é tão limitado ?

O meu melhor palpite é que ele não foi mesmo feito para isso. Quando o ESP-01 surgiu não existia essa facilidade que temos hoje para programá-lo diretamente. O fabricante do módulo, AI Thinker, criou um firmware que respondia a comandos AT e esse módulo foi criado para basicamente dar Wi-Fi a um projeto usando outro microcontrolador, como um Arduino. O módulo não precisava de GPIO para isso e o microcontrolador podia se comunicar por TX e RX e controlar seu status e até resetá-lo através dos pinos RST e CH_PD.

Para usar como saídas

Qualquer que seja o caso é recomendável que você tenha resistores de pull-up em ambos e assim o sinal ativo seja “LOW”.

Você pode usar ambos GPIO0 e GPIO2 como saídas, mas eu só recomendo no momento para LEDs e para i2C. GPIO2 especificamente é o TX da “hardware UART” na inicialização e por isso “pisca”. Acionar um relê com ele pode não ser uma boa ideia. GPIO0 parece ser seguro para relês mas ainda não estou certo disso.

Eu costumo usar assim e até agora não notei nenhum problema. Alguns recomendam colocar um pull-up de 4k7 ou 3k3 em paralelo com cada conjunto, mas ainda não vi real necessidade para isso:

ESP-01_output_leds

 

Para usar como entrada

Se qualquer um dos dois pinos estiver em nível baixo o ESP8266 poderá não inicializar. Você pode contornar o problema usando um dos GPIO como saída para ativar o uso do outro como entrada conforme mostra o último exemplo desta página, que é muito confuso por isso refiz assim:

ESP-01_GPIO

Durante o boot não importa se a chave S1 está aberta ou fechada, os resistores manterão GPIO0 e GPIO2 em nível alto. Quando rodar o programa você coloca GPIO2 como saída e em nível baixo, assim:

pinMode(2, OUTPUT);
digitalWrite(2, LOW);

Agora GPIO0 pode ser HIGH ou LOW dependendo da posição da chave. E assim você ganha uma entrada.

Mas o modo mais simples e “seguro” de ter uma entrada no ESP-01 é usar o pino RX da serial. Ele pode ser “liberado” no sketch com uma linha assim:

Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);

É claro que você não vai poder transmitir nada para esse sketch, mas vai poder receber normalmente pela serial.

Outro modo, mais complicado, de expandir a capacidade de I/O do ESP-01 é usando i2C. Basta um chip como o PCF8574 para transformar GPIO0 e GPIO2 em até oito entradas/saídas perfeitamente usáveis.

 

ESP-01_PCF8574_I2C

 

 

This entry was posted in Informação and tagged . Bookmark the permalink.

2 Responses to ESP8266: GPIO no módulo ESP-01

  1. Miquéias Azevedo says:

    Olá, Jefferson!

    Tudo bem?

    Cara, sou um entusiasta e iniciante nesta área e estou tentando automatizar um interruptor de uma lampada com o ESP 01 e um modulo rele já com as entradas e alimentação devidamente definidas, conforme a imagem deste link (https://cdn.awsli.com.br/1000×1000/346/346010/produto/28602692/898c92f83b.jpg). No entanto estou querendo utilizar mais um GPIO do ESP como entrada para um interruptor capacitivo touch, como o HTTM (https://http2.mlstatic.com/D_NQ_NP_735336-MLB43085265264_082020-O.webp) ou o TTP223B (https://http2.mlstatic.com/D_NQ_NP_941549-MLB31720972487_082019-O.webp).
    Gostaria de saber se é possível através dos métodos que mostrou aqui, sem a utilização do expansor, e se funcionaria bem.
    Como eu disse, sou um entusiasta e não entendo quase nada de eletrônica e por ainda tenho dificuldades de entender os esquemas nas imagens..rs.

    Apesar de não entender muito o seu post foi o mais claro pra mim. Parabens!

    Desde já, muito obrigado.

    • Jefferson says:

      Eu não vendo, nem tenho esses produtos, por isso não posso garantir que é possível e muito menos se funcionaria bem. O que posso dizer é que teoricamente pode ser feito, se você reprogramar o RX da serial como entrada. Alternativamente pode funcionar usando GPIO0 ou GPIO2 (o que estiver sobrando no módulo de relé) se a saída do interruptor capacitivo for ativa em nível baixo, ou seja, enquanto ninguém estiver com o dedo em cima o nível na saída for alto.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *