Automação Residencial

Utilizando o Google Assistente com o NodeMCU

Eletrogate 9 de março de 2023

Introdução

Neste post, você aprenderá a desenvolver um sistema capaz de receber e interpretar dados do Google Assistente, que se aplica a vários projetos de IoT (Internet das Coisas) e automações residenciais, utilizando a ferramenta da Adafruit, com a tecnologia do Google Assistente, usando o IFTTT (Se Isso Então Aquilo) que intermediará a conexão do Google Assistente com a Adafruit.


Materiais Necessários para o Projeto Utilizando o Google Assistente com o NodeMCU

Para este tutorial você precisará dos seguintes componentes eletrônicos:

cta_cart

Também será necessário ter:

Mais abaixo, será detalhado o processo de criação das contas.


Dashboard na Internet

Para controlar as cargas via Internet é necessário ter uma plataforma da internet para gerenciar os dados de nosso Arduino. Iremos utilizar a plataforma da Adafruit IO. Para isso é necessário criar uma conta da Adafruit.

  • Acesse o site io.adafruit.com e clique no botão “Get Started for Free”, localizado na parte direita superior da página.

Clique em Get Started for Free

  • Insira seus dados para realização do cadastro e em seguida clique em CREATE ACCOUNT.

Insira seus Dados para o Cadastro

  • Será solicitado selecionar o Fuso Horário em que você está. Após selecionar, clique em SAVE SETTINGS para salvar as configurações.

Selecione o Fuso Horário

  • Após a criação da conta, teremos que criar o dashboard, para que o IFTTT consiga ativar e desativar a carga, então acesse o site io.adafruit.com  e clique no menu

  • Depois que o menu abrir você deve clicar em Dashboard

  • Assim que você for redirecionado clique em “+ Dashboard”

  • Insira os dados, como o nome e a descrição e para criá-lo basta clicar em “Create”

  • Acesse o Dashboard clicando no nome do seu dashboard, como eu coloquei o meu de “Nome do projeto” eu irei clicar em “Nome do projeto”

  • Isto fará o seu dashboard abrir, e então clique no ícone de configurações (Canto Superior Direito).

  • Em seguida irá aparecer o menu de configurações do dashboard, então basta você clicar em “Create Block”

  • Abrindo o menu com todas as possibilidades de botões, mapas, sliders, nós iremos utilizar o botão do tipo “Toggle Button”. Para selecionar ele clique no 1º bloco

  • E então irá abrir um menu onde você deve colocar o nome do feed (Lista de conteúdo atualizada: Ou simplificando a variável que armazena o estado do botão)

  • Preenchido, selecione o feed e clique em “Next Step” para passar para o próximo passo

  • Em seguida preencha os dados do botões, mas o título pode ser como você quiser (Eu escolhi “Relé 1”), já as outras opções preencha do jeito que está na imagem, e em seguida clique em “Create Block”.

  • Agora, que terminamos a criação do dashboard, teremos que pegar os nossos dados do dashboard, para substituirmos no código

  • Isso fará que um menu se abra, e então role e clique em “View AdaFruit IO Key”

  • Caso não tenha aparecido o menu para você, basta clicar no botão da chave (Canto Superior Direito)

  • Ambos irão abrir esse menu (Imagem abaixo) e lá que estarão todas as suas credenciais que você deve substituir no seu código, para fazer isto basta substituir o “Username” pelo valor da variável “AIO_USERNAME” e substituir a “Active Key” pelo valor da variável “AIO_KEY”

Agora que já fizemos a criação do dashboard e a configuração das credenciais, vamos passar para o próximo passo que é criar os comandos, configurar o IFTTT e o Google Assistente


Criação dos Comandos

Para o google assistente conseguir comunicar com o Dashboard (Criado no passo anterior) ele precisará que alguém intermedie essa comunicação, ou seja, por isso que nós iremos utilizar o IFTTT (Se Isso Então Aquilo), então para utilizarmos teremos que criar uma conta na IFTTT

  • Para começarmos acesse o site da ifttt.com/join para a criação da sua conta

  • Depois de você ter feito o registro no IFTTT e ter preenchido as perguntas, você deverá clicar em “Create” para criar um Applet (Mini aplicativo)

  • Selecione o bloco do “Google Assistant V2” e clique em “Continue”

  • E clique em “Not now” para ignorar o teste grátis e clique em “Get Started”

  • Depois clique em “Create” novamente

  • Em seguida, basta você ignorar o aviso clicando em “Got It Thanks”

  • Agora, clique em “Add” para criar um comando “If This” (Se isso)

  • E procuramos por “Google Assistant” e selecionamos o bloco do Google Assistente

  • Proceda clicamos em “Active Scene”

  • Agora temos que sincronizar o Google Assistente com o IFTTT, basta clicar em “Connect” (Conectar)

  • Para conectarmos o Google Assistente ao IFTTT devemos acessar o Google Home pelo celular (Que pode ser encontrado na Google Play ou na Appstore), após baixar e acessar o “Google Home”, nós iremos criar uma nova “Casa”, selecione sua conta Google e clique em “Vamos começar”

  • Depois de ter clicado, clique para avançar clicando em “Próxima” e permita o Google Home acessar a sua localização clicando em “Durante o uso do app”

  • Ative o bluetooth clicando em “Ligar” e depois clique em “Permitir”

  • E defina que você não está configurando novos dispositivos, para isso, clique em “Agora não”

  • Após a criação da “Casa” acesse as Configurações através das engrenagens (No centro da tela)

  • Role até encontrar o botão “Compatíveis com o google” e clique nele

  • Agora procure pelo serviço do IFTTT e clique nele

  • Clique em continuar para proceder

  • Depois de clicar você será redirecionado para o site deles para que você entre com sua conta da IFTTT

  • Após você ter entrado com sua conta, você entrará em uma pagina para você autorizar o acesso do IFTTT para integra-lo com o Google Assistente, então clique em “Authorize”.

  • Agora voltando para o computador, você vai escrever o nome do seu comando (Eu nomeie o meu de: ligar relé) e clique em “Create Trigger” para criar o “If this” (Se Isso).

  • Novamente iremos clicar em “Add” para adicionar um Then That “Então isso”

  • Procure por Adafruit e selecione o bloco da Adafruit

  • Selecione a caixa “Send data to Adafruit IO”

  • Assim como fazemos com o google iremos conectar com a AdaFruit

  • Role até encontrar o botão de autorização (“Authorize”)

  • Agora basta selecionar o feed que colocamos no botão e colocar o valor como (1), ou seja, ligar (HIGH), e enviar clicando no botão “Create Action” (Criar Ação)

  • Depois de ter feito o Applet temos que finalizar ele, para isso clique em “Finish” (Finalizar)

  • Para desligarmos o relé devemos fazer o mesmo que fizemos para ligar, mas trocando o valor para (0) desligar, ou seja, LOW, como a imagem abaixo :

Depois de ter terminado a configuração do IFTTT, iremos para a configuração do Google Assistente

  • Agora novamente no celular, nós devemos  adicionar os comandos para que quando falarmos “Ligar relé” ou “Desligar relé” o google assistente executar o comando corretamente, para fazer isso devemos ir no google assistente, e clicar na sua foto de perfil e ir em “Configurações”

  • Depois de entrar nas configurações, nós devemos entrar rolar até encontrar por “Rotinas”

  • Após clicar em “Rotinas” nós devemos criar uma nova rotina em clicando em “Nova”

  • O tipo da rotina será do tipo “Pessoal”

  • Depois de sermos redirecionados para a página de criar uma ação nós devemos criar uma condição de início (Você falar: Ligar relé), e uma ação que ele deverá fazer.

  • Primeiramente eu editei o nome da rotina para “Ligar relé” e cliquei em concluído (Canto superior direito)

 

  • Clique em Concluir (Canto superior direito), depois cliquei para adicionar uma condição de ínicio da rotina, clicando em “Quando eu falar com o Google Assistente”

  • Depois cliquei para adicionar uma condição de ínicio da rotina, clicando em “Quando eu falar com o Google Assistente”

  • Depois disso somente configurei o que eu devia falar para que a ação ligasse o relé e clicar em “Adicionar condição de início”

  • Agora é só adicionar a ação que ele deveria executar, clicando em “Adicionar ação”

  • Clique em “Ajustar os dispositivos de casa”

  • Clique em “Adicionar cenas” e selecione o comando que você quer que ele execute, ou seja, ligar o relé.

  • Agora basta você salvar essa rotina e fazer o mesmo para o comando de desligar o relé.

Já com tudo pronto vamos para a configuração do ambiente, explicação do código e a montagem do circuito


Montagem do projeto

A montagem e a programação do projeto é bastante simples, a parte mais complicada foi a criação do dashboard e dos comandos.

Então siga o diagrama abaixo, que mostra todas as ligações do projeto:

 

  • Para continuarmos será necessário instalar a biblioteca ‘Adafruit MQTT Library’
  • Abra o software Arduino IDE. Na guia Ferramentas, clique na opção Gerenciar Bibliotecas.

  • Em seguida, na barra de pesquisa digite: ‘Adafruit MQTT Library’. O primeiro resultado que aparecer, com o autor Adafruit, clique em Instalar.

  • Na janela que abrirá, clique em ‘Install all’.

Já com tudo instalado coloque o seguinte código na IDE da Arduino, mas não se esqueça de selecionar a porta “COM” correta e selecionar a placa NodeMCU assim como mostra neste blog

// Importação das bibliotecas
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

// Definição do pino do relé
#define relay D0

// Definição das configurações de Wifi
#define ssid "Nome do seu WiFi"
#define password "Senha do seu Wifi"

// Definição das configurações da AdaFruit
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883

// Substitua sua credencial da AdaFruit Aqui:

// Seu Username
#define AIO_USERNAME "Seu usuário adafruit"
// Sua Active Key
#define AIO_KEY "Sua key adafruit"

// Instanciação das classes do Wifi e da AdaFruit
WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

// Lembre de trocar com o nome do feed que você colocou no botão
Adafruit_MQTT_Subscribe relayOne = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/relay");

// Instanciação da função de conectar ao servidor da AdaFruit
void MQTT_connect();

void setup() {
  // Iniciação do Serial na porta 9600 (Baud Rate: taxa de transferência em bits por segundo)
  Serial.begin(9600);

  // Definição do pino do relé como SAÍDA
  pinMode(relay, OUTPUT);
  
  Serial.print("Connecting to ");
  Serial.println(ssid);

  // Tentar a conexão ao Wifi
  WiFi.begin(ssid, password);

  // Esperar a conexão ao Wifi
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: "); 
  Serial.println(WiFi.localIP());

  // Inscrever o feed do relé
  mqtt.subscribe(&relayOne);
}

void loop() {
  // Conectar ao servidor da AdaFruit e a instânciação da classe Adafruit_MQTT_Subscribe para pegar os dados do relé
  MQTT_connect();
  Adafruit_MQTT_Subscribe *subscription;
  
  while ((subscription = mqtt.readSubscription(20000))) {
    // Quando a inscrição do relé mudar
    if (subscription == &relayOne) {
      // Pegando o ultimo estado do relé
      uint8_t relayOne_State = *(relayOne.lastread) - '0';

      // Mostrar no monitor serial o estado do relé
      Serial.print(F("Got: "));
      Serial.println(relayOne_State);

      // Se for '0' desliga, se for '1' liga
      digitalWrite(relay, relayOne_State);
    }
  }
}

void MQTT_connect() {
  int8_t ret;

  // Se já estiver conectado não executar a função
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  // Definição da quantidade de tentativas para conectar ao servidor da Adafruit
  uint8_t retries = 3;

  // Se não estiver conectado ele irá tentar 3 (retries) vezes, se não conseguir conectar ele entrará em um loop infinito
  while ((ret = mqtt.connect()) != 0) {
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000); 
    retries--;
    if (retries == 0) {
      while (1);
    }
  }
  
  Serial.println("MQTT Connected!");
}

Depois de ter terminado você terá um resultado como esse :


Conclusão

Com este exemplo de controle de relés pela internet e pelo Google Assistente abrem-se portas para projetos mais complexos, e você pode fazer como eu implementei, adicionando respostas ao falar um comando e fazendo novas coisas. Caso ficou alguma dúvida, nos contate através dos comentários. Espero que o tenha ajudado e até a próxima.


Sobre o Autor


Dhaniel Brandão

Estudante do Ensino Médio, Hobbyista e Entusiasta em projetos com arduino e IoT. Com experiências em robótica, IoT e desenvolvimento web.


Eletrogate

9 de março de 2023

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!