ESP8266 - Botón - Relé

Este tutorial te enseña cómo usar el ESP8266 y un botón para controlar el relé. Al conectar el relé a una cerradura de solenoide, una bombilla, una tira de LEDs, un motor o un actuador..., podemos usar un botón para controlarlos. Aprenderemos dos aplicaciones diferentes:

Aplicación 1 - El estado del relé está sincronizado con el estado del botón. En detalle:

Aplicación 2 - El estado del relé se alterna cada vez que se pulsa el botón. Más específicamente:

En la Aplicación 2, necesitamos aplicar anti-rebote al botón para asegurarnos de que funcione correctamente. Veremos por qué es importante al comparar cómo se comporta el relé cuando usamos el código para ESP8266 con y sin anti-rebote en el botón.

Acerca de Relay y Button

Si no estás familiarizado con el relé y el botón (incluyendo la disposición de pines, su funcionamiento y la programación), los siguientes tutoriales pueden ayudar:

Diagrama de Cableado

Diagrama de cableado del relé con botón ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Aplicación 1 - El estado del relé está sincronizado con el estado del botón

Código ESP8266

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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 } }

Pasos R\u00e1pidos

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el cómo configurar el entorno para ESP8266 en Arduino IDE tutorial si es la primera vez que usas ESP8266.
  • Conecta los componentes como se muestra en el diagrama.
  • Conecta la placa ESP8266 a tu computadora con un cable USB.
  • Abre Arduino IDE en tu computadora.
  • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM respectivo.
  • Conecta un ESP8266 a tu computadora con un cable USB.
  • Inicia Arduino IDE y selecciona la placa y el puerto correctos.
  • Copia el código y ábrelo en el Arduino IDE.
  • Haz clic en el botón Subir del Arduino IDE para compilar y cargar el código en el ESP8266.
Subir código con Arduino IDE
  • Presione el botón y manténgalo presionado durante unos segundos.
  • Observe el cambio en el estado del relé.

Verás que el estado del relé está sincronizado con el estado del botón.

Explicación del código

¡Consulta la explicación línea por línea contenida en los comentarios del código fuente!

Aplicación 2 - El botón alterna el relé

Código ESP8266 - El botón alterna el relé sin antirrebote

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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); } }

Explicación del código

Puede ubicar la explicación en las líneas de comentario del código ESP8266 anterior.

En el código, la expresión relay_state = !relay_state es equivalente al siguiente código:

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

Pasos R\u00e1pidos

  • Copia el código y ábrelo en el IDE de Arduino.
  • Sube el código al ESP8266.
  • Presiona el botón de reinicio y el botón varias veces.
  • Comprueba el cambio en el estado del relé.

Es posible que notes que el relé se enciende o se apaga cada vez que presionas el botón, pero no siempre es igual. A veces puede cambiar de estado rápidamente varias veces con una sola pulsación del botón, o podría no cambiar en absoluto (cambiar dos veces muy rápido, lo cual no se puede ver a simple vista).

Para resolver este problema, necesitamos antirrebote para el botón.

Código ESP8266 - Botón que cambia el relé con antirrebote

La eliminación del rebote de un botón puede ser un desafío para los principiantes. Afortunadamente, la biblioteca ezButton facilita las cosas.

¿Por qué es necesario evitar el rebote? Consulta el tutorial de rebote de botón ESP8266 para obtener más información.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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); } }

Pasos R\u00e1pidos

  • Instala la biblioteca ezButton. Consulta Cómo hacerlo para obtener instrucciones.
  • Copia el código y ábrelo con Arduino IDE.
  • Haz clic en el botón Subir en Arduino IDE para subir el código al ESP8266.
  • Presiona y suelta el botón varias veces.
  • Observa el cambio de estado del relé.

Notarás que el relé se encenderá o apagará solo una vez cada vez que presiones el botón.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!