ESP8266 - Botão
Este tutorial ensina você a usar o ESP8266 com um botão. Em detalhes, vamos aprender:
- Como conectar o botão ao ESP8266
- Como programar o ESP8266 para ler o estado do botão
- Como programar o ESP8266 para detectar os eventos de pressionar e soltar o botão.
- Como evitar o problema de entrada flutuante ao usar o botão com o ESP8266.
- Como evitar o problema de chattering ao usar o botão com o ESP8266.
O botão é conhecido por outros nomes, como botão de pressão, botão tátil ou chave momentânea. É um componente comum usado em muitos projetos com ESP8266 e é fácil de usar. No entanto, ele pode confundir iniciantes por causa de seus aspectos mecânicos e físicos e das formas como pode ser usado. Este tutorial facilita as coisas para quem está começando.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Ao trabalhar com um botão, os iniciantes costumam encontrar dois problemas:
1. Problema de entrada flutuante:.
- Sintoma: O valor lido no pino de entrada não corresponde ao estado de pressionamento do botão.
- Causa: Um resistor de pull-up ou pull-down não está sendo usado com o pino de entrada.
- Solução: Use um resistor de pull-up ou pull-down, como ensinado neste tutorial.
2. Fenômeno de chattering:.
- Sintoma: Apesar de ser pressionado uma só vez, o botão faz o código do ESP8266 detectar vários pressionamentos.
- Causa: O estado do botão (ou da chave) oscila rapidamente entre LOW e HIGH devido a questões mecânicas e físicas.
- Solução: O tutorial ESP8266 - Botão - Debounce explica como usar o debounce para resolver esse problema.
Esse é um fator que só deve ser considerado em aplicações que exigem detecção precisa do pressionamento.
A Pinagem do Botão
Existem vários tipos de botões de pressão, que podem ser divididos em dois grandes grupos:
- Botão de pressão para montagem em PCB (adequado para montar em uma protoboard)
- Botão de pressão para montagem em painel

Um botão para montagem em PCB normalmente tem quatro pinos.

No entanto, esses pinos são conectados em pares internamente. Assim, só precisamos usar dois dos quatro pinos, que não estão conectados entre si por dentro.
Existem quatro maneiras de conectar ao botão, duas delas simétricas (como mostrado na imagem).

? Por que um botão tem quatro pinos se usamos só dois deles?
⇒ Para garantir que ele fique firmemente montado na PCB (placa de circuito impresso) e aguente a pressão.
Um botão para montagem em painel geralmente tem dois pinos.

O módulo de botão de pressão inclui um resistor de pull-down embutido, que garante que a saída permaneça em LOW quando o botão não está pressionado. Ele tem três pinos:
- GND: Conecte este pino ao terra.
- VCC: Conecte este pino a uma fonte de alimentação de 3.3V.
- OUT: Conecte este pino a uma entrada digital do seu ESP8266.
Com essa configuração, o módulo gera LOW quando o botão não está pressionado e gera HIGH quando o botão está pressionado.
Como Funciona
- Quando o botão não está pressionado, o pino A não está conectado ao pino B.
- No entanto, quando o botão é pressionado, o pino A é conectado ao pino B.

ESP8266 - Botão
Um pino do botão é conectado ao VCC ou ao GND. O outro pino é conectado a um pino do ESP8266. Verificando o estado de um pino do ESP8266 configurado como entrada, podemos determinar se um botão foi pressionado ou não.
Estado do Botão e Estado de Pressionamento
A conexão entre o botão e o ESP8266, assim como a configuração do pino do ESP8266, determinam a relação entre o estado do botão e o estado de pressionamento.
Há duas maneiras de usar um botão com o ESP8266:
- Um pino do botão é conectado ao VCC, e o outro é conectado a um pino do ESP8266 com um resistor de pull-down
- Quando o botão é pressionado, o estado do pino do ESP8266 será HIGH. Caso contrário, o estado do pino será LOW
- Podemos usar um resistor interno ou externo. O resistor interno já está embutido no ESP8266 e pode ser configurado pelo código do ESP8266.
- Quando o botão é pressionado, o estado do pino do ESP8266 será LOW. Caso contrário, o estado do pino será HIGH
- Podemos usar um resistor interno ou externo. O resistor interno já está embutido no ESP8266 e pode ser configurado pelo código do ESP8266.
※ Nota:
Se não seguirmos a melhor prática, o estado do pino de entrada ficará “flutuante” quando o botão NÃO estiver pressionado. Isso significa que o estado pode ser HIGH ou LOW (instável, não fixo), resultando em detecção errada.
- A pior prática: inicializar o pino do ESP8266 como entrada (usando pinMode(BUTTON_PIN, INPUT)) e NÃO usar nenhum resistor de pull-down/pull-up externo.
- A melhor prática: inicializar o pino do ESP8266 como entrada com pull-up interno (usando pinMode(BUTTON_PIN, INPUT_PULLUP)). NÃO é preciso usar nenhum resistor de pull-down/pull-up externo.
Para simplificar, este tutorial usa a abordagem mais básica: inicializar o pino do ESP8266 como entrada com pull-up interno, sem usar um resistor externo. Os iniciantes não precisam se preocupar em ligar o resistor de pull-up/pull-down. Tudo o que precisam fazer é escrever o código do ESP8266.
Diagrama de Ligação
- Diagrama de ligação entre o ESP8266 e o botão para montagem em PCB

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
- Diagrama de ligação entre o ESP8266 e o botão para montagem em painel

This image is created using Fritzing. Click to enlarge image
Como Programar o Botão
- Usando a função pinMode(), configure o pino do ESP8266 como entrada com pull-up interno. Por exemplo, o pino D7:
- Acesse o estado do pino do ESP8266 usando a função digitalRead().
※ Nota:
Existem dois casos de uso comuns:
- O primeiro é executar uma ação se o estado de entrada for HIGH e fazer algo inverso se o estado de entrada for LOW.
- O segundo é executar uma ação quando o estado de entrada muda de LOW para HIGH (ou de HIGH para LOW).
Escolhemos um deles dependendo da aplicação. Por exemplo, se quisermos usar um botão para controlar um LED:
- Se a intenção é que o LED fique ON quando o botão está pressionado e OFF quando o botão NÃO está pressionado, deve-se usar o primeiro caso de uso.
- Se o objetivo é que o LED alterne entre ON e OFF a cada vez que o botão é pressionado, deve-se usar o segundo caso de uso.
Como detectar a mudança de estado de LOW para HIGH
Código ESP8266
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
- Veja o tutorial como configurar o ambiente para ESP8266 na Arduino IDE se esta for a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (ex.: NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Conecte o ESP8266 ao seu computador com um cabo USB.
- Abra a Arduino IDE, selecione a placa e a porta corretas.
- Copie o código abaixo e abra na Arduino IDE.
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para a placa ESP8266.

- Abra o Serial Monitor.
- Pressione e solte o botão várias vezes.
- Confira o resultado no Serial Monitor.
1 é HIGH,. 0 é LOW.
Explicação do Código
Confira a explicação linha por linha contida nos comentários do código-fonte!
Modificando o Código ESP8266
Vamos mudar o código para que ele detecte quando ocorre um evento de pressionar e soltar.
Passos Rápidos
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (ex.: NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Altere o código da seguinte forma:
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para o ESP8266.

- Abra o Serial Monitor.
- Pressione o botão e mantenha-o pressionado.
- Solte o botão e observe o resultado no Serial Monitor.
※ Nota:
Mesmo que você pressione e solte o botão apenas uma vez, a saída no Serial Monitor pode mostrar vários eventos de pressionado e solto. Esse é o comportamento esperado do botão. Isso é conhecido como "fenômeno de chattering". Para mais informações, consulte o tutorial ESP8266 - Debounce de Botão.
※ Nota:
- Desenvolvemos uma biblioteca, chamada ezButton, para facilitar a vida de quem está começando, principalmente ao usar vários botões. Saiba mais sobre a biblioteca ezButton aqui.
- Se você estiver usando o módulo de botão, configure o pino no modo de entrada usando pinMode(BUTTON_PIN, INPUT). Com essa configuração, o módulo gera LOW quando o botão não está pressionado e HIGH quando o botão está pressionado.
Vídeo
Desafie-se
- Quando o botão for pressionado, acenda o LED.
- Quando o botão não estiver pressionado, apague o LED.
- A cada vez que o botão for pressionado, alterne o LED entre ON e OFF.
Conhecimento Adicional
- Em quais momentos NÃO devemos usar um resistor de pull-down/pull-up em um pino de entrada? 2. Quando não devemos utilizar um resistor de pull-down/pull-up em um pino de entrada?
- Se o sensor tem estados fechado ou aberto, é necessário um resistor de pull-up ou pull-down para fazer esses estados virarem LOW e HIGH. Exemplos desses sensores são botão de pressão, chave, chave de contato magnético (sensor de porta).
- Por outro lado, se o sensor tem dois níveis de tensão definidos (LOW e HIGH), um resistor de pull-up ou pull-down não é necessário. Exemplos desses sensores são sensor de movimento e sensor de toque.