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:

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.

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

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

- 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.