ESP8266 com Google Home

,

Olá, como estão? A princípio iremos realizar a integração entre o ESP8266 com Google Home juntamente com o Google Assistente.

Conversor USP - FDI252

Componentes Utilizados


Funcionamento do Projeto ESP8266 com Google Home


Para realizar essa integração iremos utilizar o Sinric Pro para que dessa forma consigamos nos comunicar com o Google Home. Então para demonstrar essa integração iremos utilizar um ESP8266 (ESP-01) como microcontrolador e o Módulo Relé com suporte para ESP8266 para simplificar o uso do mesmo.

Montagem do Projeto ESP8266 com Google Home


Logo após compra dos componentes na WJ Componentes, vamos à montagem! Para realizar a montagem desse projeto primeiramente temos que saber como enviar o código para o ESP-01, caso não lembre clique aqui.

Então agora que já vimos como realizar a importação do código para o ESP8266 (ESP-01), iremos para a montagem do projeto, essa montagem é muito simples. Primeiramente iremos conectar o ESP8266 no módulo relé, após conectamos o VCC e GND da fonte nas entradas 5V e GND do módulo relé. Em seguida segue imagem do circuito eletrônico.

Montagem do Circuito Eletrônico na Protoboard - ESP8266 com Google Home

Código-fonte do Projeto ESP8266 com Google Home


Em seguida segue abaixo o código-fonte completo do projeto.

//Bibliotecas ----------------------------------------------------------------------------------------
#include <Arduino.h>                                          // Responsável pelos comandos Arduíno
#include <ESP8266WiFi.h>                                      // Responsável pelo WiFi
#include "SinricPro.h"                                        // Responsável pelo Sinric
#include "SinricProSwitch.h"                                  // Responsável pelo Switch

//WiFi -----------------------------------------------------------------------------------------------
const char* ssid     = "<NOME DA SUA REDE>";                  // Nome da rede wireless
const char* password = "<SENHA DA SUA REDE>";                 // Senha da rede wireless

//Sinric ---------------------------------------------------------------------------------------------
#define APP_KEY    "43fdc4cf-40b3-4b7c-8d18-d0ea31f73208"     // Chave do APP
#define APP_SECRET "9ba45edc-5aa5-4023-836e-8ba38ca7a3ef-559812dd-5f53-43c3-88d5-81fe44bf61c9" //Senha
#define SWITCH_ID  "61dd93d7b484c17bc5677626"                 // ID dos dispositivos

//Variáveis Globais e Definições ---------------------------------------------------------------------
bool myPowerState = false;                                    // Variável de Controle
#define RELAY 0                                               // Define o pino 0

//Funções Auxiliares ---------------------------------------------------------------------------------
void setupWiFi();                                             // Responsável por configurar WiFi
void setupSinricPro();                                        // Responsável por configurar Sinric
bool onPowerState(const String &deviceId, bool &state);       // Responsável por mudar estado

//Setup ----------------------------------------------------------------------------------------------
void setup() {
    pinMode(RELAY, OUTPUT);                                   // Configura o pino como OUTPUT
    digitalWrite(RELAY, LOW);                                 // Desliga o pino
    setupWiFi();                                              // Chama função setupWiFi()
    setupSinricPro();                                         // Chama função setupSinricPro()
}

//Loop -----------------------------------------------------------------------------------------------
void loop() {
    SinricPro.handle();                                       // Verifica se teve alteração
}

//Config WiFi ----------------------------------------------------------------------------------------
void setupWiFi() {
    WiFi.begin(ssid, password);                               // Inicializa WiFi
    while (WiFi.status() != WL_CONNECTED) {                   // Loop até que esteja conectados
        delay(250);                                           // Espera 0,25s
    }
}

//Setup Sinric ---------------------------------------------------------------------------------------
void setupSinricPro() {
    SinricProSwitch& mySwitch = SinricPro[SWITCH_ID];         // Adiciona dispositivo SinricPro
    mySwitch.onPowerState(onPowerState);                      // Define uma função para callback
    //SinricPro.restoreDeviceStates(true);                    // Restaurar o último estado do servidor
    SinricPro.begin(APP_KEY, APP_SECRET);                     // Inicializa o Sinric
}

//onPowerState ---------------------------------------------------------------------------------------
bool onPowerState(const String &deviceId, bool &state) {
    myPowerState = state;                                     // Atribui state a variável
    digitalWrite(RELAY, myPowerState ? HIGH : LOW);           // Liga ou Desliga o pino
    return true;                                              // Retornar pedido tratado corretamente
}

Vamos dar uma olhada mais de perto no código:

Incluindo Bibliotecas

Primeiramente temos que incluir as bibliotecas que usamos em nosso projeto.

//Bibliotecas ----------------------------------------------------------------------------------------
#include <Arduino.h>                                          // Responsável pelos comandos Arduíno
#include <ESP8266WiFi.h>                                      // Responsável pelo WiFi
#include "SinricPro.h"                                        // Responsável pelo Sinric
#include "SinricProSwitch.h"                                  // Responsável pelo Switch

Definições WiFi

Logo após definimos o nome, senha do WiFi e um objeto chamado server.

//WiFi -----------------------------------------------------------------------------------------------
const char* ssid     = "<NOME DA SUA REDE>";                  // Nome da rede wireless
const char* password = "<SENHA DA SUA REDE>";                 // Senha da rede wireless

Configuração do Sinric

Em seguida definimos a chave do Sinric e senha do app, também definimos a id do switch, iremos abordar mais a frente como pegar essas chaves e ids.

//Sinric ---------------------------------------------------------------------------------------------
#define APP_KEY    "43fdc4cf-40b3-4b7c-8d18-d0ea31f73208"     // Chave do APP
#define APP_SECRET "9ba45edc-5aa5-4023-836e-8ba38ca7a3ef-559812dd-5f53-43c3-88d5-81fe44bf61c9" //Senha
#define SWITCH_ID  "61dd93d7b484c17bc5677626"                 // ID dos dispositivos

Definições de Pinos e Variáveis Globais

Então declaramos também uma variável global de controle e definimos também o pino do relé.

//Variáveis Globais e Definições ---------------------------------------------------------------------
bool myPowerState = false;                                    // Variável de Controle
#define RELAY 0                                               // Define o pino 0

Funções Auxiliares

Logo após declaramos mais 3 funções auxiliares, a primeira é responsável pela configuração o WiFi. Entretanto a segunda é responsável pela configuração do Sinric e a terceira é responsável por mudar o estado do relé.

//Funções Auxiliares ---------------------------------------------------------------------------------
void setupWiFi();                                             // Responsável por configurar WiFi
void setupSinricPro();                                        // Responsável por configurar Sinric
bool onPowerState(const String &deviceId, bool &state);       // Responsável por mudar estado

Funções Setup

Em seguida na função setup, configuramos o pino do relé como OUTPUT e desligamos o pino, após chamamos a função setupWiFi e a função setupSinricPro.

//Setup ----------------------------------------------------------------------------------------------
void setup() {
    pinMode(RELAY, OUTPUT);                                   // Configura o pino como OUTPUT
    digitalWrite(RELAY, LOW);                                 // Desliga o pino
    setupWiFi();                                              // Chama função setupWiFi()
    setupSinricPro();                                         // Chama função setupSinricPro()
}

Funções Loop

Então agora na função loop, verificamos somente se teve alguma alteração no Sinric.

//Loop -----------------------------------------------------------------------------------------------
void loop() {
    SinricPro.handle();                                       // Verifica se teve alteração
}

Função de Configuração de WiFi

Em seguida passamos para as funções auxiliares a primeira delas é a função setupWiFi, que é responsável por configurar o WiFi. Pois nela iremos inicializar o WiFi e criar um loop até que o dispositivo esteja conectado.

//Config WiFi ----------------------------------------------------------------------------------------
void setupWiFi() {
    WiFi.begin(ssid, password);                               // Inicializa WiFi
    while (WiFi.status() != WL_CONNECTED) {                   // Loop até que esteja conectados
        delay(250);                                           // Espera 0,25s
    }
}

Função de Configuração do Sinric

Passando para a função setupSinricPro, é onde iremos realizar as configurações necessárias para que o Sinric funcione. Primeiramente inicializaremos um objeto do tipo SinricProSwitch com o nome mySwitch passando para a id do switch_id. Em seguida definimos um call-back (chamada de retorno) e inicializamos o Sinric.

//Setup Sinric ---------------------------------------------------------------------------------------
void setupSinricPro() {
    SinricProSwitch& mySwitch = SinricPro[SWITCH_ID];         // Adiciona dispositivo SinricPro
    mySwitch.onPowerState(onPowerState);                      // Define uma função para callback
    //SinricPro.restoreDeviceStates(true);                    // Restaurar o último estado do servidor
    SinricPro.begin(APP_KEY, APP_SECRET);                     // Inicializa o Sinric
}

Função Interruptor

Logo após vamos para a função onPowerState, é responsável por mudar o estado do relé, para isso atribuímos a myPowerState o state. Em seguida verificamos se myPowerState é igual a true então ligamos o relé. Então caso o contrário desligamos o relé e retornamos true sinalizando que o pedido foi tratado com sucesso.

//onPowerState ---------------------------------------------------------------------------------------
bool onPowerState(const String &deviceId, bool &state) {
    myPowerState = state;                                     // Atribui state a variável
    digitalWrite(RELAY, myPowerState ? HIGH : LOW);           // Liga ou Desliga o pino
    return true;                                              // Retornar pedido tratado corretamente
}

E assim finalizamos o código do ESP-01 (ESP8266).

Configurando do Sinric Pro para ESP8266 com Google Home


Então para obter as chaves e as ids dos Sinric precisamos realizar o registro no site Sinric Pro. Logo após para realizar o registro basta clicar no botão “Cadastre-se”.

Tela Principal Sinric Pro ESP8266 com Google Home

Em seguida realize o seu registro preenchendo o formulário, após clique em “register” e confirme seu email.

Cadastro Sinric Pro ESP8266 com Google Home

Após isso você irá se deparar com seu painel administrativo, nesse painel clique em credenciais, no menu lateral esquerdo.

Painel Administrativo Sinric Pro ESP8266 com Google Home

Na página credenciais, você pode adicionar uma nova chave API ou nova chave e senha do app. Logo após isso clicamos em dispositivos no menu lateral esquerdo.

Credenciais Sinric Pro - ESP8266 com Google Home

Agora na página dispositivos clicamos em adicionar novo dispositivo.

Dispositivos Sinric Pro ESP8266 com Google Home

Nessa página podemos dar um nome ao nosso dispositivo, descrição, tipo de dispositivo, chave de aplicação, cômodo, notificações, temporizador e consumo.

Novo Dispositivo Sinric Pro - ESP8266 com Google Home

Após isso irá aparecer a id do dispositivo na página dispositivos.

ID Dispositivo Sinric Pro - ESP8266 com Google Home

Assim finalizamos a configuração do Sinric.

Obs.: O Sinric é gratuito por 10 anos ou até 3 dispositivos conectado após isso é necessário, assinar a licença.

Como Importar Arquivos para ESP32


Para realizar a configuração do Google home, primeiramente iremos precisar instalar o aplicativo. Após isso abrimos ele, no lado esquerdo superior clique em “+”, vá em configurar dispositivo, compatíveis com o Google e pesquise Sinric Pro e realize o login. Logo após isso já irá estar funcionando.

Pagina Principal Google Home - ESP8266 com Google Home
Dispositivos Google Home - ESP8266 com Google Home
Configuração Google Home - ESP8266 com Google Home

Obs.: Após a configuração do Google Home o Google Assistente também já estará configurado.

Resultado do Projeto ESP8266 com Google Home


Esse foi o resultado obtido com nosso projeto.

ESP8266 com Google Home

Agradecemos sua Presença


Por fim, espero que tenham gostado e aprendido. Compartilhe com seus colegas e deixe um comentário de qual projeto deveria ser o próximo aqui no Blog da WJ Componentes!!
Enfim estarei deixando o arquivo Arduíno, software e sites utilizados e deixarei os arquivos os Fritzing dos componentes.
Fique à vontade para tirar suas dúvidas nos comentários.

Software e Sites Utilizados

Fritzing dos Componentes

GitHub das Bibliotecas Utilizadas

Post Relacionados

    Posts mais Recentes

    Julio Cesar Bonow Manoel

    Julio Cesar Bonow Manoel

    Cursando Engenharia da Computação pelo Centro Universitário Facens e atua no desenvolvimento de projetos na WJ Componentes. Participante da equipe de robótica Omegabotz.

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *