“Computer, Fire All Weapons!”

30 30-03:00 agosto 30-03:00 2017 — 4 Comentários

Cover3

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.

O diagrama de blocos abaixo mostra o projeto:
No vídeo, voce terá uma idéia de como ficará o projeto final:

1: Lista de Materiais (BoM)

(Valores em USD apenas como referência)

  1. NodeMCU ESP8266-12E ($8.79)
  2. Echo Dot (2nd Generation) – Black ($49.99)
  3. 2 X Mini BreadBoard ($1.00)
  4. 1 X RBG LED – Common Cathode 4 Pins 10mm ($0.10)
  5. 1 X LED Vermelho
  6. 1 X Resistor de 220 ohm
  7. Male-Female Dupont Cables ($1.00)
  8. 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

1. fauxmoESP Library ZIP

A biblioteca acima necessitará do suporte de outras duas, estas desenvolvidas por: Hristo Gochkov:

2. ESPAsyncTCP

3. ESPAsyncWebServer

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

Installing and Testing the RGB LED

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.

Alexa app

  • 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:

RGB Serial Monitor.png

4: Instalando as “armas”!

Installing Weapons!

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”.

IMG_1505.JPG

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……

To Boldly Go Where No One Has Gone Before......
É sua vez, agora!

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:

Alexa Star Trek Simulation

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

4 Respostas para “Computer, Fire All Weapons!”

  1. 

    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

    Curtir

  2. 

    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!

    Curtir

  3. 

    Excelente artigo!Estou iniciando agora no NODEMCU mas estou me animando a cada dia mais com as possibilidades de uso da placa.

    Curtido 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! 😉

      Curtir

Deixe uma resposta para Marcelo Rovai Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s