Este post é na verdade uma continuação de meu último tutorial: Alexa – NodeMCU: Emulando um dispositivo WeMo, onde apresentamos a grande biblioteca fauxmoESP, a qual simplifica muito o código necessário para desenvolver projetos de automação envolvendo a Alexa e a emulação de dispositivos inteligentes utilizando o NodeMCU.
Neste novo tutorial, partiremos desse conceito (emulação de dispositivos WeMo), mas em vez de usar relés para ligar / desligar aparelhos elétricos, “ativaremos” funções mais complexas, onde múltiplos dispositivos estarão envolvidos.
Somente por diversão, simularemos o disparo de algumas armas encontradas na Star Trek Enterprise, tais como Photon Torpedos e Phasers!
O NodeMCU controlará um LED RGB, que será o nosso “Torpedo fotônico” e um LED vermelho nosso “Phaser”. Para dar um efeito mais realista, também incluiremos um Buzzer que gerará algum som junto com o efeito visual.

1: Lista de Materiais (BoM)
(Valores em USD apenas como referência)
- NodeMCU ESP8266-12E ($8.79)
- Echo Dot (2nd Generation) – Black ($49.99)
- 2 X Mini BreadBoard ($1.00)
- 1 X RBG LED – Common Cathode 4 Pins 10mm ($0.10)
- 1 X LED Vermelho
- 1 X Resistor de 220 ohm
- Male-Female Dupont Cables ($1.00)
- Fonte ou bateria externa de 5V
2: Instalando a biblioteca FauxmoESP
Este tutorial baseia-se na excelente biblioteca e exemplo de código aberto desenvolvidos por Xosé Perez (Tinkerman). Veja a sua publicação original aqui: Emulate a WeMo device with ESP8266. Tinkerman baseou seu trabalho no código original em Python desenvolvido por Maker Musings.
fauxmoESP é uma biblioteca especificamente desenvolvida para o ESP8266 emulando dispositivos inteligentes Belkin WeMo, permitindo assim que você os controle utilizando a Alexa através do Amazon Echo ou o Dot.
A biblioteca pode ser baixada site BitBuckt de Xose Perez: fauxmoESP
A biblioteca acima necessitará do suporte de outras duas, estas desenvolvidas por: Hristo Gochkov:
2. ESPAsyncTCP
Agora, uma vez que as 3 bibliotecas foram baixadas, por favor as instale no IDE do Arduino.
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 voce encontrará as bases para a emulação de dispositivos inteligentes do tipo WeMo.
3: Instalando e testando o LED RGB
Depois de ter as bibliotecas instaladas em seu IDE, instalemos o LED RDB como mostrado no diagrama elétrico acima. Estou utilizando um LED Catodo comum, de maneira que conectarei cada um de seus terminais (cabos: vermelho, verde e azul) a um dos pinos do NodeMCU, os quais serão programados como saída. O cátodo comum será conectado ao terra.
Criaremos 3 “dispositivos inteligentes únicos”, um para cada “cor básica” do LED RGB:
- Red ==> NodeMCU D7
- Green ==> NodeMCU D5
- Blue ==> NodeMCU D6
e 2 grupos de dispositivos combinados, “cores secundárias”:
- Yellow ==> Red and Green
- White ==> Red, Green, and Blue
Baixe e abra o arquivo: RGB_fauxmo_Control_EXT.ino a partir de meu GitHub e entre com as credenciais de sua rede WiFi:
/* Network credentials */ #define WIFI_SSID "YOUR SSID HERE" #define WIFI_PASS "YOUR PASSWORD HERE"
Confirme que os pinos do NodeMCU a serem conectados aos pinos do LED RGB estão corretos:
/* Set Devices NodeMCU Pins */ #define RED_PIN D7 #define GREEN_PIN D5 #define BLUE_PIN D6
Na fase de setup() será necessário que cada um dos 5 dispositivos seja “batizado” com um nome específico, o qual será entendido pela Alexa:
// Device Names for Simulated Wemo switches fauxmo.addDevice("Red"); fauxmo.addDevice("Green"); fauxmo.addDevice("Blue"); fauxmo.addDevice("Yellow"); fauxmo.addDevice("White");
Devemos por fim definir a função queque 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 led pins to outputs pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(BLUE_PIN, OUTPUT); // Set each device to LOW digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, LOW);
A função loop() será simplesmente:
void loop() { fauxmo.handle(); }
A função callback deverá ser desenvolvida para cada um dos 5 dispositivos, como o exemplo abaixo (função para o dispositivo “Red”):
/* --------------------------------------------------------------------------- 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, "Red") == 0) ) { if (state) { digitalWrite(RED_PIN, HIGH); } else { digitalWrite(RED_PIN, LOW); } }
Observe que usei “state” dentro da declaração “if”, porque o LED RGB é do tipo catodo comum e usa de lógica normal para sua ativação (HIGH).
Uma vez que o código seja iniciado no NodeMcu, voce poderá observar no monitor serial, a troca de mensagens entre o IDE e o microcontrolador, comprovando que o mesmo esteja conectado a internet:
[WIFI] Connecting to ROVAI TIMECAP ............................. ==> CONNECTED! [WIFI] STATION Mode, SSID: ROVAI TIMECAP, IP address: 10.0.1.33
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 encontrou “1 Smart Home device”: lights WeMo Switch. Em nosso caso os 5 dispositivos definidos deveriam ser encontrados.
- 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 fazer este procedimento 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: Instalando as “armas”!
Instalemos agora mais dois dispositivos simples ao nosso NodeMCU:
- Light (Red Led) ==> NodeMCU D4
- Alarm (Buzzer) ==> NodeMCU D8
e definamos 3 funções especiais de simulação, as quais serão acionadas pela Alexa:
- Firing Torpedos
- Firing Phasers
- Firing All Weapons
No total serão 10 “dispositivos”.
Baixe e abra o arquivo: Star_Trek_Control_EXT.ino desde meu GitHub e entre com as credenciais de sua rede:
/* Network credentials */ #define WIFI_SSID "YOUR SSID HERE" #define WIFI_PASS "YOUR PASSWORD HERE"
Confirme que os pinos do NodeMCU a serem conectados aos pinos do LED RGB, LED vermelho e Buzzer estejam corretos:
/* Set Devices NodeMCU Pins */ #define RED_LED_PIN D4 #define RED_PIN D7 #define GREEN_PIN D5 #define BLUE_PIN D6 #define BUZZER_PIN D8
Teremos que definir 3 novas variáveis boleanas, as quais serão ativadas pelos comandos de voz:
bool fireTorpedos = LOW; bool firePhasers = LOW; bool fireAllWeapons = LOW;
No início da função setup(), deveremos chamar a função de setup e conexão com a internet:
//setup and wifi connection wifiSetup();
Também será necessário que cada um dos 10 dispositivos/funcões sejam “batizados” com um nome específico, o qual será entendido pela Alexa:
// Device Names for Simulated Wemo switches fauxmo.addDevice("Red"); fauxmo.addDevice("Green"); fauxmo.addDevice("Blue"); fauxmo.addDevice("Yellow"); fauxmo.addDevice("White"); fauxmo.addDevice("Light"); fauxmo.addDevice("Alarm"); // Device Names for functions fauxmo.addDevice("Torpedos"); fauxmo.addDevice("Phasers"); fauxmo.addDevice("All Weapons");
Devemos por fim no setup(), definir a função que responderá aos comandos por voz (aqui a função se chama “callback”):
fauxmo.onMessage(callback);
Na função loop() incluiremos agora, 3 novas funções especiais, as quais serão executadas dependendo do comando que receba a Alexa:
void loop() { fauxmo.handle(); torpedosFiring (); phasersFiring (); allWeaponsFiring(); }
A função de retorno de chamada (callback), deve ser desenvolvida da mesma maneira que fizemos antes com o led RGB, nada diferente, a menos que, ao chamar as funções especiais, “ativaremos” a variável correspondente:
Por exemplo:
Em um comando de voz: “Turn On Torpedos” ==> Somente a variável fireTorpedos será configurada para HIGH e no seguinte ciclo do loop(), o status dessa variável será utilizado pela função torpedosFiring().
if ( (strcmp(device_name, "Torpedos") == 0) ) { if (state) { fireTorpedos = HIGH; } else { digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, LOW); } }
Por último, mas não menos importante, você deverá criar as 3 funções especiais para comandar as armas. Aqui você deve usar sua imaginação.
Eu criei 3 funções únicas, onde:
- “Disparando Phasers”:
Eu pisquei o LED vermelho 15 vezes, acionando concomitantemente o buzzer
- “Disparando Torpedos”
Misturei as cores do LED RGB com som e temporizações diferentes para cada cor
- “Disparando todas as armas”:
Misturei Torpedos e Phasers
Veja o código final para detalhes. É uma lógica simples.
Para ficar mais divertido e parecido com Star Trek, no App da Alexa, alterei a palavra para acordar o Dot (“Wake word”) para “COMPUTER” ao invés do tradicional “ALEXA”.
A Alexa deverá descobrir os 10 “devices”.
Conectei o LED RGB e o led vermelhos a um modelo da USS Enterprise que tenho (o modelo 1701-E, capitaneada por Jean Luc Picard e destruída no último filme da nova geração (TNG):
O vídeo abaixo mostra o processo de descobrimento dos dispositivos:
O vídeo abaixo mostra os 10 dispositivos sendo testados por comando de voz:
5: To Boldly Go Where No Man Has Gone Before……
Seja criativo! Inclua mais atuadores (ou mesmo sensores)! Por exemplo, use som real para obter melhores efeitos. Crie outras funções, etc.
Lembre-se: “O céu não é o limite!” Afinal, o homem chegou à Lua! E em breve, Marte!
“Live Long and Prosper”
Boa sorte! 😉
6: 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 meu depositário no GitHub para obter os arquivos atualizados:
E não deixe de visitar e seguir este blog e minha página: MJRoBot.org no Facebook
Saludos desde el sur del mundo!
Até o próximo tutorial!
Obrigado
Marcelo
Boa noite! Excelente trabalho!
É possível Alexa entender Português do Brasil? Se sim, como?
Quero usar para que pessoas com limitações possam acionar emails e SMS´s de alerta a cuidadores em caso de emergência. Mas o ideal é que Alexa entenda portugues!
CurtirCurtir
Excelente artigo!Estou iniciando agora no NODEMCU mas estou me animando a cada dia mais com as possibilidades de uso da placa.
CurtirCurtido por 1 pessoa
Valeu, obrigado! 😉
O NodeMCU é excepcional! Substitui o Arduino em grande parte dos projetos com folga! O preço é cada vez mais baixo. Eu gosto muito da ESP12e V 2.0 (Estável e sólida). Mas na falta dela, a V3 que é mais barata, em geral também funciona bem (apesar de ser maior e mais chata de se instalar no protoboard). Eu estou começando a conhecer a ESP32. Vamos ver para quantas anda! 😉
CurtirCurtir