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-Dot utilizando-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:
e o filme nos mostra como ficará o projeto final:
1: Lista de materiais (BoM)
Valores em USD, utilizados apenas como referência
- NodeMCU ESP8266-12E ($8.79)
- Mini BreadBoard ($1.00)
- 400-point Experiment Breadboard Breadboard ($ 4.97)
- 4-Channel Relay Module ($8.49)
- LEDs (vermelho, amarelo, verde e azul) ($1.00)
- 4 x Resistor (220 ohm)
- Male-Female Dupont Cables ($1.00)
- 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
#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:
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
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”
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
- Caixa de texto:
Ao final o aplicativo deverá ficar assim:
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.
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:
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
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
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:
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:
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
Marcelo
Obrigado por compartilhar o projeto. Darei os devidos créditos no meu TCC.
CurtirCurtir
Olá muito obrigado!! há um bug com versoes novas do android haveria uma forma de concertar isso amigo? os botoes funcionam mas o comando de voz não!! Com versoes anteriores funciona perfeitamente
CurtirCurtir
Boa Noite poite Gostaria de Saber se da para mudar para a placa arduino uno com a placa de ethernet 5100 se sim poderia me explicar como faço
Desde ja agradeço
CurtirCurtir
Depois de um tempo ( dias ) o nodemcu para de responder. Você sabe o que poderia estar acontecendo?
CurtirCurtir
Muito bom seu projeto. ótimo mesmo.
Testei no ESP32 e funcionou perfeitamente, mudando somente o wifi.h, como você informou no laboratório de garagem. Mas como faço para funcionar no LOLIN NodeMcu V3 ?
CurtirCurtir
Oi José. Obrigado! 😉
Em termos de SW, para usar o V2 ou V3, basta usar a biblioteca original wifi8266.h como no tutorial. As duas versões de NodeMCU são compatíveis em termos de Sw.
Mas a grande diferença está no driver de comunicação, pois estes micro controladores usam diferentes chips:
V3: CH340G (Bigger NodeMcu PC board)
V2: CP2012 (Smaller NodeMcu PC board)
Então, antes de conectar o NodeMCU a seu desktop para usar o IDE, você tem que que ter este driver instalado.
CurtirCurtir
Acho que dá para baixar os driver específico a seu OS desse esse link:
https://github.com/nodemcu/nodemcu-devkit/tree/master/Drivers
CurtirCurtir
Prezado Marcelo,
Parabéns pelo projeto.
Pergunto: tem como controlarmos no mesmo app 2(dois) “Node” ? se sim, pode ajudar?
Desde já grato pela atenção.
CurtirCurtir
Você pode criar uma segunda screem no app e adicionar outro ip ( do segundo esp)
CurtirCurtir
Olá, o projeto é muito bacana. Fiz e deu certo o acionamento. A questão é que o aplicativo não emite nenhum som. Sabe me dizer o motivo? Grato.
CurtirCurtido por 1 pessoa
Oi Douglas. Deve ser alguma configuração de seu smartphone. Não tem a ver com o projeto em si.
CurtirCurtir