sexta-feira, 25 de setembro de 2020

NINA B302 ACESSANDO LoRaWAN COM ARDUINO ADAFRUIT

 U-BLOX NINA B302 ACESSANDO LoRaWAN COM  ARDUINO ADAFRUIT


O objetivo deste BLOG é demonstrar como é possível utilizar e programar o módulo U-BLOX NINA B302 com a linguagem Arduino Adafruit. Foi utilizado o módulo NINA B302 (opencpu) para o teste.

LIB
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. 

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

5) Instalando Arduino Adafruit no NINA B302


Abaixo o roteiro para você seguir:

Baixe e instale o Arduino IDE 
Inicie o Arduino IDE, vá em Preferências e adicione 

https://www.adafruit.com/package_adafruit_index.json




como "URL adicional do gerenciador de pastas"

Abra o Boards Manager no menu Tools -> Board e instale o "Adafruit nRF52 by Adafruit"

Selecione sua placa nRF5 no menu Ferramentas -> Placa

Adafruit Bluefruit nRF52 Feather





OBSERVAÇÃO: Durante a instalação, o Arduino IDE leva alguns minutos para extrair as ferramentas após o download, por favor, seja paciente.

Gravando bootloader da Adafruit


Use o gravador SEGGER JLINK para gravar o BREAKOUT com módulo NINA B302, conecte nos pinos do SWCLK (pino 7) e SWDIO (pino 9) do SEGGER JLINK nos pinos  SWDCLK e SWDIO do BREAKOUT (pinos nas laterais, próximo à antena). Não esquecer de ligar os GND do BREAKOUT no GND do SEGGER JTAG, bem como alimentar o BREAKOUT com 3.3V.





Ligue os pinos SWD DIO e CLK ...



...nestes pinos da placa BREAKOUT


Você pode também usar o ST-LINK V2



Abra J-FLASH lite e grave o bootloader da Adafruit


Mudar NRF52840
 
O mesmo se encontra em 

....\packages\adafruit\hardware\nrf52\0.19.0\bootloader\feather_nrf52840_express

Compile depois para o NINA B302
https://github.com/adafruit/Adafruit_nRF52_Bootloader

Com ele, você poderá transferir programas via DFU USB. Maiores detalhes sobre este bootloader

https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/update-bootloader

Segundo a documentação, se você pressionar o reset, o módulo aguardará por um certo tempo se há algo sendo enviado pelo Arduino, ou seja, o programa a ser gravado via DFU.

ATENÇÃO, o bootloader usa USB para gravação do NINA 302, OU SEJA, CRIA UMA COMM VIRTUAL, TAMBÉM PARA SER A SERIAL PADRÃO DO ARDUINO

INSTALE OS DRIVERS
https://github.com/adafruit/Adafruit_Windows_Drivers

Conecte na USB + e USB - um cabo USB, AGUARDE INSTALAR OS DRIVERS


Futuramente altere arquivo variant.cpp para que as GPIOS sejam os mesmos do NINA B302, atualmente estão para o ADAFRUIT FEATHER EXPRESS.





ÓTIMA REFERENCIA PARA PINOS DO ARDUINO E PINOS (GPIOS) DO NINA B302


Consulte

6) Copie o Código Abaixo

Copie o código Abaixo
/** * Example of OTAA device * Authors: * Ivan Moreno * Eduardo Contreras * June 2019 * * This code is beerware; if you see me (or any other collaborator * member) at the local, and you've found our code helpful, * please buy us a round! * Distributed as-is; no warranty is given. */ #include <lorawan.h> // OTAA credentials const char *devEui = "xxxxxxxxxxxxxxxx"; const char *appEui = "xxxxxxxxxxxxxxxx"; const char *appKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const unsigned long interval = 10000; // 10 s interval to send message unsigned long previousMillis = 0; // will store last time message sent unsigned int counter = 0; // message counter char myStr[50]; char outStr[255]; byte recvStatus = 0; const sRFM_pins RFM_pins = { .CS = SS, .RST = 4, .DIO0 = 32, .DIO1 = 30, .DIO2 = 23, .DIO5 = 9, }; /* const sRFM_pins RFM_pins = { .CS = IO2, P0.14 OK .RST = IO1, P0.13 OK .DIO0 = IO47, P0.23 OK .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 = IO45,P0.07 OK }; */ void setup() { Serial.begin(115200); while (!Serial); delay(1000); if(!lora.init()){ Serial.println("RFM95 not detected"); delay(5000); return; } Serial.println("RFM95 Detected!"); // Set LoRaWAN Class change CLASS_A or CLASS_C lora.setDeviceClass(CLASS_A); // Set Data Rate lora.setDataRate(SF9BW125); // set channel to random lora.setChannel(MULTI); // Put OTAA Key and DevAddress here lora.setDevEUI(devEui); lora.setAppEUI(appEui); lora.setAppKey(appKey); // Join procedure bool isJoined; do { Serial.println("Joining..."); isJoined = lora.join(); //wait for 10s to try again delay(10000); }while(!isJoined); Serial.println("Joined to network"); } void loop() { // Check interval overflow if(millis() - previousMillis > interval) { previousMillis = millis(); sprintf(myStr, "Counter-%d", counter); Serial.print("Sending: "); Serial.println(myStr); lora.sendUplink(myStr, strlen(myStr), 0, 1); counter++; } recvStatus = lora.readData(outStr); if(recvStatus) { Serial.println(outStr); } // Check Lora RX lora.update(); }

7) 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
#  .MISO = IO8, P1.00 OK
#  .MOSI = IO3, P0.15 OK
#  .SCK  = IO45,P0.07 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


8) Entre na EveryNet ou TTN e pegue as credenciais


9) Coloque os dados EveryNet no código Arduino e compile

// OTAA credentials const char *devEui = "xxxxxxxxxxxxxxxx"; const char *appEui = "xxxxxxxxxxxxxxxx"; const char *appKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";


10) Transfira e execute o programa



11) Consultando dados no TTN 



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