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
Olá, excelente artigo, gostaria de tirar uma dúvida estou fazendo a automação da iluminação da minha casa e estou usando um Arduino mega e um esp01 e um echo dot 3, o código mostrado neste posto e o mesmo que eu uso, porém só consigo adicionar 10 dispositivos quando crio mais que 10 minha echo dot não encontra, saberia me ajudar em algo desde já agradeço
CurtirCurtir
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