Conteúdo


Crie um jogo de acelerômetro de IoT simples e divertido

Saiba como capturar e enviar dados de sensor para a nuvem usando o Watson IoT Platform e, em seguida, analisar esses dados usando o Data Science Experience

Comments

É possível criar um joguinho divertido para jogar com seus amigos e colegas. Com qualquer pessoa que tenha um smartphone é possível jogar um jogo que eu chamo de "Harlem Shake." (Assista-nos chacoalhando em uma reunião recente sobre Aprendizagem profunda.)

É fácil jogar: forneça uma URL a alguém que a acessará via smartphone e, em seguida, peça que a pessoa chacoalhe o smartphone o máximo que puder. A pessoa que empregar mais energia vencerá!

O que acontece por trás da cena é muito básico: os dados do acelerômetro do smartphone são transmitidos para a nuvem, capturados em um banco de dados e, em seguida, um script calcula o vencedor. Parece simples e divertido. Mas, você precisa desenvolver primeiro. E você vai aprender bastante sobre MQTT, NodeRED, ApacheCouchDB e ApacheSpark ao longo do processo.

Este jogo de IoT, como todos os aplicativos de IoT, exige um sistema completo para funcionar. Neste tutorial, usaremos a Nuvem IBM (IBM Bluemix) e os serviços do IBM Watson IoT Platform:

  • Node-RED, que usamos para criar o aplicativo de IoT e para transmitir os dados do sensor para o banco de dados
  • IBM Watson IoT Platform, que usamos como o message broker do MQTT para reunir tudo isso
  • Cloudant, um sistema de banco de dados NoSQL que usamos para armazenar os dados
  • Um script SQL Apache Spark, que executamos no IBM Data Science Experience para informar quem é o vencedor

Obviamente, todos os smartphones agirão como sensores, transmitindo os dados para nosso aplicativo de IoT.

É possível criar o jogo em seis etapas:

  • Implemente o aplicativo do jogo usando a implementação de um clique.
  • Substitua o serviço da plataforma Internet das Coisas.
  • Assegure-se de que o message broker do MQTT possa receber dados.
  • Configure um banco de dados NoSQL para armazenar os dados.
  • Transmita os dados para o Cloudant usando o Node-RED.
  • Analise os dados em um bloco de notas de ciência de dados.

O que será necessário para criar o aplicativo

  • Uma conta do Bluemix. (É possível solicitar uma avaliação grátis aqui). Por enquanto, não é possível usar uma conta gratuita para este aplicativo.
  • Um smartphone. Ou, um ou mais amigos com smartphones para jogar com você.
  • Uma conta do Data Science Experience.
    1. Abra http://datascience.ibm.com/
    2. Clique em Inscrever-se.
    3. Clique em Inscrever-se com seu ID IBM.
    4. Clique em Inscrever-se no DSX.
    5. Na página Criar organização e espaço, clique em Continuar.
    6. Espere a inicialização do ambiente e, quando ele estiver disponível, clique em Iniciar.
1

Implemente o aplicativo do jogo usando a implementação de um clique

Quando você tiver uma conta do Bluemix, será possível implementar o aplicativo com apenas um clique. Será necessário configurar a implementação manualmente. Eu já criei um aplicativo de jogo de IoT de amostra e o coloquei no Github para você fazer o download.

Nota: Com uma conta gratuita padrão, não é possível usar a opção de implementação automática porque não é possível acessar os serviços de pipeline de construção.

  1. Efetue login em sua conta do Bluemix.
  2. Acesse meu repositório discover-iot-sample no GitHub e, nas instruções leia-me, clique em Implementar no Bluemix botãoscreen capture of the github readme deploy to bluemix button
    screen capture of the github readme deploy to bluemix button
  3. No Bluemix, clique em Implementar.
    screen capture of the Bluemix Deploy                         button
    screen capture of the Bluemix Deploy button

    Enquanto o aplicativo estiver sendo criado, uma janela de status será exibida. Depois que o aplicativo for criado, o botão Visualizar aplicativo será ativado.screen capture of the status window

    screen capture of the status window

    Nota: Se o botão Visualizar aplicativo estiver desativado, será possível clicar Delivery Pipeline para ver o progresso da implementação, que poderá levar vários minutos.

    screen capture of the delivery pipeline progress
    screen capture of the delivery pipeline progress
  4. Se você abrir o Delivery Pipeline, clique na cadeia de ferramentas discover-iot-sample. Em seguida, clique no botão Visualizar aplicativo.

    O link necessário para jogar o jogo no smartphone será exibido. Copie a URL (e crie uma URL curta ou um código QR para a URL) e envie-a para o seu e-mail. Você usará esse link mais tarde para jogar o jogo.

    screen capture of the link
    screen capture of the link

Embora agora seja possível enviar os dados do acelerômetro para a nuvem, eles não serão armazenados. A seguir, é necessário configurar o armazenamento de dados.

2

Substitua o serviço da plataforma Internet das Coisas

Depois de implementar o aplicativo de jogo, é necessário que haja uma maneira de levar os dados do acelerômetro para a nuvem. Para levar os dados para a nuvem, será necessário usar o Node-RED, que é um software livre de edição de fluxo gráfico. Use o Node-RED para assinar os dados MQTT que são recebidos do smartphone e armazenados no banco de dados na nuvem. No entanto, antes de chegar ao Node-RED, precisamos substituir o serviço da plataforma padrão pelo serviço que eu incluí como parte do aplicativo que acabamos de implementar.

2a

Exclua o serviço da plataforma de IoT padrão

O texto padrão do Starter da plataforma Internet das Coisas contém um mecanismo Node-RED que você usará para processar as mensagens de IoT. Primeiro, será necessário remover o serviço do Watson IoT padrão do Starter.

  1. É necessário já ter efetuado login na conta do Bluemix. Caso não esteja, efetue login.
  2. Acesse o Starter da plataforma Internet das Coisas no catálogo do Bluemix. (Como alternativa, é possível navegar para esse Starter selecionando Catálogo > Textos padrão > Starter da plataforma Internet das Coisas .)
  3. No campo Nome do aplicativo, insira um nome exclusivo para o aplicativo, como myharlemshakee, em seguida, clique em Criar.
  4. Espere até que o status mude de Iniciando para Executando. screen capture of the starting status
    screen capture of the starting status
    screen capture of the running status
    screen capture of the running status
  5. No menu à esquerda, clique em Conexões. screen capture of the Connections menu
    screen capture of the Connections menu
  6. Para o serviço padrão da plataforma Internet das Coisas, clique no menu no canto superior direito e, em seguida, clique em Desvincular serviço.
  7. Na mensagem pop-up exibida, selecione Excluir esta instância de serviço e, em seguida, clique em OK.
  8. Quando for solicitado que você remonte o aplicativo, clique em Cancelar.
2b

Conecte-se ao serviço de IoT do aplicativo de jogo implementado

Agora que você já excluiu o serviço iotf-service-free padrão, será necessário criar uma conexão com o serviço de IoT do aplicativo de jogo implementado e configurar o nível de segurança correto.

  1. Clique na guia Conectar existente botão
  2. Selecione discover-iot-try-servicee, em seguida, clique em Conectar.
  3. Quando for solicitado que você remonte o aplicativo, clique em Restage.
  4. Espere até que o status mude de Executando.
  5. Clique em discover-iot-try-servicee, em seguida, clique em Ativar. Isso iniciará o IBM Watson IoT Platform na Nuvem IBM.
  6. Passe o mouse sobre a coluna de ícones à esquerda. No menu à esquerda, selecione Segurança.
  7. Editar Segurança de conexão.
  8. Na seção Regra padrão, em Nível de segurança selecione a variável TLS opcionale, em seguida, clique em Atualizar conformidade.
  9. Na parte superior da janela, no canto superior direito, clique em Salvar .
3

Assegure-se de que o message broker do MQTT possa receber dados

Agora que você já se conectou com sucesso ao serviço de IoT fornecido no aplicativo de jogo, será necessário usar o Node-RED para armazenar os dados do sensor (acelerômetro) na nuvem.

3a

Proteja o editor de fluxo Node-RED

Antes de abrir o Node-RED, deve-se configurar um nome de usuário e uma senha para acessar os fluxos do Node-RED no aplicativo.

  1. É necessário retornar à página Aplicativos Cloud Foundry do seu aplicativo de jogo. No navegador, localize a guia Detalhes do serviço. Na menu hamburgerselecione a variável Cloud Foundry Apps.screen capture of the hamburger menu highlighted
    screen capture of the hamburger menu highlighted
  2. Na tabela, selecione o nome do seu aplicativo de jogo.
  3. No menu à esquerda, selecione Conexões. screen capture of the left menu
    screen capture of the left menu
  4. À direita do status, clique em Visitar URL do aplicativo. A URL deve ser o nome do aplicativo seguido de mybluemix.net (por exemplo, https://myharlemshake.mybluemix.net).

    Observação: Anote esta URL porque ela poderá ser usada para abrir a instância do Node-RED.

  5. Para proteger a instância do Node-RED, clique em Avançar.
  6. Escolha um nome de usuário e uma senha. Anote-os. Clique em Avançar.
  7. Clique em Concluir.
  8. Clique em Go to your Node-RED flow editor.screen capture of the go to your Node-RED flow editor
    screen capture of the go to your Node-RED flow editor
  9. Insira seu nome de usuário e a senha para efetuar login no Node-RED.

Agora está tudo pronto para capturar e armazenar os dados. Você implementou o aplicativo de jogo e criou uma conexão entre ele e o message broker. O canal de comunicação está funcionando, mas é necessário ter um local para armazenar os dados que serão enviados.

3b

Assine o fluxo de dados

Agora que podemos acessar o Node-RED, vamos verificar novamente se os dados que saem do smartphone chegam à nuvem (o message broker do MQTT é um serviço que faz parte da plataforma IBM Watson IoT).

Precisamos usar o Node-RED para assinar o fluxo de dados. Faremos qualquer depuração do serviço usando o painel de depuração do Node-RED.

  1. A instância do Node-RED já deverá estar aberta desde a última seção. Caso não esteja, abra a instância do Node-RED usando a Visitar URL do aplicativo que você anotou quando iniciou o mecanismo Node-RED na Seção 3a. Efetue login na instância do Node-RED do aplicativo de jogo usando o nome de usuário e a senha que você designou. screen capture of the log in for Node-RED
    screen capture of the log in for Node-RED
  2. Para excluir todos os nós existentes no fluxo padrão, selecione todos eles e, em seguida, pressione o Backspace ou Excluir . (Nota: O atalho de teclado CTRL A não funciona para selecionar todos os nós.) Uma tela em branco será exibida.
  3. Na paleta esquerda, selecione e arraste o nó de entrada IBM IoT (não use o nó de saída) e o nó de saída debug na área de janela direita. Conecte-os selecionando um círculo de conexão em um nó e arrastando-o para o círculo de conexão do outro nó.screen capture showing the connection between nodes
    screen capture showing the connection between nodes
  4. Dê um clique duplo no arquivo IBM IoT .
  5. Para módulos Autenticaçãoselecione a variável Serviço do Bluemixe clique em Concluído. Isso informa ao nó que ele deve obter as credenciais para se conectar ao broker do MQTT usando a injeção de credenciais do Cloud Foundry, que é um recurso muito útil porque no Bluemix, o aplicativo implementado está conectado ao broker do MQTT (ou seja, ao serviço da plataforma Watson IoT).
  6. Clique na guia Implementar botão
  7. No lado direito do painel, abaixo do botão Implementar, selecione debug .
  8. Em seu smartphone, abra o aplicativo de jogo usando o Nome do aplicativo que você criou na Seção 1. No meu caso é discover-iot-sample-romeokienzler-1412.mybluemix.net/iot-phone
  9. Forneça um nome alfanumérico de oito caracteres; por exemplo, qwer1234.
  10. Forneça uma senha de oito caracteres que contenha somente caracteres alfabéticos entre a e z.screen capture showing the connected smartphone device

    No Node-RED, na guia debug, deverá ser exibida a saída da depuração.screen capture of the debug tab

3c

Revise os dados do sensor no painel da plataforma IBM Watson IoT

Outra maneira de ver os dados do acelerômetro é consultar uma lista com todos os jogadores do jogo.

  1. Abra a plataforma IBM Watson IoT. Na visualização Aplicativos do Cloud Foundry, clique em discover-iot-try-servicee, em seguida, clique em Ativar.screen capture of the Cloud Foundry Apps view
    screen capture of the Cloud Foundry Apps view
  2. No menu à esquerda, selecione Dispositivos.screen capture of the devices view
    screen capture of the devices view
  3. Clique em um dispositivo e, em seguida, dê um clique duplo em um evento sensorData para ver mais detalhes. screen capture showing example sensor data
    screen capture showing example sensor data

Parabéns, está quase pronto. Você já verificou que os dados podem ser transmitidos de um smartphone usando o message broker do MQTT na plataforma Watson IoT para o nosso aplicativo do Node-RED. A próxima etapa é transmitir esses dados para um banco de dados e analisá-los.

4

Configure um banco de dados NoSQL para armazenar os dados

Quando jogamos Harlem Shake estamos enviando dados do sensor de IoT por meio de um message broker do MQTT na nuvem. Precisamos enviá-los a um banco de dados NoSQL. Vamos incluir a função de banco de dados.

  1. A instância do Node-RED já deverá estar aberta desde a última seção. Caso não esteja, abra a instância do Node-RED usando a Visitar URL do aplicativo que você anotou quando iniciou o mecanismo Node-RED na etapa 3a. Efetue login na instância do Node-RED do aplicativo de jogo usando o nome de usuário e a senha que você designou.
  2. No painel esquerdo, arraste o nó function entre os outros dois nós, o que fará com que ele se conecte automaticamente a esses nós. screen capture showing function between IBM IoT and msg.payload nodes
    screen capture showing function between IBM IoT and msg.payload nodes
  3. Primeiro precisamos comprimir as mensagens JSON hierárquicas para um esquema relacional. Dê um clique duplo no nó function e cole no código Javascript a seguir.
    msg.payload = {
    X : msg.payload.d.ax,
    Y : msg.payload.d.ax,
    Z : msg.payload.d.ax,
    SENSORID : msg.payload.d.id
    }
    return msg;

    O resultado final será semelhante a este.screen capture showing insertion of function code
    screen capture showing insertion of function code
  4. Clique em Concluído.
  5. Clique em Implementar. Na guia debug, a saída será semelhante a esta.screen capture showing example debug results
    screen capture showing example debug results

Agora que você já incluiu a função NoSQL, estamos preparados para armazenar os dados no Cloudant.

5

Transmita os dados para o Cloudant usando o Node-RED

Vamos usar o ApacheCouchDB desenvolvido com o IBM Cloudant para transmitir os dados para a função de banco de dados NoSQL que acabamos de criar. O Cloudant é baseado no ApacheCouchDB de software livre e vamos usá-lo para armazenar os dados do sensor intermediário.

  1. No painel esquerdo, na área de armazenamento, escolha o conector de armazenamento cloudant out (o ícone de nuvem está à direita) e conecte-o à saída do nó de função.screen capture showing Cloudant node added to the function
    screen capture showing Cloudant node added to the function
  2. Dê um clique duplo no nó cloudant out e selecione o banco de dados Serviço.

    Nota: Deverá haver apenas um único serviço de banco de dados, a não ser que você tenha conectado mais de um banco de dados Cloudant a este aplicativo no console do Bluemix. (Novamente, a Nuvem IBM aqui está usando a injeção de credencial do Cloud Foundry basicamente para realizar a tarefa de configurar o terminal de banco de dados.)

  3. Chame o banco de dados de harlemshake.
  4. Selecione Armazenar apenas o objeto msg.payload. screen capture showing the edit of the cloudant out node
    screen capture showing the edit of the cloudant out node
  5. Clique em Concluído.
  6. Clique em Implementar.

Este é o momento de verificar se os dados chegaram na tabela. Verifique se o aplicativo de jogo no smartphone ainda está enviando dados, consultando o painel de depuração no Node-RED.

6

Analise os dados em um bloco de notas de ciência de dados

Tudo parece estar certo. O smartphone é chacoalhado, os dados são transmitidos para a nuvem e o banco de dados está hospedando os dados. Mas quem está contabilizando a pontuação? Algo precisa analisar os dados e anunciar o vencedor. Para isso, vamos usar o Data Science Experience.

  1. Efetue login no datascience.ibm.com.
  2. Na parte superior direita, clique em Criar novo > bloco de notas . screen capture showing the data science experience dashboard
    screen capture showing the data science experience dashboard
  3. Clique em Na URL, no campo Nome, inclua um nome e no campo Notebook URL, cole a URL a seguir:
    https://raw.githubusercontent.com/romeokienzler/developerWorks/master/boomboomshakeshakesparkv2.ipynb
  4. Clique em Criar bloco de notas.
  5. Para criar uma nova conexão de origem de dados, clique no ícone Localizar e incluir dados.> Conexões > página do projeto. screen capture showing where the links are located
    screen capture showing where the links are located
  6. Clique em Conexões > Criar conexão.
  7. No campo Nome, especifique um nome e em Instância de serviço selecione o banco de dados. Clique em Criar.

    Nota: Somente deverá ser listado um único banco de dados Cloudant do texto padrão do Node-RED já instalado.

  8. Volte ao notebook e recarregue. Agora é possível ver a conexão. Selecione a primeira célula vazia no bloco de notas e clique em Inserir no código. As credenciais foram criadas e é possível começar a executar o bloco de notas.screen capture showing the credentials have been created
    screen capture showing the credentials have been created
  9. Clique em Célula > Executar todas.

Depois que você e seus amigos jogarem o jogo, será possível verificar quem ganhou. No bloco de notas, procure spark.sql . Parece que "Seb" é o vencedor, aquele que empregou mais energia.

screen capture showing the results of the game

screen capture showing the results of the game

Entendendo a ciência de dados por trás dos resultados

O que a instrução spark.sql faz é aproximar a energia que os jogadores geraram durante o jogo calculando a energia geral nas três dimensões dos dados do acelerômetro.

Em um único eixo, a série temporal de dados de vibração é semelhante ao gráfico a seguir:

graph of a single axis of vibration data

graph of a single axis of vibration data

Se você desejar saber qual a energia representada por essa série temporal, aproxime esse valor usando o integral da função.

graph showing when you approximate by taking the integral of the function

graph showing when you approximate by taking the integral of the function

Lembre-se de que nós eliminamos os valores negativos e os transformamos em positivos. Para aproximar o integral, basta somar todos os valores positivos individuais.

graph showing results of getting rid of the negative values

graph showing results of getting rid of the negative values

Agora que você aprendeu como aproximar o integral de uma série temporal, vamos calcular a energia geral das três dimensões (lembre-se de que temos três sinais individuais para cada dimensão de vibração) usando a fórmula a seguir:

formula of the sum of each measurement and taking the square root

formula of the sum of each measurement and taking the square root

Somamos o quadrado de cada medição e extraímos a raiz quadrada.

Nota: Para obter a energia real, também precisaríamos incorporar a massa do dispositivo.

Usando SQL, esse cálculo é representado pela instrução a seguir:

select
	id, // selecionar o ID do dispositivo para saber quem é o vencedor
	sqrt(sum(ax*ax+ay*ay+az*az)) //calcular a energia
	as energy  // fornecer um nome a esse recurso
	from unconfshake // especificar a tabela de consulta temporária
do ApachSparkSQL 	group by id // calcular  com base em cada
dispositivo	order by energy
desc // fazer com que os melhores apareçam no topo

Conclusão

Você fez a sua parte e criou o jogo. Agora é hora de jogar.

  1. Encontre um amigo ou colega com um smartphone. Forneça ao seu amigo a URL do aplicativo de jogo.
  2. Ele precisa inserir o próprio ID alfanumérico exclusivo de oito dígitos e uma senha alfabética de oito caracteres exclusiva (a - z).
  3. Peça que seu amigo chacoalhe o smartphone em todas as direções. Isso envia dados à nuvem. É possível verificar isso no Node-RED e no Data Science Experience usando a consulta SQL fornecida no bloco de notas que importamos. Basta executar novamente a célula que contém a instrução SQL de vez em quando e você verá como a lista de vencedores muda ao longo do tempo.
  4. É possível verificar quem é o vencedor clicando em Célula > Executar todas no bloco de notas de ciência de dados.

Para jogar novamente, é necessário concluir as etapas a seguir:

  1. Renomeie o banco de dados de destino (harlemshake) no Node-RED e, em seguida, atualize o nome do bloco de notas.
  2. Abra a plataforma IBM Watson IoT novamente, selecione todos os dispositivos e, em seguida, selecione Excluir dispositivos. screen capture showing where to select all devices and delete them
    screen capture showing where to select all devices and delete them

Observação: também é possível excluir os resultados no banco de dados para jogar novamente, mas é mais fácil renomeá-lo e reconfigurar a conexão.

É possível deixar esse jogo ativo para jogar no horário de almoço e manter-se acordado depois de uma boa refeição!


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Internet of Things, Big data e análise de dados
ArticleID=1050588
ArticleTitle=Crie um jogo de acelerômetro de IoT simples e divertido
publish-date=10042017