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:
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:
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.
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.
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.
Ola. Estou trabalhando com o modulo relé junto com o ESP 01. Ao energizar o modulo com o ESP ocorre a troca rápida de estado do relé. Energizando e em seguida desligando. Teria alguma forma de tentar manter o estado das saídas ou em nível lógico baixo ou alto? Gostaria que o relé mudasse sua condição apenas com a programação.
Obrigado.
Leandro