top of page
Crescer (fundo transparente)_Negativo_pn

Automação Residencial com ESP32 e Alexa

Você tem uma Alexa? Sabia que é possível utilizar ela para controlar uma ESP32? Nesse blog vamos ver como fazer isso.


Nesse exemplo vamos utilizar a nossa placa, a CPB32. Ela permite conexão com wifi, ler os sensores através dos pinos analógicos, acionar relés, pinos isolados por optoacopladores e outras ferramentas. Porém, o código utilizado aqui, também é compatível com qualquer outra placa que possua uma ESP32.


Avalie-nos no google para que possamos alcançar e auxiliar cada vez mais pessoas a fazerem seus projetos e produtos! Contamos com você!



Sumário

  1. Programando a ESP32

  2. Adicionando o dispositivo na Alexa

  3. Vídeos de referência




1. Programando a ESP32


O código desenvolvido para esse blog foi baseado nesse. Ele utiliza o biblioteca Espalexa.h, portanto recomendamos que faça a instalação da biblioteca antes de realizar qualquer alteração no código. Para isso vá em Ferramentas e depois Gerenciar biblioteca, como mostrado na figura a seguir:



Na janela que irá abrir, você deve pesquisar pela biblioteca espalexa, depois clique em instalar.



Primeiro vamos entender os principais pontos do código original, antes de realizar qualquer modificação nele. Primeiro vamos analisar o SETUP, mais especificamente a principal função espalexa.addDevice.


espalexa.addDevice(Device_1_Name, firstLightChanged);    

O primeiro parâmetro informado deve ser o nome do dispositivo (Device_1_Name) e o segundo é o nome da função que será executada quando ele for chamado (firstLightChanged). Devido a isso temos os seguintes pontos no código:


String Device_1_Name = "relé 1";

void firstLightChanged(uint8_t brightness)
{
  //Control the device
  if (brightness)
  {
    if (brightness == 255)
    {
      digitalWrite(R1, HIGH);
     Serial.println("Device1 ON");
    }
   //Serial.print("ON, brightness ");
    //Serial.println(brightness);
  }
  else
  {
    digitalWrite(R1, LOW);
   Serial.println("Device1 OFF");
  }
}

Como já mencionado, a variável Device_1_Name é uma String que receberá o nome do dispositivo. A função firstLightChanged será responsável por controlar esse dispositivo, nesse exemplo ela é utilizada somente para ligar e desligar dispositivos, porém, ela pode ser utilizada para outras funções, como mostrado aqui.


Podemos ver que a função recebe um parâmetro, brightness, esse é o dado utilizado para tomada de decisão que liga o dispositivo. Portanto, quando mandamos a Alexa ligar esse dispositivo o valor do parâmetro será 255, por padrão. Porém, podemos alterá-lo mandando alterar o brilho do dispositivo. Quando mandamos desligar o dispositivo o valor do brilho será 0.


#define R1 15

Da forma que a função está, o pino da ESP vai para nível baixo se o valor do brilho for 0 e para alto se for 255. No define R1 podemos alterar o pino que será controlado pela função. Esses são os principais pontos do código, porém, devemos comentar também o Espalexa espalexa, que declara o objeto da classe. A espalexa.begin() inicializa o objeto. Dentro da função loop temos espalexa.loop(), responsável por receber os dados e realizar a comunicação com a Alexa.


Agora podemos alterar o código, vamos controlar os três relés presentes na CPB32, portanto, modificamos os defines para:


#define R1 32
#define R2 33
#define R3 4

As funções vamos manter o mesmo nome, somente excluindo a quarta, ficando dessa forma:


void firstLightChanged(uint8_t brightness);
void secondLightChanged(uint8_t brightness);
void thirdLightChanged(uint8_t brightness);

O mesmo será feito para os nomes dos dispositivos.


String Device_1_Name = "relé 1";
String Device_2_Name = "relé 2";
String Device_3_Name = "relé 3";

Lembrando que também devemos alterar as configurações da rede WiFi, informando o nome e senha da sua rede.


// WiFi Credentials
const char* ssid = "SmS_jiofi";
const char* password = "sms123458956";

O código inteiro ficará da seguinte forma:


#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <Espalexa.h>

#define R1 32
#define R2 33
#define R3 4
#define R4 19

// prototypes
boolean connectWifi();

//callback functions
void firstLightChanged(uint8_t brightness);
void secondLightChanged(uint8_t brightness);
void thirdLightChanged(uint8_t brightness);

// Change this!!

// WiFi Credentials
const char* ssid = "Nome_da_rede";
const char* password = "Senha";

// device names
String Device_1_Name = "relé 1";
String Device_2_Name = "relé 2";
String Device_3_Name = "relé 3";

boolean wifiConnected = false;

Espalexa espalexa;

void setup()
{
  Serial.begin(115200);

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);

  // Initialise wifi connection
  wifiConnected = connectWifi();

  if (wifiConnected)
  {

    // Define your devices here.
   espalexa.addDevice(Device_1_Name, firstLightChanged); //simplest definition, default state off
   espalexa.addDevice(Device_2_Name, secondLightChanged);
   espalexa.addDevice(Device_3_Name, thirdLightChanged);

    espalexa.begin();
  }

  else
  {
    while (1)
    {
     Serial.println("Cannot connect to WiFi. Please check data and reset the ESP.");
      delay(2500);
    }
  }

}

void loop()
{
  espalexa.loop();
  delay(1);
}

//our callback functions
void firstLightChanged(uint8_t brightness)
{
  //Control the device
  if (brightness)
  {
    if (brightness == 255)
    {
     digitalWrite(R1, HIGH);
     Serial.println("Device1 ON");
    }
   //Serial.print("ON, brightness ");
   //Serial.println(brightness);
  }
  else
  {
    digitalWrite(R1, LOW);
   Serial.println("Device1 OFF");
  }
}

void secondLightChanged(uint8_t brightness)
{

  //Control the device
  if (brightness)
  {
    if (brightness == 255)
    {
     digitalWrite(R2, HIGH);
     Serial.println("Device2 ON");
    }
   //Serial.print("ON, brightness ");
   //Serial.println(brightness);
  }
  else
  {
    digitalWrite(R2, LOW);
   Serial.println("Device2 OFF");
  }
}

void thirdLightChanged(uint8_t brightness)
{

  //Control the device
  if (brightness)
  {
    if (brightness == 255)
    {
     digitalWrite(R3, HIGH);
     Serial.println("Device3 ON");
    }
   //Serial.print("ON, brightness ");
   //Serial.println(brightness);
  }
  else
  {
    digitalWrite(R3, LOW);
   Serial.println("Device3 OFF");
  }
}


// connect to wifi – returns true if successful or false if not
boolean connectWifi()
{
  boolean state = true;
  int i = 0;

 WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 Serial.println("");
 Serial.println("Connecting to WiFi");

  // Wait for connection
 Serial.print("Connecting...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
   Serial.print(".");
    if (i > 20) {
      state = false; break;
    }
    i++;
  }
 Serial.println("");
  if (state) {
   Serial.print("Connected to ");
    Serial.println(ssid);
   Serial.print("IP address: ");
   Serial.println(WiFi.localIP());
  }
  else {
   Serial.println("Connection failed.");
  }
  return state;
}


2. Adicionando o dispositivo na Alexa


Com a CPB32 pronta e conectada ao WiFi, devemos agora adicionar o dispositivo à Alexa. Para isso, primeiro é necessário instalar o aplicativo da Alexa no seu celular, provavelmente você já tem ele instalado, mas se não possuir basta procurar na loja de aplicativos.



Agora abra o aplicativo e acesse na aba dispositivos.



Depois toque no mais, no canto superior direito da tela.



Agora vamos em, adicionar dispositivo.




Nessa tela vamos selecionar a opção luz. Pois cada relé será interpretado como uma lâmpada diferente.



Indo até o final da página, escolhemos a opção outros.



Agora vá em, o dispositivo não tem um logotipo.



Toque em, não tenho certeza.



Espere enquanto a Alexa procura os dispositivos.



Depois que ela encontrar os dispositivos, vá em avançar.



Agora selecione o dispositivo e toque em configurar dispositivo.



Nesse passo você pode escolher um grupo para adicionar o dispositivo ou então pular essa etapa.



Com o dispositivo adicionado, basta repetir esse passo para os outros.



Agora para ligar ou desligar cada relé é necessário somente falar para a Alexa, “ligar relé 1” ou “desligar relé 1”.


Nesse exemplo fizemos o básico, porém, podemos utilizar as funções de qualquer forma. Por exemplo, criando um dispositivo com o nome todos, podemos colocar na função dele para ligar e desligar todos os relés de uma só vez, assim pode-se utilizar o comando “desligar todos” .


3. Vídeos de referência


Para mais informações você pode conferir os vídeo do canal EngEasier.




E se você conseguiu fazer um projeto legal usando a Alexa, posta nas redes sociais e marca a gente!


Autor: Thales Ferreira



391 visualizações

Posts recentes

Ver tudo
bottom of page