Como fazer um Beacon com Arduino

Beacon com Arduino

Beacon com Arduino
Beacon com Arduino

Esse é o primeiro artigo sobre Beacon com Arduino que escrevo e começo de cara falando que o Arduino é dispensável para a finalidade de beacon, porém se você não tem um adaptador FTDI, utilizar o Arduino é uma das alternativas. Já escrevi um artigo explicando como configurar um Raspberry Pi 3 para transformá-lo em um Beacon nesse tutorial (e nesse caso sim, fundamental pois o BLE é onboard). Também discorri a respeito de Beacons nesse outro post. Recomendo a leitura de ambos porque são ricos em detalhes.

Apenas para introduzir o assunto, Beacons são pontos de referência, como faróis de navegação em ilhas ou costas marítimas. Um Beacon é utilizado para atingir uma localização, ou guiar-se por ela. No caso de um Beacon digital, utiliza-se para telemetria, pois sua precisão chega a 1 ou 2 centímetros de distância.

Originalmente o protocolo foi desenvolvido pela Apple e criou-se então o iBeacon, que se trata de um recurso oferecido a partir da versão 4.0 do Bluetooth, o chamado BLE (Bluetooth Low Energy). No primeiro post citado (no primeiro parágrafo) explico minuciosamente o formato da mensagem composta como parâmetro para o comando HCI do Linux e é no mínimo útil você saber o que está fazendo, portanto, recomendo que leia para entender bem o conceito, se porventura não teve um contato prévio com Beacons.

Dispositivo BLE

O HM-10 (esse dispositivo BLE que comprei) é um módulo de comunicação serial que aceita comandos AT quando desconectado. Quando conectado, não é possível enviar comandos AT pela serial, mas ainda é possível fazê-lo pela conexão wireless (‘wireless’ como ‘sem fio’, não confunda com WiFi). As informações pertinentes a esse dispositivo podem ser encontradas (obviamente) em seu datasheet. Não é necessário mais do que isso para fazer o Beacon, o mais importante é saber que (conforme informação do vendedor) esse dispositivo trabalha tanto à 3.3V, portanto a interconexão deve ser ter um divisor de tensão em seu RX, caso venha a fazer interface com um Arduino à 5V. Ainda, sua alimentação deve vir diretamente de uma fonte 3.3V e apesar do baixo consumo, não estou certo quanto à estabilidade desse dispositivo operando com a referência de 3.3V advinda do Arduino, portanto se possível, use uma alimentação dedicada ou uma alimentação compartilhada com o respectivo Arduino.

Caraterísticas técnicas

As especificações desse dispositivo são surpreendentes, considero um dos melhores dispositivos BLE serial da atualidade. Confira:

Bluetooth LE 4.0.
Sem limitações de bytes in/out.
Frequência de operação à 2.4GHz banda ISM.
Método de modulação: GFSK(Gaussian Frequency Shift Keying).
Range da frequência RF: -23dbm, -6dbm, 0dbm, 6dbm, modificáveis por comandos AT.
Comando AT+POWE. Explico mais adiante, mas é relacionado ao dBm.
Velocidade assíncrona/assíncrona: 6KB
Conta com autenticação e criptografia
Serviço central e periférico UUID FFE0,FFE1
Consumo: +3.3V@50mA
Distância comprovada: 100 metros em espaço aberto com iphone4s !
Consumo em sleep de 400uA~1.5mA e 8.5mA quando ativo.
Trabalha à temperaturas de –5 ~ +65 graus celsius
Dimensões: 26.9mm x 13mm x 2.2 mm

Wiring

Não há segredos, mas como no exemplo estou utilizando o Arduino Leonardo, obrigatoriamente deve-se colocar um divisor de tensão entre o RX do BLE e o TX do Arduino. As conexões são basicamente TX,RX, VCC e GND. Estou utilizando o Arduino Leonardo por dispor de duas interfaces seriais nativas, mas nada o impede de fazer o beacon com Arduino UNO utilizando softserial. O wiring ficou desse modo:

hm-10 wiring
hm-10 wiring



Para fazer o beacon com Arduino Pro Mini 3.3V@8MHz as coisas ficam muito mais simplificadas, porém deve-se ter muita atenção na alimentação. O VCC é para tensão regulada, já chegando limpo 3.3V, portanto seria até recomendável um capacitor para dar uma filtrada antes de entrar na board. Já se a alimentação for de origem diferente do HM-10, você poderá alimentar entre 3.5V até 12V na entrada RAW, pois a board possui um regulador de tensão conectado a esse pino. Não se incomode com a interconexão de TX e RX pois o nível lógico continuará sendo 3.3V. Se você quiser fazer uma interface com o computador e a outra com o Arduino Pro Mini, use o FTDI no header de 6 pinos e use software serial em quaisquer 2 pinos digital selecionados por você. Talvez (e somente “talvez”) eu mostre no video um exemplo de beacon com Arduino Pro Mini (mas para isso, você precisará inscrever-se no nosso canal do YouTube).

HM-10 e Arduino Pro Mini 3.3V
HM-10 e Arduino Pro Mini 3.3V

De forma alguma detenha algum tipo de dúvida. Se ainda não ficou claro a questão de pinout e alimentação, refira-se à seguinte descrição antes de tentar fazer seu beacon com Arduino Pro Mini:

Arduino Pro Mini Wiring
Arduino Pro Mini Wiring

Antes que eu decida fazer o wiring com ESP8266 nesse mesmo post, deixe-me passar adiante (é tentador enquanto escrevo).

Conectei o HM-10 primeiramente ao notebook através do meu FTDI (jumpeado para 3.3V), conectando apenas TX, RX, VCC e GND. Tem uma coisa que as pessoas se equivocam, então acho válido entrar nesse detalhe.

Todas as conexões são TX->RX e RX->TX





Não importa o protocolo, sempre que tiver RX e TX, a conexão entre os dispositivos é sempre ‘cruzada’. Isso porque TX é “Transmission” e RX é “Receiver”; logo, um transmite, o outro recebe e vice-versa. Enfatizando, não ligue TX para TX e RX para RX que não vai funcionar.

Usei diversos comandos AT para experimentar, porque não achei nada relacionado ao HM-10 que fosse realmente suscinto. Meu  módulo passou a ser enxergado após um último comando, mas até então eu fiz as seguintes execuções, que você pode fazer também conforme desejar. Consultas são feitas com interrogação e modificações com o parâmetro colado ao comando, em substituição à interrogação.

AT+ADTY? Consulta os modos.

0 = responde a scan e é conectavel
1 = só o ultimo dispositivo conectado em 1.28 segundos
2 = somente anuncio e resposta a scan
3 = somente anuncio

0 é o default e deve ser mantido para o pretendido.

AT+BATT? Consulta bateria. Não entendi bem, o resultado dá uma

variação na casa dos 70%, mas estou conectado ao FTDI,

na USB com 500mA.

AT+BAUD?  Consulta baud rate. A resposta é 1 byte, sendo:

0———9600
1———19200
2———38400
3———57600
4———115200
5———4800
6———2400
7———1200
8———230400
Default: 0(9600), tratando-se da conexão serial.

AT+START Inicialização imediata do dispositivo
AT+IBE0? Consulta da primeira parte do UUID. A modificação consiste

de 8 bytes. Ex.:

AT+IBE012345678

AT+IBE1? Modificação da segunda e terceira parte do UUID
AT+IBE3? Modificação do final da UUID
AT+MARJ? Mudar o Major. Ex.: AT+MARJ0x0102
AT+MINO? Mudar o Minor
AT+NAME? Modifica o nome do dispositivo. Ex.:
AT+NAMEDobitAoByte
AT+PCTL? Configura força do sinal, sendo:
0 = normal1 = máximoMáximo é o padrão.
AT+PIO1? Configura o modo de sinalização do LED.

0 = 500ms blink
1 = off desconectado, high conectado

AT+PASS? PIN de 6 bytes. Default é 000000
AT+POWE? Consulta dBm, sendo:

0 = -23dbm
1 = -6dbm
2 = dbm
3 = 6dbm

AT+RENEW Factory setup
AT+RESET Reset
AT+SHOW? permite descoberta, sendo 1 para habilitar e 0 para desabilitar.

O padrão é 0.

O UUID default é 74278BDA-B644-4520-8F0C-720EAF059935. Basicamente, mudei a primeira parte conforme exemplificado na tabela acima. Mudei o nome e executei uma pequena sequência de comandos AT:

AT+IBEA1

AT+START
AT+SHOW1
AT+FILT0
AT+DELO1 (ou AT+DELO2 para só broadcast)




Perceba que eu não configurei praticamente “nada”, a tabela acima foi mais focada no tópico “beacon com Arduino”, mas tem muitos outros parâmetros importantes que são utilizados para a conexão, propriamente dita. A melhor opção é configurar o dispositivo por FTDI, mas vou demonstrar a interação com o Arduino Leonardo para o caso de você não ter um FTDI. De qualquer modo, perceba que o dispositivo tem total independência de uma MCU/CPU e pode ser facilmente utilizado como um beacon conectado a uma bateria. Ideal para um dos projetos citado no primeiro artigo sobre beacon.

Tratando-se de comunicação AT, é bastante simples interagir com o módulo BLE e para tal esse simples sketch que segue é tudo o que você precisará para a prova de conceito, caso não tenha um FTDI.

Mais uma vez, os ajustes finos podem ser feitos guiando-se pelo tutorial de beacon onde explico como compor a string utilizando hci no Raspbian.

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.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

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