Automação residencial por comando de voz com ESP32 e AppInventor Deixe um comentário

Os diversos modelos do módulo WiFi ESP32 possuem variadas aplicações e são ideais para soluções IoT (Internet das Coisas). São capazes de fornecer I/O’s programáveis, entrada micro USB, conversor FTDI integrado, regulador de tensão 3,3 V, conexão Wi-Fi, conexão Bluetooth, e muito mais, tudo isso reunido em um só dispositivo. Já pensou em utilizá-lo para automatizar a sua residência de forma simples e descomplicada? Pois é, através desse tutorial você aprenderá a criar o aplicativo Android e criar um projeto de automação residencial por comando de voz utilizando um módulo ESP32 e o APP Inventor.

Automação residencial por comando de voz com ESP32 (Figura 01)

Através deste aplicativo conseguimos criar diversas frases, ou seja, ao falarmos diretamente no smartphone o software APP Inventor irá reconhecer a frase. Assim, caso essa frase esteja programada, será enviado um comando para o ESP32 a partir do endereço IP (Internet Protocol) + o comando cadastrado. Caso os caracteres recebidos estejam programados na IDE do Arduino haverá o disparo das porta de saída configurada ligando por exemplo luzes, ventilador, cafeteira e muito mais.

O que é AppInventor?

MIT App Inventor, também conhecido como AppInventor para Android, é uma aplicação código aberto originalmente criada pela Google, e atualmente mantida pelo Massachussetts Institute of Tecnology, conhecido como MIT.

Ele permite que os recém-chegados à programação de computador criem aplicativos de software para o sistema operacional Android. Ele usa uma interface gráfica, muito semelhante ao do Zero e da interface do usuário StarLogo TNG, que permite aos usuários arrastar e soltar objetos visuais para criar um aplicativo que pode ser executado em dispositivos Android.

MIT APP Inventor (Figura 02)

Gostou da ideia? Então vamos aprender como isto funciona!

Material Necessário

Neste projeto utilizamos os seguintes componentes:

Caso deseje, a alimentação pode ser feita pelo cabo Micro USB (o mesmo cabo utilizado na programação do módulo WiFi ESP32) ou fonte DC chaveada 5V 2A Micro USB.

Setup necessário

É de grande importância, que você tenha o Arduino IDE instalado em sua máquina, de preferência a última versão disponível no site site oficial do Arduino. Depois, é necessário realizar a configuração do Arduino IDE para realizar o desenvolvimento com a ESP32, veja abaixo:

Abra a Arduino IDE. Clique em Arquivo > Preferências.

IDE Arduino - Preferências (Figura 03)

No campo URLs Adicionais para Gerenciador de Placas digite https://dl.espressif.com/dl/package_esp32_index.json e depois clique em OK.

IDE Arduino -URLs Adicionais para Gerenciador de Placas (Figura 04)

OBS: Se você já possui a URL de outras placas ESP, você pode separar as URLs com uma vírgula da seguinte forma:

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

Feito isso, clique em Ferramentas > Placa > Gerenciador de Placas…

IDE Arduino - Gerenciador de Placas (Figura 05)

Na caixa de busca, digite ESP32. Clique em Instalar.

IDE Arduino - Gerenciador de Placas (Figura 06)

Na Arduino IDE, vá em Ferramentas > Placa. E configure seu IDE Arduino conforme imagem abaixo:

IDE Arduino - Gerenciador de Placas ESP32 (Figura 07)

Pronto! A IDE Arduino já está preparada para programar seu módulo WiFi ESP32.

Montagem do circuito para a automação residencial por comando de voz

Observe o circuito esquemático abaixo que será usado no projeto “Automação residencial por comando de voz com ESP32 e AppInventor“.

De acordo com a figura abaixo, podemos verificar que os módulos relés são compostos por contatos de potência e comando. Ou seja, através dos pinos D32 e D33 do ESP32 enviaremos os sinais de comando ao módulo relé e, através do mesmo, iremos acionar a lâmpada e/ou o ventilador, de acordo com o comando executado pelo AppInventor. O acionamento será feito pelos contatos de potência COMUM e NA.

Automação Residencial por comando de voz (Figura 08)

Programando o Módulo WiFi ESP32

A programação deste módulo consiste em incluir a biblioteca “WiFi.h” e definir os pinos que iremos utilizar. Neste caso, definimos que um relé acionará a lâmpada na GPIO32 e outro relé acionará o ventilador na GPIO33. Também é preciso preencher o IP estático e o gateway da rede no qual a ESP32 foi conectada.

IPAddress staticIP(192,168,XXX,XXX);
IPAddress gateway(192,168,XXX,1);

Preencha também os dados para iniciar o Wi-Fi colocando respectivamente seu SSID e sua SENHA. 

"WiFi.begin("SEU SSID", "SUA SENHA");"

Segue o código-fonte do projeto. Leia atentamente todos os comentários do mesmo.

//bibilioteca necessária para conectar o wifi #include <WiFi.h> 
//led conectado nos pinos 32 e33
#define lampada 32
#define ventilador 33

//string de mensagem enviada pelo client
String ClientRequest;

//IP estático, de preferencia conectar ESP32 e smartphone na mesma rede
IPAddress staticIP(192,168,XXX,XXX);
//Gateway, colocar o gateway da rede em que está conectado
IPAddress gateway(192,168,XXX,1);
//Máscara, colocar a máscara da rede em que está conectado
IPAddress subnet(255,255,255,0);

//Porta de COM server/client
WiFiServer server(80);

// Wi-Fi Client
WiFiClient client;

//variável usada para solicitar o client 
String myresultat;
String ReadIncomingRequest()
{
  //Enquanto houver dados enviados pelo client 
  while(client.available()) 
  {
    //Atribui para a variável string o comando enviado pelo client
    ClientRequest = (client.readStringUntil('\r'));

    //Se existir "HTTP/1.1" na string então recebe comando
    if ((ClientRequest.indexOf("HTTP/1.1")>0))
      myresultat = ClientRequest;
  }
  //Retorna variável resultado
  return myresultat;
}

void setup()
{
  //Inicializa varíavel sem dados
  ClientRequest = "";
  
  //Define os pinos como saida
  pinMode(lampada,OUTPUT);
  pinMode(ventilador,OUTPUT);

  //Inicializa a porta serial com taxa de transmissao 115200 bps
  Serial.begin(115200);
  //aguarda 10ms
  delay(10);

  //A partir daqui conectar wifi
  Serial.println("PRONTO!");

  //Configura ssid e senha da rede
  WiFi.begin("SEU SSID", "SUA SENHA");

  //Enquanto não conectar exibe "."
  while (WiFi.status() != WL_CONNECTED)
  {
      delay(500);
      Serial.print(".");
  }

  //Exibe "conectado"
  Serial.println("Conectado!");

  //Configura ip estático, gateway e máscara (definidos no início do código)
  WiFi.config(staticIP, gateway, subnet);

  //Exibe IP utilizado pelo ESP32
  Serial.println("Seu IP é");
  Serial.println((WiFi.localIP()));

  //Inicia COM com servidor
  server.begin();
}

void loop()
{
    //Obtem cliente
    client = server.available();

    //Se nao houver, retorna até que ele realmente exista
    if (!client) 
      return; 

    //Enquanto nao existir COM com client aguardar
    while(!client.available())
      delay(1); 

    //Obtem respostas utilizando a função local ReadIncomingRequest
    ClientRequest = (ReadIncomingRequest());
    
    //Retira dados da página e obtem apenas o comando enviado
    ClientRequest.remove(0, 5);
    ClientRequest.remove(ClientRequest.length()-9,9);

    //Controla as portas conforme o comando recebido
    if (ClientRequest == "acender") 
      digitalWrite(lampada,HIGH);
    if (ClientRequest == "apagar")
      digitalWrite(lampada,LOW);
    if (ClientRequest == "ligar")
      digitalWrite (ventilador, HIGH);
    if (ClientRequest == "desligar")
      digitalWrite(ventilador,LOW);

    //Exibe na página a palavra "OK", caso acessado por um navegador
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("");
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    client.println("OK");
    client.println("</html>");
    client.flush();
    client.stop();
    delay(1);
}

Por fim, carregue o código (esse processo pode levar algum tempo).

OBS: No momento em que o ESP32 estiver gravando o código em sua CPU é necessário apertar o BOOT.

Configurando o AppInventor para a automação residencial por comando de voz

Para configurar o AppInventor acesse aqui.

Utilize a sua conta Gmail através do LOGIN e SENHA.

No canto superior esquerdo, acesse a aba “Projetos” clicando em “Importar projeto (.aia) do meu computador”.

Automação Residencial por comando de voz com APP Inventor (Figura 09)

Para fazer o download do arquivo (.aia) clique aqui.

Após carregar o arquivo, é possível visualizá-lo e modificá-lo de acordo com o seu projeto específico.

No canto superior direito da tela, acesse a aba “Blocos”.

Automação Residencial por comando de voz com APP Inventor (Figura 10)

Agora, modifique o endereço IP (Internet Protocol) destacado na figura abaixo conforme sua conexão entre ESP32 e ROUTER, exemplo “http:// 192.168.10.105/acender”.

OBS: Para verificar o endereço IP da sua ESP32 é só abrir o monitor serial na IDE Arduino.

Automação Residencial por comando de voz com APP Inventor (Figura 11)

Depois de substituir os IP’s o próximo passo será compilar o arquivo. Portanto, clique em “Compilar” na parte superior da tela e acesse “App (fornecer o QR code para o .apk)”.

Automação Residencial por comando de voz com APP Inventor (Figura 12)

Agora, em seu smartphone baixe o aplicativo App Inventor.

Ao abrir o aplicativo App Inventor para Android,  vá em scan QR code, aproxime a câmera de seu smartphone no QR Code disponível em seu PC.

Pronto! Agora é só baixar o arquivo .apk em seu smartphone android e dizer as palavras configuradas no arduino IDE / App Inventor.

Por exemplo:

Acender – GPIO 32 em nível alto.

Apagar – GPIO 32 em nível baixo.

Ligar – GPIO 33 em nível alto.

Desligar – GPIO 33 em nível baixo.

Resultado da automação residencial por comando de voz

É possível visualizar os módulos relés comutando indicando que a ESP32 foi conectada na rede Wi-Fi e que houve o reconhecimento de voz, conforme o vídeo abaixo:

É possível acrescentar mais relés em uma única ESP32, automatizando por exemplo a sua residência inteira!

Gostou do post “Automação residencial por comando de voz com ESP32 e AppInventor” ? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Até a Próxima!

Deixe uma resposta

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