Controle um Relé com ESP32 ou ESP8266 usando Alexa e Google Home (Tutorial de Interruptor Parte 1)

Nesta seção vamos criar um Interruptor Sinric Pro para ESP32, ESP8266 ou Raspberry Pi Zero W e depois controlar via Alexa, Google Home ou SmartThings.

Pré-requisitos:

  1. ESP32, ESP8266 ou RaspPi W x 1.
  2. Controlador de relé SPDT x 1.
  3. Cabos jumper.

Sinric Pro esp8266 esp32 picow

Introdução rápida ao Relé

Um relé é um interruptor operado eletricamente que pode ser ligado ou desligado por um sinal de baixa tensão. É como um interruptor regular no sentido de que permite que a corrente flua ou não, mas pode ser controlado por uma tensão muito menor. Isso torna os relés ideais para MCUs onde é necessário controlar um circuito de alta tensão com um sinal de baixa tensão.

Como funciona

A operação de um relé pode variar dependendo do fabricante, da fiação e do tipo de controlador de relé sendo usado. Alguns controladores de relé requerem um sinal de alto nível do MCU para ativar o relé, enquanto outros requerem um sinal de baixo nível. É importante verificar as especificações do controlador de relé antes de usá-lo para garantir que seja compatível com seu MCU.

Sinal de alto nível: Um sinal de alto nível é um sinal que está acima de um certo limite de tensão. Por exemplo, um controlador de relé de 5V pode requerer um sinal que esteja acima de 3,3V para ativar o relé.

digitalWrite(pin, HIGH);

Sinal de baixo nível: Um sinal de baixo nível é um sinal que está abaixo de um certo limite de tensão. Por exemplo, um controlador de relé de 5V pode requerer um sinal que esteja abaixo de 0,8V para ativar o relé.

digitalWrite(pin, LOW);

Conectores de Alta Tensão Conectores de Alta Tensão

O módulo relé acima tem um único conector com três soquetes: Comum (COM), Normalmente Fechado (NC), e Normalmente Aberto (NO).

Comum (COM): COM é a conexão comum para ambos os pinos NO e NC. Conecte o dispositivo de alta tensão ao pino COM.

Normalmente Fechado (NC): O circuito está fechado por padrão.

Normalmente Aberto (NO): O circuito está aberto por padrão.

Os contatos normalmente aberto (NO) e normalmente fechado (NC) permitem que você use um pino para controlar dois circuitos separados dependendo de seus requisitos. Por exemplo, você poderia usar um pino para controlar a energia de uma lâmpada e outro pino para controlar a energia de um motor. Quando o pino estiver alto/baixo, a lâmpada acenderá, caso contrário o motor ligará.

Fiação

Sinric Pro esp8266 relay wiring

Sinric Pro esp8266 relay wiring

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

Antes de integrarmos com Sinric Pro, é importante verificar se o relé está conectado corretamente. Você pode usar o seguinte código para verificar se o relé liga e desliga a 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);
}

View this code on GitHub Gist

Passo 1: Criar um novo dispositivo no Sinric Pro

Sinric Pro create device alexa

Sinric Pro online offline push notifications

Para receber notificações push quando seu dispositivo ficar online ou offline, habilite a opção “Conectar e Desconectar” no aplicativo Sinric Pro. Para receber notificações push quando seu dispositivo ligar ou desligar, habilite a opção “Ligar e Desligar”.

Sinric Pro copy device id

Passo 2: Programação

2.1 Instalar a Biblioteca Sinric Pro

Sinric Pro install SinricPro library

Você pode gerar o código usando o recurso Zero Code ou escrevê-lo você mesmo. Se você não tem experiência em programação, recomendamos usar o recurso Zero Code no Portal para gerar o código, baixar e carregar.

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();
}

View this code on GitHub Gist

Agora você deve conseguir controlar o relé via Portal como no vídeo abaixo.

Passo 3: Vincular a Skill Sinric Pro da Alexa com sua conta.

• Abra seu aplicativo Amazon Alexa.

• Vá para Skills & Games.

• Pesquise por Sinric Pro.

• Clique em ATIVAR PARA USAR.

• Digite suas credenciais do Sinric Pro na página de vinculação.

• Peça à Alexa para descobrir novos dispositivos.

• Peça à Alexa para ligar o Interruptor

Passo 4: Vincular a ação Sinric Pro do Google Home com sua conta.

• Abra o Google Home e clique em Adicionar.

• Selecione Configurar Dispositivo

• Selecione Funciona com Google Home

• Pesquise por Sinric Pro.

• Vincule sua conta.

• Descubra novos dispositivos

• Peça ao Google Home para ligar o Interruptor

Passo 5: Vincular Sinric Pro SmartThings com sua conta.

• Abra o aplicativo SmartThings e toque no ícone +

• Selecione Dispositivo

• Selecione Sinric Pro em Por Marca

• Vincule sua conta.

• Agora você pode ligar ou desligar o Interruptor a partir do painel

Continue para a Parte 2 desta série de artigos para aprender como adicionar um botão para alternar o relé.

Solução de Problemas

Consulte nossa página de Solução de Problemas para possíveis soluções para seu problema.

Este documento é código aberto. Viu um erro de digitação? Por favor, crie uma issue