Controle ativado por voz com Android e NodeMCU

Controle ativado por voz com Android e NodeMCU

Em meu último tutorial: Quando o IoT encontra a Inteligência Artificial: Automação residencial com Alexa e NodeMCU,  exploramos como equipamentos ativados por voz como o Amazon Echo-Dotutilizando-se de um serviço da web (como o “Alexa”) podem controlar “dispositivos inteligentes” em nossas casas. Neste novo tutorial faremos o mesmo,  porém em vez de usar o Alexa desenvolveremos nossa própria App em um smartphone Android controlando, tanto com botões quanto por voz, nossos dispositivos domésticos.

O diagrama de blocos nos dá uma geral do que pretendemos desenvolver:

dispositivos domésticos.

e o filme nos mostra como ficará o projeto final:

 

1: Lista de materiais (BoM)

Valores em USD, utilizados apenas como referência

  1. NodeMCU ESP8266-12E ($8.79)
  2. Mini BreadBoard ($1.00)
  3. 400-point Experiment Breadboard Breadboard ($ 4.97)
  4. 4-Channel Relay Module ($8.49)
  5. LEDs (vermelho, amarelo, verde e azul) ($1.00)
  6. 4 x Resistor (220 ohm)
  7. Male-Female Dupont Cables ($1.00)
  8. Fonte externa DC de 5V ou bateria

….. e naturalmente um telefone ou tablet Android (qualquer modelo com wifi servirá).

 

2: Conectando o NodeMCU à rede local de WiFi

Conectaremos o NodeMCU a rede WiFi local,  verificando seu endereço IP. Para isso, usaremos o pequeno programa abaixo, o qual fará parte do projeto final:

#include <ESP8266WiFi.h>
WiFiClient client;
WiFiServer server(80);
const char* ssid = "YOUR SSID";
const char* password = "YOUR PASSWORD";
void setup()
{
Serial.begin(115200);
connectWiFi();
server.begin();
}
void loop()
{
}
/* connecting WiFi */
void connectWiFi()
{
Serial.println("Connecting to WIFI");
WiFi.begin(ssid, password);
while ((!(WiFi.status() == WL_CONNECTED)))
{
delay(300);
Serial.print("..");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("NodeMCU Local IP is : ");
Serial.print((WiFi.localIP()));
}

No monitor serial voce poderá ver o IP Address assignado por seu Modem ao NodeMCU:

IP Address

Tome nota do endereço (em meu acaso: 10.0.1.3). Necessitaremos deste endereço para a conexão ao aplicativo Android que será desenvolvido mais adiante.

 

3: Montando o HW

Montando o HW

Usaremos um módulo de relé de 4 canais para controlar 4 LEDs, simulando 4 dispositivos domésticos. Siga as instruções a seguir e termine as conexões:

Conecte as entradas dos relés com os pinos do NodeMCU como mostrado no diagrama e definido no código como mostrado abaixo:

int relay1 = 14;

int relay2 = 15;

int relay3 = 3;

int relay4 = 1;

Nossos dispositivos inteligentes serão simulados pelos LEDs coloridos:

    • relé 1 ==> LED vermelho
    • relé 2 ==> LED amarelo
    • relé 3 ==> LED verde
    • relé 4 ==> LED azu
</ul>


<strong>Nosso Android App irá enviar um comando em forma de string,  o qual deverá ser interpretado pelo código de maneira a ativar cada um dos relés. Definamos as strings para cada comando:</strong>


<ul>
 	

<li>Relé 1:
Ligar: “r1on”;
Desligar: “r1off”;</li>


 	

<li>Relé 2:
Ligar: “r2on”;
Desligar: “r2off”;</li>


 	

<li>Relé 3:
Ligar: “r3on”;
Desligar: “r3off”;</li>


 	

<li>Relé 4:
Ligar: “r4on”;
Desligar: “r4off”;</li>


</ul>


Definamos uma variável que irá receber os comandos (command) e a lógica associada a mesma:

String  command ="";

Assim, por exemplo, se o aplicativo Android enviar como um comando: “r1on”,  o relé 1 (relay1) deverá ser ativado:

if (command == "r1on")

{

digitalWrite(relay1, LOW);

}

Observe que os relés usados no projeto são ativados com um nível baixo (LOW).

Utilizando alsoif, escreveremos os demais comandos (veja o codigo completo ao final).

Também definiremos “comandos de grupo” para ligar (“allon”) e desligar (“alloff”) simultaneamente todos os dispositivos. Por exemplo, para ativar ao mesmo tempo todos os relés, usaremos o comando “allon” como mostrado abaixo:

if (command == "allon")

{

digitalWrite(relay1,LOW);

digitalWrite(relay2,LOW);

digitalWrite(relay3,LOW);

digitalWrite(relay4,LOW);

}

A mesma lógica deverá ser empregada para o comando “alloff”.

Siga o diagrama elétrico acima para concluir a conexão de todo o HW.

Agora faça o download do código completo:

Home_Automation_NodeMCU_Android_Voice_V2_EXT.ino a partir de meu GitHub.

Entre com as credenciais de sua rede local de WiFi:

const char* ssid = "YOUR SSID";

const char* password = "YOUR PASSWORD";

Faça o upload do código em seu NodeMCU e pronto! Você poderá verificar no  Monitor Serial se o programa está em execução. Deixe o programa rodando para que se possa testar o aplicativo Android desenvolvido a partir do próximo passo.

CUIDADO: Quando fizer o upload do código, desligue a alimentação dos relés para não sobrecarregar o NodeMCU.

 

4: A App Android : “Designer Tab”

Designer Tab

Usaremos a aplicação on-line: MIT App Inventor para o desenvolvimento de nossaApp Android:

Componentes Principais da Screen1 (veja foto acima)

      • Entrada do endereço IP
        TextBox denominado “IP_Address”
      • 8 botões ON / OFF, um para cada relé:
        Relay_1_ON
        Relay_2_OFF
        Etc
      • 2 botões ON / OFF para todos os dispositivos:
        All_Devices_ON
        All_Devices_OFF
      • Botão de Entrada de Voz
        Voice_Input
      • Componentes não visíveis:
        Web1
        SpeachRecognizer1
        TextToSpeach1
      • Outros:
        Caixa de texto:
        Speach_To_Text
        Label:
        Comm_Status

Ao final o aplicativo deverá ficar assim:

on-line MIT App

 

5: A App Android: Botões

Devemos criar na tab Blocks, 10 botões. Todos seguirão a mesma estrutura que os 2 mostrados na foto.

tab Blocks

Esses blocos de 2 botões foram criados para:

      • Relay_1_ON. Click
      • Relay_1_OFF.Click

Estas funções são chamadas quando se “clica” em um desses botões. Por exemplo, quando você clica no botão Relay_1_ON, 3 ações serão executadas:

Um comando será enviado no formato: http: / ip_address * / r1on
Um “eco” no mesmo formato é esperado devido a “call Web1.Get”
Uma “mensagem” sonora será lida pela App: no caso: “Relé 1 ligado”
* O IP_Address será o que você digitar na Tela 1. Utilizando-se o default (10.1.0.3), a mensagem real seria: http: /10.0.1.3/r1on

Voce poderá utilizar qualquer mensagem nesta etapa, ou deixá-la vazia (“”) caso não deseje um retorno auditivo.

 

6: O App Android: Reconhecimento de voz

Os blocos abaixo mostram a construção do código para o reconhecimento de voz de nosso aplicativo:

Reconhecimento de voz

Note que para qualquer comando de voz, o comando enviado será sempre em  minúsculas (uso do bloco de texto downcase). Isso facilitará a decodificação do comando de voz pelo NodeMCU.

Por exemplo, se você deseja “ativar” o relé 1, uma palavra ou sentença deve ser enviada para ser reconhecida pelo código do NodeMCU. Enviaremos para isto um comando de voz em português: “Ligar UM”

if (command == "r1on"  || command == "ligar 1"    || command == "ligar um")

{

digitalWrite(relay1,LOW);

}

Assim, quando digo “ligar um”, a App irá enviar: http: / 10.0.1.3/ligar um (ou http: / 10.0.1.3/ligar 1) e o NodeMCU colocará seu pino em LOW,  ativando o relé 1.

 

7: O App Android: Manipulação de erro

Manipulação de erro

Se ocorrer um erro, o bloco acima escreverá os detalhes referente ao mesmo na última linha do App (Comm_Status). Você somente irá ver-lo se ao criar o App usar a opção Responsive.

 

8: Testes finais

Testes finais

Você poderá criar seu aplicativo passo a passo, como mostrado nas etapas anteriores ou utilizar o fonte de meu projeto (.aia) diretamente no MIT App Inventor:

MIT App Inventor

Caso você não tenha experiência no desenvolvimento de aplicativos Android, poderá executar o arquivo .apk diretamente em seu dispositivo Android.

Ambos arquivos .aia e .apk poderão ser baixados de meu GitHub:

Home_Relay_Voice_Ctrl_V2.aia

Home_Relay_Voice_Ctrl_V2.apk

O video abaixo mostra alguns testes de motores utilizando-se do App:

9: Conclusão

Como sempre, espero que este projecto possa ajudar outros a encontrarem o seu caminho no emocionante mundo da electrónica, robótica e do IoT!

Verifique o depositário no GitHub para obter os arquivos atualizados:

Home-Automation-with-Android-and-NodeMCU

Saludos desde el sur del mundo!

Até o próximo tutorial!

Obrigado

Compartilhe com seus amigos

Compartilhar no facebook
Facebook
Compartilhar no twitter
Twitter
Compartilhar no linkedin
LinkedIn
Compartilhar no telegram
Telegram
Compartilhar no whatsapp
WhatsApp
Classifique:
5/5

Newsletter IOT

congresso Tudo sobre IoT

Internet das Coisas

O IoT tem como objetivo permitir uma melhor relação entre o mundo físico (as coisas), o mundo biológico (nós) e o mundo digital (a computação).

Eventos

Últimos Videos do Canal

Congresso Online

Industria

Cases IOT

Gostou do artigo? Deixe seu comentário abaixo

Webinários

Inscreva-se em nossa newsletter