“Computer, Fire All Weapons!”

30 30UTC agosto 30UTC 2017 — 2 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

Anúncios

2 Respostas para “Computer, Fire All Weapons!”

  1. 

    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 um comentário

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 )

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s