<
*

Boss

  • Alahu Akbar
  • *****
  • 88
  • 3
  • Boss O Regresso
    • Ver perfil
Controle ativado por voz com Android e NodeMCU
« Online: Dezembro 08, 2017, 09:26:54 am »
Controle ativado por voz com Android e NodeMCU



O diagrama de blocos sumariza o que pretendemos desenvolver:


Block Diagram.jpg


e o vídeo mostra como vai ficar o projeto final:




1: Lista de materiais (BoM)




  1. NodeMCU ESP8266-12E

  2. Mini BreadBoard

  3. 400-point Experiment Breadboard Breadboard

  4. 4-Channel Relay Module

  5. LEDs (vermelho, amarelo, verde e azul)

  6. 4 x Resistor (220 ohm)

  7. Male-Female Dupont Cables

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


Serial Monitor Comm Test




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


Assembling the 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 azul


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:



  • Relé 1:

    • Ligar: “r1on”;

    • Desligar: “r1off”;



  • Relé 2:

    • Ligar: “r2on”;

    • Desligar: “r2off”;



  • Relé 3:

    • Ligar: “r3on”;

    • Desligar: “r3off”;



  • Relé 4:

    • Ligar: “r4on”;

    • Desligar: “r4off”;




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”



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

MIT V2 0


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:


Screenshot_2017-03-29-16-33-37


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.


MIT V2 2




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:



  1. Um comando será enviado no formato: http: / ip_address * / r1on

  2. Um “eco” no mesmo formato é esperado devido a “call Web1.Get”

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


MIT V2 3


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


The Android App: Error Manipulation




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





8: Testes finais


Final Test


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 V2 1


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


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


Home_Relay_Voice_Ctrl_V2.aia


Home_Relay_Voice_Ctrl_V2.apk





Boss O regresso