Transformando seu Raspberry Pi 3 em um Beacon

Beacon da Estimote
Beacon da Estimote

No post anterior discorri a respeito de beacons (sugiro a leitura nesse link, caso não tenha entendimento a respeito ainda), agora escrevo esse tutorial para configurar o Raspberry Pi 3 como um Beacon. Alguns passos adotados são padrão e provavelmente você já está acostumado. No caso do BLE (Bluetooth Low Energy, nativo do Raspberry 3), tive um trabalho extra, mas com o sistema básico instalado tive que adotar procedimentos para configurar inclusive a WiFi. Pra começar, coloquei dissipadores no Raspberry; não que ele esquente muito, mas tem lá sua importância. Após, instalei a versão mínima do Raspbian (Jessie), habilitei o ssh (comando ‘sudo raspi-config’ e ‘Advanced Options’). Localmente ainda, configurei a interface wlan0 pela linha de comando. Ressalto que inicialmente a interface WiFi não apareceu no sistema, somente após o upgrade. Para deixar completinho, vou descrever o processo, apesar de você encontrar referências que escrevi em outros artigos, inclusive para o Sistemas Embarcados.

Update do sistema

O primeiro passo pra mim foi fazer a atualização do sistema após a instalação. Tenha em mente que a instalação mínima não contempla interface gráfica. De qualquer modo, sempre faço tudo por linha de comando em Linux por ser mais prático. Se estiver utilizando um WM, abra um terminal e:

 

Configurar a interface wlan0 por linha de comando no Linux





O processo é bastante simples e vou descrevê-lo como receita de bolo:

  • Torne-se root temporariamente com o comando ‘sudo su’.
  • Edite o arquivo /etc/network/interfaces com seu editor preferido. Eu utilizo o ‘vi’, nem vou entrar em detalhes, mas você pode usar o ‘pico’, ‘nano’ ou ‘mcedit’.
  • Comente as linhas relacionadas à interface wlan.
  • Adicione o seguinte conteúdo:

  • Reinicie o serviço de rede e o daemon pelo systemctl:

Agora seu Raspberry já deverá estar conectado à sua rede WiFi. Feito isso e com o serviço ssh habilitado, dirija-se a um computador. Se preferir fazer tudo no Raspberry mesmo, ignore a parte do ssh.

A conexão de rede será necessária principalmente pela necessidade de instalação de pacotes, porém por alguma razão sombria, é possível que você esteja optando por não distribuir IP por DHCP. Nesse caso o trabalho é maior e mais chato:

  • Edite o arquivo /etc/wpa_supplicant/wpa_supplicant.conf
  • Adicione o seguinte conteúdo:

 

  • Agora edite o arquivo interfaces e invés da configuração descrita para DHCP, escreva esta configuração que segue:

 

  • Se preferir, invés de especificar o DNS no arquivo interfaces, aponte-o em /etc/resolv.conf:

Quando a interface é configurada por DHCP, o reteador informa o gateway, máscara e DNS, mas quando configurado manualmente, você deverá saber todos esses parâmetros. Seguindo.

 

Configurar o Bluetooth LE no Raspberry Pi

Como fui por osmose, esqueci de testar se nessa nova versão do sistema operacional (Jessie) é necessário esse procedimento, mas de qualquer modo, servirá para versões anteriores do RPi.

Instale as dependências iniciais:

Com isso, 14MB se foram. Agora vamos à compilação do Bluez:

 

O processo é um bocado lento, mas “acaba no fim”. Quando acabar, não estará funcionando se for o Raspberry Pi 3. Estranho esse tutorial que vos escrevo, hum? Mas vamos lá.

Feita a instalação, você certamente encontrará a interface:

saída do comando hciconfig
saída do comando hciconfig

Automaticamente a interface foi levantada (UP RUNNING), mas se porventura sua interface aparecer como DOWN, basta levantá-la:

Para anúncio, outro comando deve ser utilizado:

E então desabilitar o scan para evitar problemas enquanto anunciando:

Iniciar anúncio do Beacon

Infelizmente existe uma complexidade notável aqui, mas vou ser superficial na explicação porque ainda não absorvi todos os conceitos necessários para te explicar com segurança essa parte. Primeiro, se desejar criar uma URL Eddystone, você pode optar por uma calculadora online. Mas essa pode não ser a melhor opção, porque a maioria dos aplicativos dá suporte aos dispositivos que se identificam como iBeacon. Por exemplo, você pode usar o Estimote para identificar outros beacons que não iBeacon, bastando para isso identificar-se como um dispositivo da Apple. Para tal, discorro a respeito do hci.

Comando para inicializar um beacon




Estive por longos dias me debatendo para configurar o modo URL utilizando o formato de mensagem de resposta – por esse erro, não cheguei tão perto do resultado esperado. Com algumas dicas do Leonardo Lontra, consegui enfim interpretar as partes que me faltavam entender. Vejamos:

0x08 0x0008 – OGF e OCF

OGF significa Operation Group Field e OCF significa Operation Command Field. Saber disso não ajuda em nada aqui, mas são dois campos fundamentais e para BLE, sempre será esse valor.

1E e 02

Esse é o primeiro valor significativo da string, que informa o comprimento da mensagem. No caso, vai até o campo 30. É importante frizar que a mensagem normalmente envia 31 octetos, e a mensagem é dividida em parte significativa e parte não-significativa. A parte não significativa é preenchida por zeros e a parte significativa é o último valor válido – no caso da string acima, ‘CA’, que casa exatamente com 1E – em decimal, 30. O segundo octeto aponta o número de octetos dentro da primeira estrutura.

01 – Identificador do tipo AD: Flag

Esse campo identifica o tipo de estrutura AD. O valor 01 indica que é Flag.

1A – Os valores da flag anteriormente citada

Sério, no momento em que estou escrevendo essa linha, conto já como quarto dia trabalhando na identificação dos valores que compõe a string. Você pode usar calculadoras online, fazer Ctrl+C e Ctrl+V por aí, mas eu não ficaria feliz em fazer desse modo, por isso desprendi até a última gota de sangue pra entender a porca, gigantesca e velha especificação do bluetooth. Não que falte informação lá, mas é como escrever uma carta com sopa de letrinhas e então misturar com bastante água e tempero.

Como na AD anterior foi dito que seriam passados flags,  esse A1 passa os valores. As flags são 0 ou 1 e a conversão de 1A para binário equivale a 11010. Para quem não sabe, os bits são lidos da direita para a esquerda; 0 é OFF e 1 é ON. Os valores posicionais representam os seguintes campos:

1A – Número de bytes da segunda estrutura

Se refere ao número de bytes que segue na segunda estrutura AD.

FF – Dados especificos do fabricante

Dados relacionados à manufatura do produto.

4C 00 – Identificador da Apple

Esse valor é o UUID de 16 bits registrado pela Apple. Estranhamente, ele não aparece aqui, talvez por estar desatualizado. O caso é que quando escolher um fornecedor, você deve ver o código (que se apresenta nesse link no formato 0x004C por exemplo) e então dividí-lo em 2 pares, para seguir o padrão.

02 15 – Primeiro e segundo byte de  anúncio de um beacon

Auto-explicativo.

E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 – UUID

Esse valor é utilizado para identificar o beacon. Para gerá-lo é muito fácil, basta ter instalado o programa uuidgen:

Pegue o valor e adicione-o na referida posição (logo após os octetos de anúncio).

Comando e resultado
Comando e resultado

00 00 e 00 00 – Major e Minor

Aqui pode sim variar. No caso, aí estão os campos de ‘area ID’ e ‘unit ID’.  São especificados como “major” e “minor”. Major é para identificar o grupo do Beacon e o Minor é a identificação do Beacon.

C4 00 – RSSI ou TX Power

Essa é a grande sacada. Esse é o valor do sinal TX, utilizado para fazer a calibragem, conforme veremos mais adiante.

hcitool -i hci0 refere-se à interface e cmd ao comando. Os dois primeiros valores são chamados de OGF e OCF. Esses dois valores serão adotados como padrão sempre que for configurar um BLE (Bluetooth Low Energy).

Parar o anúncio





Para parar de anunciar, utiliza-se o comando

O registrado 0x0008 vira 0x000a e o restante é limpo (00).

Configurar no aplicativo

Tem montes de aplicativos, eu vou fazer um video mostrando que fantástico e preciso o beacon é, você consegue ter precisão de 2 centimetros. Basicamente, no aplicativo você escolhe um nome para identificar o dispositivo em um campo, em outro campo você coloca o UUID no formato original, Major e Minor. Vou mostrar também no video como calibrar cada beacon (pretendo colocar mais de um, inclusive já estou iniciando um post para configurar beacon no Arduino) e mostrar alguns apps, mas se quiser já ir experimentando, baixe o Estimote para Android (acho que tem pra iOS também). Por isso, mais uma vez recomendo:

Assine nosso canal no youtube clicando aqui ou copie a URL https://www.youtube.com/c/dobitaobytebrasil, mas não deixe de se inscrever!

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Próximo post a caminho!

Agregador de Links - Loucuras da Net

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta