ESP8266 - Botão - Debounce
Quando um botão é pressionado ou solto, ou uma chave é acionada, os iniciantes costumam achar que o estado muda de LOW para HIGH ou de HIGH para LOW. Na realidade, não é isso que acontece. Por causa de características mecânicas e físicas, o estado do botão (ou da chave) pode oscilar entre LOW e HIGH várias vezes em uma única ação do usuário. Isso é conhecido como chattering. O chattering pode fazer com que um único aperto seja lido como vários apertos, causando mau funcionamento em certas aplicações.

O método para evitar esse problema é chamado de debouncing ou debounce. Este tutorial ensina você a fazer isso ao usar o botão com o ESP8266. Vamos aprender pelos passos abaixo:
- Código ESP8266 sem debounce de um botão.
- Código ESP8266 com debounce de um botão.
- Código ESP8266 com debounce de um botão usando a biblioteca ezButton.
- Código ESP8266 com debounce para vários botões.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Se você não está familiarizado com botões (incluindo pinagem, funcionamento e programação), os tutoriais a seguir podem ajudar:
Diagrama de Ligação

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.
Vamos ver o código ESP8266 COM e SEM debounce e comparar o comportamento de cada um.
Lendo o Botão sem Debounce
Antes de explorar o debounce, veja o código sem ele e observe o comportamento.
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 seu ESP8266 ao computador usando um cabo USB.
- Abra a Arduino IDE e selecione a placa e a porta apropriadas.
- 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 o ESP8266.

- Abra o Serial Monitor.
- Mantenha o botão pressionado por alguns segundos e depois solte.
- Confira a saída no Serial Monitor.
Você pode notar que, às vezes, você pressionou e soltou o botão apenas uma vez. Mesmo assim, o ESP8266 percebe como vários apertos e solturas. Esse é o fenômeno de chattering mencionado no início do tutorial. Vamos ver como corrigir isso na próxima parte.
Lendo o Botão com Debounce
O código abaixo aplica o método chamado debounce para evitar o fenômeno de chattering.
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.
- Copie o código acima e abra com a Arduino IDE.
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para o ESP8266.
- Abra o Serial Monitor.
- Mantenha o botão pressionado por alguns segundos e depois solte.
- Veja o resultado no Serial Monitor.
Como você pode observar, você pressionou e soltou o botão apenas uma vez. O ESP8266 consegue detectar isso como um único aperto e uma única soltura, eliminando qualquer chattering desnecessário.
Deixamos Simples - Código de Debounce de Botão para ESP8266 com Biblioteca
Desenvolvemos uma biblioteca, a ezButton, para facilitar a vida de quem está começando, especialmente ao usar vários botões. Saiba mais sobre a biblioteca ezButton aqui.
Código de Debounce de Botão para ESP8266 para um Único Botão
Código de Debounce de Botão para ESP8266 para Vários Botões
O esquema para o código acima:. A ilustração da ligação para o código:. A representação das conexões para o código:

This image is created using Fritzing. Click to enlarge image
Vídeo
Conhecimento Adicional
- O valor de DEBOUNCE_DELAY depende das características físicas do botão. Cada botão pode ter um valor diferente.
Extensibilidade
A técnica de debounce pode ser usada para chaves, sensores de toque e mais.