Em meu último tutorial: Quando o IoT encontra a Inteligência Artificial: Automação residenc..., 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:
Valores em USD, utilizados apenas como referência
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.
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:
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:
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.
Componentes Principais da Screen1 (veja foto acima)
Ao final o aplicativo deverá ficar assim:
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:
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:
* 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.
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.
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.
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:
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
Comentar
como poderia usar o wifimaneger para configurar sempre que mudar o nome da rede neste projeto?
Boa noite.
eu poderia usar do mesmo jeito com o ESP32? ou teria que fazer alguma alteração?
Valeu Murta! Muito obrigado!!! ;-)
Projeto completo ! Muito bem feito. Parabéns Marcelo!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)