ESP8266 - Botão - Relé

Este tutorial ensina você a usar o ESP8266 e um botão para controlar o relé. Ao conectar o relé a uma trava solenoide, lâmpada, fita LED, motor ou atuador..., podemos usar um botão para controlá-los. Vamos aprender duas aplicações diferentes:

Aplicação 1 - O estado do relé é sincronizado com o estado do botão. Em detalhes:

Aplicação 2 - O estado do relé é alternado a cada vez que o botão é pressionado. Mais especificamente:

Na Aplicação 2, precisamos fazer o debounce do botão para garantir que ele funcione corretamente. Vamos ver por que isso é importante comparando como o relé se comporta quando usamos o código do ESP8266 com e sem o debounce do botão.

Sobre Relé e Botão

Se você não está familiarizado com relé e botão (incluindo pinagem, funcionamento e programação), os tutoriais a seguir podem ajudar:

Diagrama de Ligação

Diagrama de ligação do ESP8266 NodeMCU com botão e relé

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.

Aplicação 1 - O estado do relé está em sincronia com o estado do botão

Código ESP8266

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-button-relay */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button's pin #define RELAY_PIN D7 // The ESP8266 pin D7 connected to relay's pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // Configure the ESP8266 pin to the input pull-up mode pinMode(RELAY_PIN, OUTPUT); // Configure the ESP8266 pin to the output mode } void loop() { int button_state = digitalRead(BUTTON_PIN); // read new state if (button_state == LOW) { Serial.println("The button is being pressed"); digitalWrite(RELAY_PIN, HIGH); // turn on } else if (button_state == HIGH) { Serial.println("The button is unpressed"); digitalWrite(RELAY_PIN, LOW); // turn off } }

Passos Rápidos

Para começar com o ESP8266 no Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Faça a ligação dos componentes conforme mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Conecte um ESP8266 ao seu computador com um cabo USB.
  • Abra o Arduino IDE e selecione a placa e a porta corretas.
  • Copie o código e abra-o no Arduino IDE.
  • Clique no botão Upload no Arduino IDE para compilar e fazer o upload do código para o ESP8266.
Arduino IDE Upload Code
  • Pressione o botão e segure-o por alguns segundos.
  • Confira a mudança no estado do relé.

Você verá que o estado do relé está em sincronia com o estado do botão.

Explicação do Código

Confira a explicação linha por linha contida nos comentários do código-fonte!

Aplicação 2 - Botão alterna o Relé

Código ESP8266 - Botão Alterna o Relé Sem Debounce

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-button-relay */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button's pin #define RELAY_PIN D7 // The ESP8266 pin D7 connected to relay's pin int relay_state = LOW; // The current state of relay int button_state; // The current state of button int last_button_state; // The previous state of button void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // Configure the ESP8266 pin to the input pull-up mode pinMode(RELAY_PIN, OUTPUT); // Configure the ESP8266 pin to the output mode button_state = digitalRead(BUTTON_PIN); } void loop() { last_button_state = button_state; // save the last state button_state = digitalRead(BUTTON_PIN); // read new state if (last_button_state == HIGH && button_state == LOW) { Serial.println("The button is pressed"); // toggle state of relay relay_state = !relay_state; // control relay according to the toggled state digitalWrite(RELAY_PIN, relay_state); } }

Explicação do Código

Você pode encontrar a explicação nas linhas de comentário do código do ESP8266 acima.

No código, a expressão relay_state = !relay_state é equivalente ao seguinte código:

if(relay_state == LOW) relay_state = HIGH; else relay_state = LOW;

Passos Rápidos

  • Copie o código e abra-o no Arduino IDE.
  • Faça o upload do código para o ESP8266.
  • Pressione e solte o botão várias vezes.
  • Confira a mudança no estado do relé.

Você pode notar que o relé liga ou desliga toda vez que você pressiona o botão, mas isso pode nem sempre acontecer da mesma forma. Às vezes ele pode alternar rapidamente várias vezes com apenas uma pressão do botão, ou pode não alternar de forma alguma (alternar duas vezes muito rápido, o que não dá para ver a olho nu).

⇒ Para resolver esse problema, precisamos fazer o debounce do botão.

Código ESP8266 - Botão Alterna o Relé Com Debounce

Fazer o debounce de um botão pode ser desafiador para iniciantes. Felizmente, a biblioteca ezButton torna isso fácil.

Por que o debounce é necessário? Veja o tutorial ESP8266 - Debounce de Botão para mais informações.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-button-relay */ #include <ezButton.h> #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button's pin #define RELAY_PIN D7 // The ESP8266 pin D7 connected to relay's pin ezButton button(BUTTON_PIN); // create ezButton object for pin 7; int relay_state = LOW; // The current state of relay void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(RELAY_PIN, OUTPUT); // Configure the ESP8266 pin to the output mode button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if (button.isPressed()) { Serial.println("The button is pressed"); // toggle state of relay relay_state = !relay_state; // control relay according to the toggled state digitalWrite(RELAY_PIN, relay_state); } }

Passos Rápidos

  • Instale a biblioteca ezButton. Consulte o Como Fazer para ver as instruções.
  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP8266.
  • Pressione e solte o botão várias vezes.
  • Confira a mudança no estado do relé.

Você vai notar que o relé liga ou desliga apenas uma vez sempre que você pressiona o botão.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!