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
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
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.
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 ...
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";
ERRATA:
SERIGRAFIA DOS PINOS DO LADO DIREITO SUPERIOR
(NOMES DOS PINOS REPOSICIONADOS)
Questões: suporte@smartcore.com.br
FONTES:
https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_%28UBX-17052099%29.pdf
https://forums.adafruit.com/viewtopic.php?f=60&t=148531&start=30
https://lora-alliance.org/about-lorawan
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