Controla un relé con ESP32 o ESP8266 usando Alexa y Google Home (Tutorial de Switch, parte 1)

En esta sección veremos cómo crear un Switch de Sinric Pro para ESP32, ESP8266 o Raspberry Pi Zero W y cómo controlarlo después con Alexa, Google Home o SmartThings.

Requisitos previos :

  1. ESP32, ESP8266 o RaspPi W x 1.
  2. Controlador de relé SPDT x 1.
  3. Cables puente.

Sinric Pro esp8266 esp32 picow

Introducción rápida al relé

Un relé es un interruptor accionado eléctricamente que se puede encender o apagar mediante una señal de bajo voltaje. Es similar a un interruptor normal en el sentido de que permite o no el paso de corriente, pero se puede controlar con un voltaje mucho menor. Esto hace que los relés sean ideales para MCU en los que es necesario controlar un circuito de alto voltaje con una señal de bajo voltaje.

Cómo funciona

El funcionamiento de un relé puede variar según el fabricante, el cableado y el tipo de controlador de relé que se use. Algunos controladores de relé requieren una señal de nivel alto del MCU para activar el relé, mientras que otros requieren una señal de nivel bajo. Es importante revisar las especificaciones del controlador de relé antes de usarlo, para asegurarte de que es compatible con tu MCU.

Señal de nivel alto: una señal de nivel alto es una señal que está por encima de un determinado umbral de voltaje. Por ejemplo, un controlador de relé de 5V puede requerir una señal superior a 3.3V para activar el relé.

digitalWrite(pin, HIGH);

Señal de nivel bajo: una señal de nivel bajo es una señal que está por debajo de un determinado umbral de voltaje. Por ejemplo, un controlador de relé de 5V puede requerir una señal inferior a 0.8V para activar el relé.

digitalWrite(pin, LOW);

Conectores de alto voltaje High Voltage Connectors

El módulo de relé de la imagen anterior tiene un único conector con tres zócalos: Común (COM), Normalmente cerrado (NC) y Normalmente abierto (NO).

Común (COM): COM es la conexión común para los pines NO y NC. Conecta el dispositivo de alto voltaje al pin COM.

Normalmente cerrado (NC): el circuito está cerrado por defecto.

Normalmente abierto (NO): el circuito está abierto por defecto.

Los contactos normalmente abiertos (NO) y normalmente cerrados (NC) te permiten usar un pin para controlar dos circuitos independientes según tus necesidades. Por ejemplo, podrías usar un pin para controlar la alimentación de una bombilla y otro pin para controlar la alimentación de un motor. Cuando el pin está en alto/bajo, la bombilla se encenderá; en caso contrario, se encenderá el motor.

Cableado

Sinric Pro esp8266 relay wiring

Sinric Pro esp8266 relay wiring

MCU Pin
ESP32 16
ESP8266 12 (D6)
RaspPi W 6

Antes de integrarlo con Sinric Pro, es importante comprobar que el relé está bien cableado. Puedes usar el siguiente código para comprobar si el relé se enciende y apaga cada 5 segundos.

#if defined(ESP8266)
  #define relay        12
#elif defined(ESP32) 
  #define relay        16
#elif (ARDUINO_ARCH_RP2040)
  #define relay        6
#endif

void setup() {
  Serial.begin(115200);
  pinMode(relay, OUTPUT);
}

void loop() {
  Serial.println("Writing HIGH ..");
  digitalWrite(relay, HIGH);
  delay(5000); 
  
  Serial.println("Writing LOW ..");
  digitalWrite(relay, LOW);
  delay(5000);
}

Ver este código en GitHub Gist

Paso 1 : Crea un nuevo dispositivo en Sinric Pro

Sinric Pro create device alexa

Sinric Pro online offline push notifications

Para recibir notificaciones push cuando tu dispositivo se conecte o desconecte, activa la opción “Connect and Disconnect” en la app de Sinric Pro. Para recibir notificaciones push cuando tu dispositivo se encienda o apague, activa la opción “On and Off”.

Sinric Pro copy device id

Paso 2 : Programación

2.1 Instala la librería Sinric Pro

Sinric Pro install SinricPro library

Puedes generar el código usando la función Zero Code o escribirlo tú mismo. Si no tienes experiencia programando, te recomendamos usar la función Zero Code en el Portal para generar el código, descargarlo y flashearlo.

2.2 Código completo

#include <Arduino.h>
#if defined(ESP8266)
  #include <ESP8266WiFi.h>
#elif defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
  #include <WiFi.h>
#endif

#include "SinricPro.h"
#include "SinricProSwitch.h"

#define WIFI_SSID         ""  // Change WIFI_SSID to your WiFi Name.
#define WIFI_PASS         ""  // Change WIFI_PASS to your WiFi password.
#define APP_KEY           ""  // Paste App Key from above 
#define APP_SECRET        ""  // Paste App Secret from above 
#define SWITCH_ID_1       ""  // Paste Device Id from  above

#if defined(ESP8266)
  #define RELAYPIN_1        12
#elif defined(ESP32) 
  #define RELAYPIN_1        16
#elif (ARDUINO_ARCH_RP2040)
  #define RELAYPIN_1        6
#endif

#define BAUD_RATE         115200                // Change baudrate to your need

bool onPowerState1(const String &deviceId, bool &state) {
 Serial.printf("Device 1 turned %s", state?"on":"off");
 digitalWrite(RELAYPIN_1, state ? HIGH:LOW);
 
 /* If your relay is activated with low signal, change the above to below code
  digitalWrite(RELAYPIN_1, state ? LOW : HIGH); */

 return true; // request handled properly
}

// setup function for WiFi connection
void setupWiFi() {
  Serial.printf("\r\n[Wifi]: Connecting");

  #if defined(ESP8266)
    WiFi.setSleepMode(WIFI_NONE_SLEEP); 
    WiFi.setAutoReconnect(true);
  #elif defined(ESP32)
    WiFi.setSleep(false); 
    WiFi.setAutoReconnect(true);
  #endif

  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.printf(".");
    delay(250);
  }

  Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
}

// setup function for SinricPro
void setupSinricPro() {
  // add devices and callbacks to SinricPro
  pinMode(RELAYPIN_1, OUTPUT);
    
  SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1];
  mySwitch1.onPowerState(onPowerState1);
    
  // setup SinricPro
  SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); }); 
  SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
   
  SinricPro.begin(APP_KEY, APP_SECRET);
}

// main setup function
void setup() {
  Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
  setupWiFi();
  setupSinricPro();
}

void loop() {
  SinricPro.handle();
}

Ver este código en GitHub Gist

Ahora deberías poder controlar el relé a través del Portal como en el siguiente vídeo.

Paso 3 : Vincula la skill de Alexa de Sinric Pro con tu cuenta.

• Abre tu app de Amazon Alexa.

• Ve a Skills y juegos.

• Busca Sinric Pro.

• Haz clic en ENABLE TO USE.

• Introduce tus credenciales de Sinric Pro en la página de vinculación.

• Pide a Alexa que descubra dispositivos nuevos.

• Pide a Alexa que encienda el Switch

Paso 4 : Vincula la action de Google Home de Sinric Pro con tu cuenta.

• Abre Google Home y haz clic en Añadir.

• Selecciona Configurar dispositivo

• Selecciona Funciona con Google Home

• Busca Sinric Pro.

• Vincula tu cuenta.

• Descubre dispositivos nuevos

• Pide a Google Home que encienda el Switch

Paso 5 : Vincula Sinric Pro con SmartThings en tu cuenta.

• Abre la app de SmartThings y toca el icono +

• Selecciona Dispositivo

• Selecciona Sinric Pro en Por marca

• Vincula tu cuenta.

• Ahora puedes encender o apagar el Switch desde el panel

Continúa con la parte 2 de esta serie de artículos para aprender a añadir un pulsador que controle el relé.

Solución de problemas

Consulta nuestra página de Solución de problemas para posibles soluciones a tu problema.

Tutoriales relacionados

Este documento es de código abierto. ¿Ves un error? Por favor, crea un issue