NINA B302 EDDYSTONE CIRCUITPYTHON
Um mergulho profundo nos Beacons de Eddystone
(caso de uso do NINA B302 + CircuitPython)
O
objetivo deste BLOG é demonstrar como é possível utilizar o
NINA B302 como ADVERSTISING de uma URL. Foi utilizado CircuitPython para programar o módulo U-BLOX NINA B302 soldado no BREAKOUT. É uma maneira interessante de fazer propaganda de um produto em uma loja.
Com o Eddystone, você ainda pode criar funcionalidades semelhantes para incluir dois níveis de hierarquia. Isso inclui um Beacon ID de 16 bytes, composto por um namespace de 10 bytes e uma instância de 6 bytes.
O Eddystone fornece quatro tipos de quadros:
- Eddystone-UID : esse tipo é semelhante à configuração de UUID + Maior + Menor do iBeacon. Ele define um Beacon ID de 16 bytes composto por um namespace de 10 bytes e uma instância de 6 bytes. Por exemplo, o espaço para nome poderia definir o ID de um varejista nacional para suas lojas e a instância se referiria a cada loja exclusivamente.
- Eddystone-URL : esse tipo fornece uma maneira de transmitir um URL a ser descoberto por um dispositivo de scanner BLE, que por sua vez pode navegar até o URL e apresentar a página da Web ao usuário.
- Eddystone-TLM : esse tipo fornece informações de telemetria sobre o dispositivo, como nível da bateria, temperatura e um contador de pacotes anunciados.
- Eddystone-EID : esse tipo fornece uma estrutura para atingir um certo nível de segurança e privacidade de um dispositivo. EID significa ID Efêmero, que é um identificador que muda periodicamente a uma taxa determinada durante a fase de implantação, registrando-a em um serviço da web confiável.
NOTA: Embora
o Google tenha praticamente abandonado o padrão Eddystone em
smartphones (especificamente Android e Chrome), ele ainda pode servir
como um bom formato para aplicativos em que você controla os dois lados
(dispositivos de radiodifusão + dispositivos de scanner) e que não
dependem do smartphone aplicativos. Também
serve como um ótimo exercício para aprender mais sobre como os anúncios
Bluetooth funcionam e como utilizá-los para seu próprio aplicativo.
Neste tutorial, focaremos nos tipos de quadro Eddystone-UID e Eddystone-URL .
Aqui está o que abordaremos hoje:
Dados de serviço
Eddystone-UID
Eddystone-URL
Eddystone-TLM e Eddystone-EID
Implementando Eddystone no NINA B302 utilizando CircuitPython
Exemplo de Eddystone-UID
Formato Eddystone
Para
entender melhor como os dispositivos de transmissão Eddystone
funcionam, precisamos examinar os detalhes dos pacotes de publicidade
envolvidos. Veja como é o formato de um pacote de anúncios Eddystone:
A parte mostrada na figura acima é constante para todos os pacotes de anúncios do Eddystone, exceto para a parte de Dados do Serviço .
Os dados do anúncio seguem o formato Comprimento-Tipo-Valor (semelhante ao formato TLV popular ). O valor Comprimento indica o comprimento dos dados que incluem o Tipo e a Carga útil .
O
padrão Eddystone utiliza o tipo de dados Anúncio de Dados de Serviço
para enviar os dados para os dispositivos de scanner BLE. O iBeacon, por outro lado, utiliza o tipo de dados Anúncio de Dados do Fabricante.
Agora,
vejamos a parte de dados de serviço, que inclui as informações que
estamos interessados em analisar no final do receptor.
Dados de serviço
O
formato da porção de dados de serviço depende do tipo de quadro usado
(Eddystone-UID, Eddystone-URL, Eddystone-TLM ou Eddystone-EID).
Eddystone-UID
Como mencionamos anteriormente, esse tipo de quadro é usado de maneira semelhante ao iBeacon da Apple. Inclui o seguinte:
Ao
usar esse tipo de quadro, podemos utilizar o namespace de 10 bytes para
um ID exclusivo de nossa escolha (por exemplo, para indicar um
identificador de loja específico) e, em seguida, usar o 6 bytes como uma
identificação de um subconjunto do namespace (por exemplo, para
identificar um corredor dentro da loja).
Notas:
- Esse tipo de quadro utiliza no máximo 31 bytes de dados de anúncio disponíveis em um pacote de anúncio BLE (primário).
- O campo Ranging Data é a potência Tx medida em 0 metros do transmissor (-100 dBm a +20 dBm).De acordo com a especificação Eddystone, a melhor maneira de determinar o valor a ser incluído nesse campo é medir o RSSI real em 1 metro e adicionar 41 dBm ao valor (com base na suposição de que 41 dBm é a perda de sinal que ocorre acima de 1 metro).
- Para obter mais informações e recomendações sobre a geração do ID do espaço para nome e da instância, consulte a especificação Eddystone aqui .
Nota importante : O valor da potência Tx usa um formato de complemento de dois para representar valores assinados. Para obter mais informações sobre esse cálculo, consulte a seção do artigo da Wikipedia sobre o complemento de dois: https://en.wikipedia.org/wiki/Two%27s_complement#Converting_to_two's_complement_representation
Eddystone-URL
O tipo de quadro Eddystone-URL é único e diferente do uso do Eddystone-UID ou do formato iBeacon da Apple. É usado para anunciar um URL para o scanner descobrir e analisar e, potencialmente, apontar para um navegador da Web.
Esse tipo de quadro é usado principalmente em aplicativos e implementações da " Physical Web ".
Como
o comprimento máximo dos dados do anúncio BLE é de 31 bytes, isso
limita os URLs que podem ser transmitidos usando esse tipo de quadro. No
entanto, o formato fornece algum nível de codificação compactada para
aproveitar ao máximo o espaço limitado disponível para os dados do
anúncio.
Aqui está o formato usado para esse tipo de quadro:
O valor da potência Tx é representado da mesma maneira que descrevemos na seção Eddystone-UID acima.
O esquema de URL é definido da seguinte maneira:
- Diferentes prefixos para URLs são representados da seguinte maneira
- A parte principal do URL é incluída como uma sequência de caracteres. Por
exemplo, "google" seria representado como uma sequência de 'g' 'o' 'o'
'g' 'l' 'e', que seria convertida em seus valores ASCII.
- Finalmente, a expansão do URL (por exemplo, .com / ou .com ) é representada da seguinte maneira:
Por
exemplo, se quiséssemos representar "https://www.google.com/" com uma
potência Tx de 0 dBm, a matriz de dados de serviço ficaria assim:
Tipo de quadro (URL) | Potência Tx | https: // www. | g | o | o | g | eu | e | .com / |
0x10 | 0x00 | 0x01 | 0x67 | 0x6f | 0x6f | 0x67 | 0x6c | 0x65 | 0x00 |
Eddystone-TLM e Eddystone-EID
Os quadros Eddystone-TLM são usados para transmitir dados de telemetria úteis para monitorar a saúde dos beacons em campo. Esse
quadro não contém nenhum identificador, portanto é emparelhado com os
quadros Eddystone-URL, Eddystone-UID ou Eddystone-EID.
Quando emparelhado com quadros EID, o pacote Eddystone-TLM é criptografado. Quando emparelhados com quadros de URL ou UID, no entanto, os pacotes TLM não são criptografados.
Para saber mais sobre esses tipos, consulte os seguintes links:
- Eddystone-EID specification
- Eddystone-TLM specification
- Unencrypted TLM specification
- Encrypted TLM specification
PREPARANDO ADAFRUIT CIRCUITPYTHON PARA U-BLOX NINA B302
Com seu gravador SEGGER J-TAG, será necessário gravar o BOOTLOADER da Adafruit
Instale os drivers da Adafruit
Conecte a USB no seu PC e os drivers serão instalados. Uma MSD vai aparecer, copie para ele o arquivo abaixo.
Este arquivo é o circuitpython Engine!
Instale
adafruit_drivers_2.3.4.0.exe
Altere em Adafruity_usbser.inf, caso contrário, o Windows não vai detectar o CDC (Serial)
USB\VID_1B4F&PID_5289&REV_0100&MI_00
Desconecte
e conecte a USB no seu PC e os novos drivers serão instalados. Uma COM
virtual aparecerá, na figura abaixo, apareceu COM55 e um MSD
A COM é para ser o terminal de comunicação serial com o PYTHON, o MSD (CIRCUITPY) é para transferir o SCRIPT PYTHON
Executando um script python
Execute o emulador de terminal Teraterm, abra a COM e tecle CONTROL-D, você verá as boas vindas do Python.
ou utilizares
Mu
Será necessário agora baixar os módulos (libraries) compilados para executar com programa para acesso ao AWS IoT Core.
Entre no link
E baixe a última versão dos módulo.
Descompacte na pasta "lib" do drive CIRCUITPY os arquivos abaixo (compilados) (mpy)
ÓTIMA REFERÊNCIA PARA OS PINOS DO U-BLOX NINA B302
Consulte
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
EXECUTANDO PROGRAMA
Para
edição do programa foi utilizado o MU, um editor Python simples para
programadores iniciantes. Abra a COM onde está o U-BLOX NINA B302.
Control-C para a execução e Control-D inicia. Quando você salva a aplicação, a execução reinicia.
"""This example broadcasts our Mac Address as our Eddystone ID and a link to the Adafruit Discord
server."""
import time
import adafruit_ble
from adafruit_ble_eddystone import uid, url
radio = adafruit_ble.BLERadio()
# Reuse the BLE address as our Eddystone instance id.
eddystone_uid = uid.EddystoneUID(radio.address_bytes)
eddystone_url = url.EddystoneURL("https://www.smartcore.com.br")
while True:
# Alternate between advertising our ID and our URL.
radio.start_advertising(eddystone_uid)
time.sleep(0.5)
radio.stop_advertising()
radio.start_advertising(eddystone_url)
time.sleep(0.5)
radio.stop_advertising()
time.sleep(4)
Mande executar (Control-D)
Se você salvar com nome code.py, toda vez que resetar U-BLOX NINA B302, ele já vai executá-lo.
Dúvidas:
suporte@smartcore.com.br
Referências:
https://www.novelbits.io/eddystone-beacons-zephyr-nrf52/?utm_source=drip&utm_medium=email&utm_campaign=Developing+Eddystone+Beacons+%28nRF52+%2B+Zephyr%29&utm_content=Developing+Eddystone+Beacons+%28nRF52+%2B+Zephyr%29
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
Sobre a SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui
modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS /
GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de
impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e
sensores.
Mais detalhes em www.smartcore.com.br
Comentários
Postar um comentário