Quando o IoT encontra a Inteligência Artificial: Automação residenc...
Alexa é capaz de interação de voz, reprodução de música, fazer listas de tarefas, configurar alarmes, podcasts de transmissão, reproduzir audiobooks e fornecer informações meteorológicas, de tráfego e outras informações em tempo real.
A Alexa também pode controlar vários dispositivos inteligentes funcionando como um hub de automação residencial. Usaremos neste projeto, o “Echo-Dot”, que permite aos usuários ativar o dispositivo usando uma palavra de despertar, como “Alexa” ou “Computer”, como em “Star Trek !
No espaço da automação residencial, a Alexa pode interagir com vários dispositivos diferentes como Philips Hue, Belkin Wemo, SmartThings, etc. Em nosso caso, vamos emular o WeMo, usando a biblioteca fauxmoESP.
Esta é a principal diferença entre este tutorial e o anterior. A biblioteca fauxmoESP simplifica extremamente o código necessário para o desenvolvimento de projetos de automação residencial envolvendo a Alexa e o NodeMCU.
WeMo é uma série de produtos da Belkin International, Inc. que permite aos usuários controlar eletrodomésticos desde qualquer lugar. O conjunto de produtos inclui um interruptor, sensor de movimento, interruptor de luz, câmera e aplicativo.
O WeMo Switch (nosso caso aqui) pode ser conectado a qualquer tomada doméstica, a qual pode ser controlada a partir de um smartphone iOS ou Android o qual executará o aplicativo WeMo, via rede doméstica WiFi ou rede celular. Nós emularemos este dispositivo, mas seu controle será obtido por voz via o Echo-Dot.
O diagrama de blocos abaixo mostra o que será desenvolvido em nosso projeto:
O vídeo abaixo mostra como o projeto ficará no final:
1: Lista de materiais
(Valores em US$ apenas para referência)
- NodeMCU ESP8266-12E ($8.79)
- Echo Dot (2nd Generation) – Black ($49.99)
- 2 X Mini BreadBoard ($1.00)
- 4-Channel Relay Module ($8.49)
- Male-Female Dupont Cables ($1.00)
- Fonte externa de 5V ou bateria
2: Emulação do WeMo – a biblioteca FauxmoESP
https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=1160 1160w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=150 150w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=300 300w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=768 768w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=1024 1024w" sizes="(max-width: 580px) 100vw, 580px" />
Este tutorial baseia-se na excelente biblioteca e exemplo de código aberto desenvolvido por Xosé Perez (Tinkerman). Veja a sua publicação original aqui: Emulate a WeMo device with ESP8266. Tinkerman por sua vez, baseou-se no código Python desenvolvido por Maker Musings.
fauxmoESP é uma biblioteca para dispositivos baseados em ESP8266 que emula um dispositivo Belkin WeMo, permitindo assim que você os controle usando um protocolo, especialmente desenvolvido para dispositivos, como o Amazon Echo ou o Echo-Dot.
A biblioteca pode ser encontrada no website BitBucket de Xose Perez: fauxmoESP
Para que a fauxmoESP funcione, você também precisará de mais 2 bibliotecas, desenvolvidas por Hristo Gochkov:
2. ESPAsyncTCP
Então, vá até o IDE do Arduino e instale as 3 bibliotecas acima no diretório Arduino/Libraries.
Informações técnicas adicionais (e opcionais):
Se você está interessado em entender mais profundamente o que está acontecendo, leia o artigo: HOW TO MAKE AMAZON ECHO CONTROL FAKE WEMO DEVICES, escrito por Rick Osgut, onde poderá aprender um pouco mais sobre a emulação do WeMo.
Vai aqui um pequeno resumo:
Os dispositivos WeMo utilizam UPnP para executar certas funções através da rede. A função de detecção do dispositivo começa com o Echo ou Echo-Dot (em nosso caso aqui) à procura de dispositivos WeMo utilizando UPnP. O dispositivo então responde ao Echo-Dot com seu URL utilizando HTTP sobre UDP. OEcho-Dot então solicita a descrição do dispositivo utilizando esse URL HTTP. A descrição é então retornada como uma resposta HTTP. Neste ponto, o Echo-Dot já “descobriu” o dispositivo.
O Echo-Dot simplesmente se conectará ao WeMo através da interface HTTP e emitirá um comando do tipo “SetBinaryState”. O WeMo então “obedecerá”, retornando uma confirmação via HTTP. O diagrama acima resume a comunicação entre o Echo-Dote o WeMo Switch. O diagrama acima, resume o protocolo.
3: Criando dispositivos WeMo com a ajuda do NodeMCU
Vamos conectar um módulo relé de 4 canais onde controlaremos por exemplo, 2 lâmpadas e 2 tomadas genéricas (“outlets”), conforme mostra o diagrama acima.
Criaremos 4 “dispositivos inteligentes únicos”:
- Light1 ==> Relay 1 ==> NodeMCU D5
- Light2 ==> Relay 3 ==> NodeMCU D7
- Outlet1 ==> Relay 2 ==> NodeMCU D6
- Outlet2 ==> Relay 4 ==> NodeMCU D8
e 3 grupos de dispositivos integrados:
- All Devices ==> Light1, Light2, Outlet1 e Outlet2
- Living Room ==> Light1 e Outlet1
- Bed Room ==> Light2 e Outlet2
Baixe e abra o código: NODEMCU_ALEXA_WeMos_4X_Fauxmo_EXT.ino desde meu GitHub e altere as credenciais “dummy” pelas de sua rede WiFi:
/* Network credentials */
#define WIFI_SSID "YOUR SSID HERE"
#define WIFI_PASS "YOUR PASSWORD HERE"
defina os pinos do NodeMCU que serão utilizados para acionar os dispositivos individuais
/* Set Relay Pins */
#define RELAY_1 D5
#define RELAY_2 D6
#define RELAY_3 D7
#define RELAY_4 D8
Agora, escolha com que nomes (entre aspas) com que a Alexa identificará os dispositivos:
// Device Names for Simulated Wemo switches
fauxmo.addDevice("Light One");
fauxmo.addDevice("Light Two");
fauxmo.addDevice("Outlet One");
fauxmo.addDevice("Outlet Two");
fauxmo.addDevice("Bed Room");
fauxmo.addDevice("Living Room");
fauxmo.addDevice("All Devices");
Na função setup(), defina qual será a função que responderá aos comandos por voz (aqui a função se chama “callback”):
fauxmo.onMessage(callback);
Na função setup(), também se deverá chamar a função de setup e conexão com a internet:
//setup and wifi connection
wifiSetup();
Observe o setup e as condições iniciais para os pinos do NodeMCU:
//Set relay pins to outputs
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
pinMode(RELAY_3, OUTPUT);
pinMode(RELAY_4, OUTPUT);
//Set each relay pin to HIGH
digitalWrite(RELAY_1, HIGH); delay(500);
digitalWrite(RELAY_2, HIGH); delay(500);
digitalWrite(RELAY_3, HIGH); delay(500);
digitalWrite(RELAY_4, HIGH); delay(500);
Note que os relés funcionam com “lógica reversa”. HIGH para desligar!
A função loop() será simplesmente:
void loop() { fauxmo.handle(); }
A função callback deverá ter o formato como o exemplo abaixo. Aqui só está incluído a porção correspondente ao controle do dispositivo Light1:
/* ---------------------------------------------------------------- Device Callback -------------------------------------------------------------------*/ void callback(uint8_t device_id, const char* device_name, bool state)
{
Serial.print("Device ");
Serial.print(device_name);
Serial.print(" state: ");
if (state)
{
Serial.println("ON");
}
else
{
Serial.println("OFF");
}
//Switching action on detection of device name
if ( (strcmp(device_name, "Light One") == 0) )
{
if (!state)
{
digitalWrite(RELAY_1, HIGH);
}
else
{
digitalWrite(RELAY_1, LOW);
}
}
....
}
Observe que usei “! State” dentro da “declaração if”, porque os relés de 4 canais usam “lógica reversa” para ativação (LOW para ativar).
On the Serial monitor you can see the messages exchanged:
[WIFI] Connecting to ROVAI TIMECAP
............................. ==> CONNECTED!
[WIFI] STATION Mode, SSID: ROVAI TIMECAP, IP address: 10.0.1.36
Agora, necessitamos que a Alexa encontre seu dispositivo. Existem dois métodos para isso:
- Utilizando o aplicativo Alexa no smartphone como mostrado nas fotos abaixo. Neste exemplo (não é o nosso aqui), a Alexa encontrará “1 Smart Home device”: lights WeMo Switch.
https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=1160 1160w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=150 150w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=300 300w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=768 768w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=1024 1024w" sizes="(max-width: 580px) 100vw, 580px" />
- Ou pedindo diretamente à Alexa através de um comando de voz, como por exemplo: “Alexa, Find connected devices”, ou “Computer, discovery devices“, como é o nosso caso, mostrado no vídeo abaixo:
Uma vez que os dispositivos inteligentes forem descobertos (basta uma única vez), você poderá comandar o Echo-Dot para acioná-los, como mostra o vídeo abaixo:
O screenshot abaixo, mostra para referencia um screenshot to Monitor serial no caso de minha rede e setup:
4: Conclusão
Home-Automation-with-Alexa-and-NodeMCU/tree/master/Version_FauxmoESP
E não deixe de visitar e seguir meu blog https://MJRoBot.org e minha página: MJRoBot.org no Facebook
Saludos desde el sur del mundo!
Até o próximo tutorial!
Obrigado
Marcelo
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)