APPINVENTOR+ARDUINO: #0 BLUETOOTH LOW ENERGY + FIRST ROBOT

Antes de começarmos a brincar com o Arduino e o AppInventor é importante entender o primeiro tipo de conexão que será vista por aqui. então a ideia desse pré tutorial é entender como Bluetooth Low Energy (BLE), presente no Arduino 101, funciona.

Vamos usar nessa primeira parte, um aplicativo para celular que pode ser baixado tanto para Android como para iOS e controlaremos um conjunto de LEDs  que estão conectados em um Arduino. Vou usar esse módulo bonitinho da GBK Robotics, o First Robot, como exemplo mas poderia ser qualquer outros leds.

Além de ser bonitinho (vai dizer que não?!!) o módulo traz uma facilidade nas conexões, possui um pino Ground comum para todos leds e já vem com todos os resistores dos leds na própria placa. Simplesmente conectei ele a partir do pino 8 seguindo até o último que é o Ground. Simples assim e parte física prontinha.

firstrobotconexao

A versão do Bluetooth que vamos usar, foi projetada para ter baixo consumo de energia e possui a seguinte arquitetura:

  • Dispositivos periféricos: são os servidores se pensarmos em um modelo cliente-servidor, é onde a informação existe.
  • Dispositivos centrais: são os clientes do mundo Bluetooth LE pois leem as informações disponíveis a partir dos periféricos.

No nosso caso o celular é o dispositivo central e o Arduino é o dispositivo periférico.

ble-bulletin-board-model

Fonte: Site oficial do Arduino

Podemos pensar em um dispositivo com BLE como sendo um quadro de avisos e os dispositivos centrais como as pessoas responsáveis por avaliar os dados nesse quadro de avisos. Os dispositivos centrais podem por exemplo ver os serviços, obter os dados

Os periféricos possuem serviços , cada uma dos quais é subdividido em características . Pensando no nosso quadro de aviso podemos pensar nos serviços como as listas independentes (tarefas a fazer, lista de compras…) e as características como cada uma das ações dessas listas.

Um dispositivo pode atualizar suas características do serviço sem se preocupar em avisar aos dispositivos centrais. Já o dispositivo central se conecta ao periférico e lê as “lista” que precisa. Se uma dada característica é de leitura e escrita, tanto o dispositivo central como o periférico podem mudá-la.

Os serviços e características são identificados por números únicos conhecidos como UUIDs, esse número é um identificador único e foi  padronizado pela Open Software Foundation.

Um UUID completo possui 128 bits (16 bytes), porém buscando eficiência e baixo consumo as especificações do BLE introduzem dois UUIDs adicionais, de 16 e 32 bits.  (Visão Técnica do Bluetooth Smart – Site Embarcados)

A ideia é a seguinte, ter um identificador pra poder compartilhar informações quando se trata de sistemas distribuídos como é o caso aqui. E de onde vem esse número? Existe programas e sites que geram esse valor, encontrei esse daqui . No meu exemplo o UUID do serviço é esse: 19B10010-E8F2-537E-4F6C-D104768A1214. Já das características é esse: 19B10011-E8F2-537E-4F6C-D104768A1214. É importante usar um para o serviço e um para as características no caso do serviço ter mais de uma característica.

Tchellita, posso usar esses valores ai?? Você deve estar se perguntando. Pode, para aplicações educacionais não existe muito problema em usar esses valores, lembrando que a ideia aqui na Jornada é dar dicas iniciais sobre tecnologias, depois vale a pena uma estudada mais a fundo no que você se interessar mais.

Vamos pro código no Arduino:

primeirapartecodigoble

  • linha 1: adicionar a biblioteca Curie
  • linhas 3 a 8: criar as constantes que representam em que pino digital o led do módulo do Robô está conectado (o robô como pode ser visto na imagem possui dois olhos, um nariz e 3 leds na “barriga”), aqui você coloca o pino em que o led que você está utilizando está conectado.
  • linha 10: criando o objeto que representa o dispositivo periférico
  • linha 11 criando o serviço que chamei de controlarLEDS o valor entre parênteses é o UUID do Bluetooth que estou usando.
  • linha 12: criei o objeto que me que guarda as característica do meu periférico, nesse caso será possível ler (BLERead) ou escrever (BLEWrite) essas características que no meu caso serão usadas para ligar o desligar os leds.
  • linhar 14 e 15 : variáveis inteiras para guardar a informação que irá chegar via BLE, guarda a última para mudar somente se a informação que chegar for diferente da anterior.

Agora vamos para a função setup do seu Arduino, na qual codificamos o que será executado uma única vez, logo que o código for carregado na plaquinha. Separei em duas partes e deixei comentado para ajudar, a primeira parte trata das configurações do BLE.

primeirapartesetup

E a segunda parte do restante dos pinos, que serão de saída e começam todos desligados:

segundapartesetup

Pronto agora vamos para o loop, código que será executado repetidas vezes, enquanto o Arduino estiver com energia. Nessa primeira parte a lógica é a seguinte:

  • ouvir a interface
  • se o dispositivo periférico estiver conectado com o central que no caso é o celular o MAC aparecerá na interface serial
  • enquanto existir essa conexão e um valor escrito na característica
  • eu guardo esse valor na variável dado
  • e verifico se esse dado é diferente do último valor armazenado, somente para evitar fazer processamento se os dados forem iguais, ou seja nenhuma mudança aconteceu.

primeiraparteloop

E agora, é hora de testar os valores e realizar as tarefas, eu criei a seguinte regra:

  • se o valor enviado for 1 os leds dos olhos serão acesos
  • se o valor enviado for 2 o led do nariz será aceso
  • se o valor enviado for 3 os leds da barriga acendem

dadostestes1

 

 

 

 

 

 

  • se o valor enviado for 4 os leds dos olhos serão apagados
  • se o valor enviado for 5 o led do nariz será apagado
  • se o valor enviado for 6 os leds da barriga apagam.

dadostestes2

 

 

 

 

 

 

 

Eu acabo colocando imagens por que acho que fica melhor para explicar mas você pode obter o código completo aqui no meu repositório (@tchellita). Prontinho agora é somente se conectar ao Arduino via Bluetooth utilizando o celular.

Por enquanto vamos usar  o nRF Connect baixe esse app e siga esse passo a passo:

  • logo que você executar o app com o Bluetooth ligado e o Arduino alimentado vai aparecer a tela que aparece na imagem a esquerda.Clique em CONNECT se aquele é seu dispositivo (a gente colocou um nome nele lembra? Dá uma olhadinha na linha 19 do código no Arduino)
  • se ele não aparecer ali tenta clicar em SCAN para que seja feita uma varredura
  • em seguida é só ir para a aba que vai ter o nome do dispositivo, você vai ver ali um serviço que tem o UUID exatamente do jeito que escrevemos no código carregado no Arduino
  • clique nele e vai aparecer a característica .
  • depois disso é só enviar os valores para controlar os leds, no meu casos de 1 a 6. Para isso clique naquelas setinhas ao lado da característica, lembre de setar o tipo de dado (UNIT8) enviar os dados da nossa brincadeira: valores de 1 a 6

screenshot_20161129-122345

Se você quiser saber mais sobre arquitetura e especificações sobre essa versão de Bluetoothaqui tem um artigo técnico sobre o Bluetooth Smart (BLE) que usaremos nesse tutorial. Aproveitando a deixa, nunca é demais lembrar que esse tutorial e todos os exemplos utilizados tiveram como base os exemplos e tutoriais do site oficial do Arduino e aproveitando, dá uma olhadinha lá também tem uma monte de coisa para se inspirar e aprender.

Ufa!!! Muita coisa né mas espero de verdade ter te ajudado a entender o funcionamento do BLE e te preparar para a próxima jornada: criar nosso próprio app para fazer essa conexão. Abraços e até a próxima!!!❤ <3 

 

Link original clique aqui!

Escrito por Marcela Santos