NINA B302 EDDYSTONE CIRCUITPYTHON

 

Um mergulho profundo nos Beacons de Eddystone 
(caso de uso do NINA B302 + CircuitPython)



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:

Formato Eddystone
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 ). 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).
O primeiro byte do campo Dados do Serviço sempre inclui o tipo de quadro, definido da seguinte forma:


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).
  • 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 Txhttps: // www.googeue
.com /
0x100x000x010x670x6f0x6f0x670x6c0x650x00
Exemplo de valor do campo Dados do serviço Eddystone-URL

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:

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

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.
 
 
Agora podemos executar o nRF Scanner (iOS, Android ou Desktop) para confirmar as alterações:


Dúvidas:

suporte@smartcore.com.br

Referências:

 
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

Postagens mais visitadas deste blog

NINA B302 EDDYSTONE ARDUINO