Automação residencial por comando de voz com ESP32 e AppInventor 8

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:

01 – Módulo WiFi ESP32 Bluetooth
01 – Módulo Relé 5V 4 Canais
01 – Jumpers Fêmea-Fêmea x 40 unidades
01 – Fonte DC Chaveada 5V 3A Micro USB
01 – Cabo micro USB 1 metro

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.

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.

Até a Próxima!

Faça seu comentário

Acesse sua conta e participe

8 Comentários

  1. Penso eu que o id seria o estático aquele que está no app do MIT, será que estou certo,

  2. Ola 👋 gostei muito desse post, gostaria de saber estou com dúvidas , quanto como eu faço para controlar um relé com o esp8266 eu tenho o código porém minha maior dúvida e no app do MIt como faço para ter o códigos dos BLocos?????

  3. ola o endereço que coloco no appinventor ná é o meu endereço de IP da minha rede, mas sim o endereço da minha esp32 ? correto! Pois nao to conseguindo achar esse endereço, o endereço que aparece na minha serial é o mesmo da minha rede local.
    Conseguiria me tirar essa duvida, de como achar esse endereço da minha esp32 para colocar no appinventor?

    1. Penso eu que o id seria o estático aquele que está no app do MIT, será que estou certo,

  4. Eu coloquei esse codigo no meu e fica aparecendo o código abaixo constantemente, vc saberia como resolver?

    ets Jun 8 2016 00:22:57

    rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1216
    ho 0 tail 12 room 4
    load:0x40078000,len:9720
    ho 0 tail 12 room 4
    load:0x40080400,len:6352
    entry 0x400806b8
    Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.
    Core 1 register dump:
    PC : 0x40081045 PS : 0x00060030 A0 : 0x800d0ede A1 : 0x3ffb1f30
    A2 : 0x00000007 A3 : 0x00000002 A4 : 0x80089cec A5 : 0x3ffba100
    A6 : 0x00000003 A7 : 0x00060823 A8 : 0x3f4094e8 A9 : 0xddddddcd
    A10 : 0xcc080000 A11 : 0x00000064 A12 : 0x00000000 A13 : 0x0000ff00
    A14 : 0x00ff0000 A15 : 0xff000000 SAR : 0x0000001a EXCCAUSE: 0x0000001c
    EXCVADDR: 0xcc080000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000

    Backtrace: 0x40081045:0x3ffb1f30 0x400d0edb:0x3ffb1f50 0x400d3183:0x3ffb1fb0 0x40088b7d:0x3ffb1fd0

  5. Olá prof. Paulo, esse é um tipo de projeto sempre interessante!
    Nesse seu projeto, portanto, é possível fazer o controle remotamente, por exemplo, apagar lâmpadas da casa, estando longe de casa ou somente pela rede local?
    Se não, vc tem algum projeto que faça isso?
    Obrigado

    1. Olá Daniel Fernandes,

      Sim é possivel controlar lâmpadas e tomadas a distância sem problemas, você pode fazer este teste conectando por exemplo seu smartphone numa outra rede Wi-Fi.

      Qualquer dúvida estamos a disposição!

  6. Olá comprei a ESP32 aqui do site Flip-Flop
    Segue exemplo de programa com comunicação Wifi
    https://www.youtube.com/watch?v=nz70smAvpW8
    Att
    Jonatas Ferreira