Arduino Nano ESP32 - Botão
O botão é um componente básico e muito usado em muitos projetos com o Arduino Nano ESP32. Ele não é tão simples quanto parece (por causa das características mecânicas e físicas). Iniciantes podem ter muitos problemas com ele. Este tutorial deixa tudo mais fácil para os iniciantes. Vamos começar!
※ Nota:
Antes de apresentar o botão, queremos avisar que existem dois erros comuns que os iniciantes costumam cometer:
- O problema da entrada flutuante:
- Sintoma: Ao conectar um botão ao pino de entrada do Arduino Nano ESP32, o estado do pino de entrada é aleatório e não corresponde ao estado de pressionamento do botão.
- Causa: O pino do botão NÃO usa um resistor pull-down nem um resistor pull-up.
- Solução: ⇒ Use um resistor pull-down ou um resistor pull-up no pino de entrada. Os detalhes serão descritos mais adiante neste tutorial.
- Sintoma: O código no Arduino Nano ESP32 lê o estado do botão e identifica o evento de pressionamento detectando a mudança de estado (HIGH para LOW, ou LOW para HIGH). Quando o botão é realmente pressionado só uma vez, o código do Arduino Nano ESP32 detecta vários pressionamentos em vez de um só.
- Causa: Por causa das características mecânicas e físicas, quando você pressiona o botão uma única vez, o estado do pino de entrada alterna rapidamente entre LOW e HIGH várias vezes em vez de apenas uma
- Solução: ⇒ Debounce. Os detalhes serão descritos no tutorial Arduino Nano ESP32 - Botão - Debounce.
O fenômeno de chattering causa mau funcionamento apenas em alguns tipos de aplicação que precisam detectar exatamente o número de pressionamentos. Em outros tipos de aplicação, ele é inofensivo.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
O botão de pressão, também chamado de pushbutton, botão tátil ou chave momentânea, é um tipo de chave que fecha quando é pressionado e mantido, e abre quando é solto. Existem vários tipos de botões de pressão, divididos em dois grandes grupos:
- Botões de pressão para montagem em PCB (adequados para montagem em protoboard)
- Botões de pressão para montagem em painel

Pinagem do Botão
Um botão para montagem em PCB geralmente tem quatro pinos ligados internamente em pares.

Só precisamos usar dois dos quatro pinos, que NÃO estejam no mesmo par conectado. Assim, existem quatro maneiras de ligar o botão (veja a imagem abaixo)

Na verdade, por causa da simetria, essas quatro maneiras se tornam duas. No restante deste tutorial, usaremos dois pinos: o Pino A e o Pino B, que não estão conectados entre si.
⇒ O botão recebe a força do usuário. Para ele ficar estável e firme na PCB (placa), ele tem quatro pinos para resistir à força do pressionamento.
Um botão para montagem em painel geralmente tem dois pinos.

O módulo de botão de pressão inclui um resistor pull-down embutido, que garante que a saída permaneça 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 Arduino Nano ESP32.
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 o Botão Funciona
- Quando o botão é pressionado, o pino A é conectado ao pino B
- Quando o botão NÃO é pressionado, o pino A NÃO é conectado ao pino B

Arduino Nano ESP32 - Botão
Um pino do botão é conectado a um pino de entrada digital do Arduino Nano ESP32. O outro pino é conectado ao VCC ou ao GND. No código do Arduino Nano ESP32, lendo o estado do pino de entrada, podemos saber se o botão está pressionado ou NÃO.
Estado da Entrada e Estado de Pressionamento
A relação entre o estado do pino de entrada e o estado de pressionamento do botão depende de como conectamos o botão ao Arduino Nano ESP32 e da configuração do pino do ESP32. Existem duas maneiras de usar um botão com o ESP32:
- Um pino do botão é conectado a um pino de entrada digital do ESP32, e o outro pino é conectado ao VCC:
- Um resistor pull-down DEVE ser usado
- Se o botão for pressionado, o estado do pino do ESP32 é HIGH. Caso contrário, o estado do pino do ESP32 é LOW
- Um resistor pull-up DEVE ser usado
- Se o botão for pressionado, o estado do pino do ESP32 é LOW. Caso contrário, o estado do pino do ESP32 é HIGH
※ Nota:
Se nenhum resistor pull-down nem pull-up for usado, o estado do pino de entrada fica aleatório entre HIGH e LOW (instável, não fixo) quando o botão NÃO está pressionado. Isso se chama “problema da entrada flutuante”. Isso resulta em mau funcionamento.
Para deixar tudo simples para os iniciantes, este tutorial recomenda fortemente o uso de um resistor pull-up interno no pino do Arduino Nano ESP32. Nenhum resistor externo é necessário. Isso economiza hardware e simplifica o diagrama de ligação.
Diagrama de Ligação entre o Botão e o Arduino Nano ESP32
- Diagrama de Ligação entre o Arduino Nano ESP32 e o botão para montagem em PCB

This image is created using Fritzing. Click to enlarge image
- Diagrama de Ligação entre o Arduino Nano ESP32 e o botão para montagem em painel

This image is created using Fritzing. Click to enlarge image
Como Programar o Botão
- Inicializa o pino do Arduino Nano ESP32 como entrada com pull-up interno usando a função pinMode(). Por exemplo, o pino D2:
- Lê o estado do pino de entrada usando a função digitalRead().
※ Nota:
Existem dois casos de uso muito comuns:
- O primeiro caso de uso: Se o estado da entrada é HIGH, faça algo. Se o estado da entrada é LOW, faça outra coisa.
- O segundo caso de uso: Se o estado da entrada mudou de LOW para HIGH, faça algo. Se o estado da entrada mudou de HIGH para LOW, faça outra coisa.
Dependendo da aplicação, um deles é usado. Por exemplo, ao usar um botão para controlar um LED:
- Se queremos ligar o LED quando o botão é pressionado e desligá-lo quando o botão NÃO é pressionado, DEVEMOS usar o primeiro caso.
- Se queremos alternar o LED entre ligado e desligado a cada vez que o botão é pressionado, DEVEMOS usar o segundo caso.
O código de exemplo abaixo mostra como detectar a mudança de estado de LOW para HIGH
Código Arduino Nano ESP32
Passos Rápidos
Para começar com o Arduino Nano ESP32, siga estes passos:
- Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente do Arduino Nano ESP32 na Arduino IDE.
- Ligue os componentes conforme o diagrama fornecido.
- Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
- Copie o código abaixo e cole na Arduino IDE.
- Compile e faça o upload do código para a placa Arduino Nano ESP32 clicando no botão Upload da Arduino IDE

- Abra o Serial Monitor na Arduino IDE

- Pressione e solte o botão várias vezes
- Veja o resultado no Serial Monitor. Ele se parece com o abaixo:
1 é HIGH, 0 é LOW.
Explicação do Código Linha por Linha
O código do Arduino Nano ESP32 acima contém uma explicação linha por linha. Por favor, leia os comentários no código!
Modificando o Código do Arduino Nano ESP32
Vamos modificar o código para detectar os eventos de pressionar e soltar
Passos Rápidos
- Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente do Arduino Nano ESP32 na Arduino IDE.
- Modifique o código como abaixo
- Compile e faça o upload do código para a placa Arduino Nano ESP32 clicando no botão Upload da Arduino IDE
- Abra o Serial Monitor na Arduino IDE
- Pressione o botão e depois solte
- Veja o resultado no Serial Monitor. Ele se parece com o abaixo:
※ Nota:
- O Serial Monitor pode imprimir vários eventos de pressionado e solto mesmo que você tenha pressionado e soltado só uma vez. Esse é um comportamento normal do botão. Esse comportamento é chamado de “fenômeno de chattering”. Em algumas aplicações, precisamos de um método para eliminá-lo. Você pode saber mais no tutorial Arduino Nano ESP32 - Debounce de Botão.
- Para deixar tudo simples para iniciantes, especialmente ao usar vários botões, criamos uma biblioteca chamada ezButton. Você pode saber mais sobre a biblioteca ezButton aqui.
- Ao usar o módulo de botão, configure o pino como pinMode(BUTTON_PIN, INPUT). O módulo gera LOW quando não está pressionado e HIGH quando está pressionado.
Vídeo
Conhecimento Adicional
- DEVEMOS: Se o sensor tem dois estados: fechado e aberto, ele precisa de um resistor pull-up ou pull-down para transformar esses estados em dois estados: LOW e HIGH. Por exemplo, botão de pressão, chave, chave de contato magnético (sensor de porta)...
- NÃO DEVEMOS: Se o sensor gera dois níveis de tensão (LOW e HIGH), ele NÃO precisa de um resistor pull-up ou pull-down. Por exemplo, sensor de movimento, sensor de toque ...