sexta-feira, 25 de setembro de 2020

NINA B302 ACESSANDO LoRaWAN COM CIRCUITPYTHON

 U-BLOX NINA B302 ACESSANDO LoRaWAN COM  CIRCUITPYTHON


O objetivo deste BLOG é demonstrar como é possível utilizar e programar o módulo U-BLOX NINA B302 com a linguagem de Scripts Python. Foi utilizado o módulo NINA B302 (opencpu) para o teste e CircuitPython com programação.
Diferente do NINA B112, o B302 tem uma USB a qual permite que você possa criar um COM virtual e MSD e copiar os programas, graças ao bootloader do time da Adafruit.

Adafruit Team


ADADRUIT

A Adafruit foi fundada em 2005 pela engenheira do MIT, Limor "Ladyada" Fried. Seu objetivo era criar o melhor local on-line para o aprendizado de eletrônicos e para a fabricação dos melhores produtos projetados para fabricantes de todas as idades e níveis de habilidade.

LoRaWAN

A especificação LoRaWAN® é um protocolo de rede de baixa potência, área ampla (LPWA) projetado para conectar 'coisas' operadas por bateria sem fio à internet em redes regionais, nacionais ou globais, e tem como alvo os principais requisitos da Internet das coisas (IoT), como bi serviços de comunicação direcional, segurança ponta a ponta, mobilidade e localização.

Módulo LoRa/LoRaWAN


Descrição
Módulo Lora1278 433 mhz Lora 2.0 - IOT CHIP SX1276

Características:
Faixa De freqüência: 433 MHz
sensibilidade-139 dBm até
potência máxima de saída: 20dBm
10.3mA @ modo receptor
Consumo modo Sleep atual < 200nA
taxa de transferência de dados: @ FSK, 1.2-300 kbps
@ Lora TM, 0.018-37.5 kbps
Modulação FSK, GFSK e OOK
Lora TM
Alimentação 1.8-3.7Vdc
127 dB Dynamic Range RSSI
pacote de dados até 256 bytes com CRC
Faixa de Temperatura de operação:-40 ~ + 85 ° C
sensor de temperatura embutido e indicador de bateria fraca

1) Montagem

Um cabo USB foi soldado em D+, D-, GND e VBUS do NINA B302 (BREAKOUT)



2) Com seu gravador SEGGER J-TAG, será necessário gravar o BOOTLOADER  da Adafruit E SOFTDEVICE, ambos na pasta NINA 302







3) INSTALE OS DRIVERS


4) Conecte a USB no seu PC e os drivers serão instalados. Uma MSD vai aparecer, copie para ele o arquivo abaixo.


adafruit-circuitpython-sparkfun_nrf52840_mini-pt_BR-4.1.0.uf2

Este arquivo é o python Engine!

Últimas versões do Engine você pode obter aqui


Em 
C:\Users\USERNAME\AppData\Local\Temp\adafruit_drivers\Drivers\Adafruit_usbser

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

4) 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. 
Ou mande atualizar drivers e aponte para o caminho.



A COM é para ser o terminal de comunicação serial com o PYTHON, o MSD (CIRCUITPY) é para transferir o SCRIPT PYTHON

5) 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

Mu Python

Agora há uma ferramenta muito interessante para interagir com REPL, o Mu Python.


Automaticamente ela vai detectar o dispositivo conectado na USB para programação, mas atenção, pegue o VID/PID da serial (USB) criada e edite o arquivo arquivo de configuração do Mu.

vá para 
C:\Users\USERNAME\AppData\Local\Mu\pkgs\mu\modes and edit the adafruit.py file, add your VID,PID to the list and save -> reopen Mu



Será necessário agora baixar os módulos (libraries) para executar com programa para acesso à rede a LoRaWAN

Entre no link 


E baixe a última versão dos módulo.

Descompacte na pasta "lib" do drive CIRCUITPY os arquivos abaixo

adafruit_tinylora
adafruit_bus_device







# Author: Tony DiCola # Ported to U-BLOX NINA B302 by Miguel Wisintainer import time import busio import digitalio import microcontroller from adafruit_tinylora.adafruit_tinylora import TTN, TinyLoRa # Define radio parameters. RADIO_FREQ_MHZ = 915.0 # Frequency of the radio in Mhz. Must match your # module! Can be a value like 915.0, 433.0, etc. # .CS = IO2, P0.14 OK # .RST = IO1, P0.13 OK # .DIO0 = IO47, P0.23 OK -> irq (RFMX) # .DIO1 = I048, P0.21 OK # .DIO2 = IO5, P0.24 OK # .DIO5 = IO46,P0.12 OK # .MISO = IO8, P1.00 OK # .MOSI = IO3, P0.15 OK # .SCK = IO41,P1.14 OK cs = digitalio.DigitalInOut(microcontroller.pin.P0_14) rst = digitalio.DigitalInOut(microcontroller.pin.P0_13) irq = digitalio.DigitalInOut(microcontroller.pin.P0_23) # Define the board LED # IO33 NINA B302 led = digitalio.DigitalInOut(microcontroller.pin.P1_09) led.direction = digitalio.Direction.OUTPUT SCK = microcontroller.pin.P1_14 MOSI = microcontroller.pin.P0_15 MISO = microcontroller.pin.P1_00 # Initialize SPI bus. spi = busio.SPI(SCK, MOSI, MISO) # TTN Device Address, 4 Bytes, MSB devaddr = bytearray([0x26, 0x06, 0xXX, 0x57]) # TTN Network Key, 16 Bytes, MSB nwkey = bytearray( [ 0xEB, 0x06, 0x02, 0x7A, 0x7E, 0xD9, 0x94, 0xA7, 0xC5, 0x8E, 0xXX, 0x83, 0x1C, 0xXX, 0xF6, 0xXX ] ) # TTN Application Key, 16 Bytess, MSB app = bytearray( [ 0x79, 0xXX, 0x29, 0x4F, 0xA8, 0x7B, 0x9E, 0x75, 0x4C, 0xFF, 0x77, 0xBE, 0xFB, 0xXX, 0x7E, 0xXX ] ) ttn_config = TTN(devaddr, nwkey, app, country="AU") lora = TinyLoRa(spi, cs, irq, rst, ttn_config) # Data Packet to send to TTN data = bytearray(4) while True: temp_val = 12 humid_val = 97 print("Temperature: %0.2f C" % temp_val) print("relative humidity: %0.1f %%" % humid_val) # Encode float as int temp_val = int(temp_val * 100) humid_val = int(humid_val * 100) # Encode payload as bytes data[0] = (temp_val >> 8) & 0xFF data[1] = temp_val & 0xFF data[2] = (humid_val >> 8) & 0xFF data[3] = humid_val & 0xFF # Send data packet print("Sending packet...") lora.send_data(data, len(data), lora.frame_counter) print("Packet Sent!") led.value = True lora.frame_counter += 1 time.sleep(2) led.value = False



6) Conectando  Módulo SX1276 no NINA B302

#  .CS =   IO2, P0.14 OK
#  .RST =  IO1, P0.13 OK
#  .DIO0 = IO47, P0.23 OK -> irq (RFMX)
#  .DIO1 = I048, P0.21 OK
#  .DIO2 = IO5, P0.24 OK
#  .DIO5 = IO46,P0.12 OK
#  .SCK  = IO45,P0.07 OK
#  .MOSI = IO3, P0.15 OK
#  .MISO = IO8, P1.00 OK

IOx correspondem aos PADS do Módulo NINA B302
PX.XX correspondem aos pinos do Core NRF52840 (NINA B302)
O pinos da direita correspondem ao módulo SX1276


Datasheet


7) Registrando no TTN 

Antes que o NINA B302 possa se comunicar com a The Things Network, você precisará criar um aplicativo.


Primeiro, vamos registrar uma conta no TTN. Navegue até a página de registro da conta para configurar uma conta.


Uma vez conectado, navegue até o console do The Things Network. Esta página é onde você pode registrar aplicativos e adicionar novos dispositivos ou gateways. Clique em Aplicativos.

feather_console-application.png

Clique em Adicionar aplicativo.


Preencha um ID de aplicativo para identificar o aplicativo e uma descrição do que é o aplicativo. Definimos nosso registro de manipulador para corresponder à nossa região, us-west. Se você não estiver nos EUA, o TTN fornece várias regiões para o registro do manipulador.

feather_The_Things_Network_Console.png

Depois de criado, você será direcionado para a Visão geral do aplicativo. A partir daqui, você pode adicionar dispositivos, visualizar os dados que entram (e saem) do aplicativo, adicionar integrações para serviços externos e muito mais. 

Click Register Device

feather_The_Things_Network_Console_2.png

Na página de registro do dispositivo, o ID do dispositivo deve ser uma string exclusiva para identificar o dispositivo.

A chave do aplicativo será gerada aleatoriamente para você pelo TTN. Selecione o EUI do aplicativo (usado para identificar o aplicativo) na lista.

feather_The_Things_Network_Console_4.png

Em seguida, vamos mudar as configurações do dispositivo de Ativação Over-the-Air para Ativação por Personalização. Na Visão geral do dispositivo, clique em Configurações.

feather_The_Things_Network_Console_5.png
  • feather_The_Things_Network_Console.png
  • feather_The_Things_Network_Console.png
  • feather_The_Things_Network_Console_6.png

Na tela de configurações, altere o Método de ativação de OTAA para ABP.

 Em seguida, mude a Largura do contador de quadros de 32b para 16b e desative as verificações do contador de quadros. TTN exibirá um aviso, ignore-o e clique em Salvar.

8) Coloque os dados TTN no código CircuitPython e execute

# TTN Device Address, 4 Bytes, MSB devaddr = bytearray([0x26, 0x06, 0xXX, 0x57]) # TTN Network Key, 16 Bytes, MSB nwkey = bytearray( [ 0xEB, 0x06, 0x02, 0x7A, 0x7E, 0xD9, 0x94, 0xA7, 0xC5, 0x8E, 0xXX, 0x83, 0x1C, 0xXX, 0xF6, 0xXX ] ) # TTN Application Key, 16 Bytess, MSB app = bytearray( [ 0x79, 0xXX, 0x29, 0x4F, 0xA8, 0x7B, 0x9E, 0x75, 0x4C, 0xFF, 0x77, 0xBE, 0xFB, 0xXX, 0x7E, 0xXX ] )

Vá ao terminal e pressione CONTROL-D, o seu programa vai executar!!!! Os dados enviados são fixos!


Se você salvar com o nome code.py, toda vez que resetar o NINA B302, ele já vai executar.

9) Consultando dados no TTN 





Sempre acompanhe na Adafruit as atualizações do CircuitPython, pois o mesmo é ainda está em desenvolvimento!

CONHEÇA PYTHON

https://github.com/ehmatthes/pcc/releases/download/v1.0.0/beginners_python_cheat_sheet_pcc_all.pdf

ERRATA:
SERIGRAFIA DOS PINOS DO LADO DIREITO SUPERIOR
(NOMES DOS PINOS REPOSICIONADOS)



Questões: suporte@smartcore.com.br



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

Nenhum comentário:

Postar um comentário