Manual
do
Maker
.
com
A definição de Beacon é fácil de achar em qualquer consulta simples no Google, mas todos os artigos devem cobrir o assunto adequadamente, então, antes de escrever um post mostrando como usá-lo em diversas plataformas, é importante garantir que o conceito esteja devidamente esclarecido.
Um beacon é um dispositivo de ponto utilizado para atrair para sí a atenção, de forma a ser rastreável. É quase como se fosse um rastreador GPS ou um farol, porém para curtas distâncias indoor. Existem toneladas de aplicações para ele, entre as quais posso citar inicialmente o que a base comercial anuncia, que é a localização de objetos dentro de casa através do beacon conectado por exemplo, a um sapato, ou uma caixa de jóias, etc. Ele pode ser muito, muito útil em diversos ramos, como por exemplo para fornecer informações dentro de um prédio. Não gosta de pedir informações? - sem problemas - o beacon te guiará a seu destino. Pode ser ótimo para identificar trilhas, de forma que aventureiros não se percam. Levam um punhado de beacons na mochila e a cada 50 a 70 metros, colocam um beacon, depois recolhem na volta! As aplicações não acabam ai; imagine o desespero que é perder uma criança no mercado ou no shopping. Pois bem, você pode ter um app no smartphone para dar alarme caso o beacon com a criança tome uma distância maior que 20 metros, por exemplo. Daí é só correr atrás na direção indicada. Em veículos pode ser bastante útil para obter informações de proximidade, o que é fundamentalmente útil no transito de São Paulo com os motociclistas trafegando pelos pontos cegos nos corredores. Em uma balada, fica fácil localizar o garçom, ou ainda, você liga o beacon da mesa e o garçom o localiza para atender seu pedido, sem necessidade de campainha ou display ou número de mesa. Uma loja pode dispor de um aplicativo que o cliente escolhe o produto e é guiado pela loja até a respectiva prateleira.
Existem diversas outras finalidades. Dá pra usar em campo de airsoft como rastreador do inimigo, no animal de estimação, para traçar caminho para cegos de forma que ele tenha retorno audível do trajeto e um monte de outras coisas das quais não vou me alongar para conseguir dar continuidade a esse artigo.
O beacon é um dispositivo bluetooth BLE (Bluetooth Low Energy), que é a versão 4.0 do bluetooth. Como todos sabem, o bluetooth é também um tipo de rede wireless, porém para curtas ditâncias, principalmente utilizado em M2M (machine to machine) para interconexão de dispositivos como headsets, teclados e impressoras ou caixas de som.
Em 2011 nasceu a versão 4.0, conhecida como Bluetooth Low Energy, identificado por BLE. A principio, ele permance em sleep até que uma conexão seja iniciada e essa conexão tem alguns poucos ms de duração. Nas versões anteriores os tempos são bem maiores para uma conexão (na casa dos 100ms) e conseguir reduzir para alguns poucos ms se dá ao fato da banda passante, que pode chegar a 1Mb/s. Com isso, o consumo de energia também é reduzido consideravelmente.
Uma grande diferença entre as versões é que a BLE permite que se faça localização, e por isso que surgiu o iBeacon, que é um padrão da Apple criado para localização em pequena escala.
Para os iPhones, é muito preciso e muito similiar, com acuidade de alguns poucos centimetros por padrão. Para Android tem a API Eddystone, para cumprir o mesmo papel seguindo o protocolo da Apple, de forma que os dispositivos sejam compatíveis. O grande problema é que a precisão para dispositivos Android varia conforme o aparelho; seu case, seu ganho energético, a posição da antena, gargalo no barramento de dados, etc. Isso causa aquele grande infortúnio de ter que homologar uma versão calibrada do software para cada aparelho. Por exemplo, em meu teste dentro do apartamento, a meno de 2 metros do beacon eu recebia a informação de mais de 50 metros de erro. Logo, calibrar é fundamental. A recomendação é que a medição seja feita a 1 metro de distância do beacon e então adicionando-se 41dBm, mas veremos detalhes em outro post, já sendo escrito.
Aí a história muda de figura. Quando você está fazendo um projeto, a localização da antena ou do módulo bluetooth fica a seu critério e a precisão obviamente será enorme, uma vez que o dispositivo terá uma tarefa dedicada, diferentemente de um smartphone. Você pode utilizar beacon com PIC, Arduino, Raspberry, ESP8266 ou qualquer outra board que suporte interfacear com um módulo BLE. O ideal é que você não use o bluetooth 4.0 para multipropósito, isto é, que você dedique ele a tarefas simplificadas e se for utilizar como beacon, que seja exclusivamente para isso. Se pretende conexões mais robustas e sem propósito de localização, a melhor opção é versões anteriores dessa tecnologia sem fio.
Caso prefira adquirir dispositivos dedicados de linha, uma das opções mais baratas se encontra nesse link, atualmente por "~35 impitimas" mas somente via importação, já que nada produzimos na Banânia graças ao descaso político que se satisfaz com o feudo.
A grosso modo, existem quatro blocos de informação pertinentes à comunicação, conforme padronizado pela Apple, e segue a ordem:
Uma string de 16 bytes usada para diferenciar um grande grupo de beacons. Isto é, você precisa ter um mesmo UUID para um grupo de beacons, de forma a ordenar o conjunto que será monitorado pela app. O UUID pode ser gerado com o uuidgen (tendo em vista que você também utiliza Linux como sistema operacional nativo).
Uma string de 2 bytes usara para distinguir um grupo menor dentro de um grupo mestre. Perceba que se forma uma hierarquia, não tem nada de complexo no protocolo.
Uma string de 2 bytes para identificar um beacon individualmente. Obviamente não é necessário dizer, mas para efeito de registro, cada beacon deve ter um identificador único. Pense nisso como se fosse um número de casa ou a placa de um veículo.
E este é o recurso utilizado para determinar a proximidade de um beacon e é nesse ponto que acontecem as variações, por isso cada dispositivo individual precisa ser calibrado conforme as variáveis que o compõe. E é chato isso, mas não existe mágica.
Já veremos isso a partir do próximo artigo, onde configuraremos algumas belezinhas para brincar. De antemão lhe adianto que você precisará de um smartphone com bluetooth 4.0 para instalar o aplicativo radar. Do lado beacon, você poderá utilizar um módulo Bluetooth Low Energy com comunicação serial, adquirido no Mercado Livre mesmo. Ou ainda, se tiver um notebook com BLE ou um raspberry 3, também serve.
Se você pretende desenvolver para esse recurso, você pode começar a se guiar por esse link da Apple, onde você encontra também esse getting started que é uma referência espetacular, ao meu leigo ver. A implementação veremos já no próximo post, espero que eu tenha consigo despertar-lhes o interesse.
Se quiser ir dando uma olhada, nesse link você baixa um pdf grátis explicando como fazer uma prova de conceito. O projeto do google relacionado a Beacon pode ser encontrado nesse outro link. A API do google é chamada Eddystone e o código está disponível no git através deste link. Não vou me prolongar nesse post, por isso vou finalizar com mais um link - o documento COMPLETO das especificações do bluetooth, contendo absolutamente toda a informação que você precisará. Por conter "toda" a informação, suponha que o documento não é nada pequeno; digamos, um pouco mais de 2.000 páginas. Se está com preguiça ou sem tempo, não se preocupe. Vou escrever bastante coisa a respeito (mas não tudo, porque pretendo levar a vida como uma pessoa normal), é só acompanhar.
Estou em uma tremenda luta para compreender a composição das strings com hciconfig e hcitool. Estou lendo as especificações gigantescas do bluetooth, e somente a parte relacionada ao LE, mas ainda assim é de uma complexidade incrível. Só para não haver murmúrios baseando-se na informação que soltei sobre o formato da mensagem, tem uma calculadora de URL online nesse link. O resultado do que você digitar deve ser parecido com isso (adicionei apenas um "."):
sudo hcitool -i hci0 cmd 0x08 0x0008 0e 02 01 06 03 03 aa fe 06 16 aa fe 10 00 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Após cmd, os primeiros 2 campos são relacionados ao OGF e ao OCF. Tratando-se de bluetooth LE, os valores padrão assumidos serão 0x08 0x0008, daí por diante variam os dados, que são dividios em "dados significantes" e "dados não-significantes", posicionais. Dessa string, dois octetos são relacionados às mensagens, vou deixar para explicar depois, "se" eu me sentir seguro para tal.
Dominando ou não isso, ao menos a configuração de beacons estou certo de que farei essa semana, aguardem por surpresas!
Link importante sobre o Eddystone
Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.