O diagrama de blocos sumariza o que pretendemos desenvolver:
e o vídeo mostra como vai ficar o projeto final:
1: Lista de materiais (BoM)
- NodeMCU ESP8266-12E
- Mini BreadBoard
- 400-point Experiment Breadboard Breadboard
- 4-Channel Relay Module
- LEDs (vermelho, amarelo, verde e azul)
- 4 x Resistor (220 ohm)
- Male-Female Dupont Cables
- 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 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). Somente irá ver-lo se ao criar o App usar a opção Responsive.
8: Testes finais
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 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:
Artigo disponibilizado por MJRobot.org
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?