terça-feira, 12 de outubro de 2021

U-blox nina B302 com Bluetooth 5 avançado e Arduino IDE - Gateway

U-blox nina B302 com Bluetooth 5 avançado e Arduino IDE - Gateway


O objetivo deste BLOG é demonstrar como é possível utilizar a IDE do Arduino para programar o módulo U-BLOX NINA B302 com Bluetooth 5.0. Foi utilizado o módulo NINA B302 para o teste com o gravador Segger. NINA B302 montado no BREAKOUT da Smartcore. 

Neste exemplo será implementado um Gateway de BLE para UART com autenticação via PIN, substituindo alguns modelos de módulos especializados no mercado pelo u-blox nina B302.

A segurança do Bluetooth é usada para proteger os serviços oferecidos pelos dispositivos e também para garantir a exclusividade, permitindo que apenas dispositivos muito específicos se conectem. 



Índice


Visão geral: Introdução ao u-blox NINA B302 usando Arduino IDE

Neste artigo, aprenderemos sobre Bluetooth Low Energy 5.0 e sua aplicação usando u-blox NINA B302 com Arduino IDE . O nRF52840 (core do u-blox NINA B302) SoC é um Bluetooth 5 flexível e eficiente projetado e desenvolvido pela Nordic Semiconductor . O nRF52840 SoC é construído em torno de um processador ARM® Cortex®-M4F de 32 bits otimizado para operação com consumo de energia ultrabaixo . Ele tem suporte de protocolo para Bluetooth 5, Bluetooth mesh, ANT e pilhas proprietárias de 2,4 GHz .

O NRF52840 BLE 5.0 tem uma ampla gama de aplicativos como Mesh Networking , por exemplo, desligar um prédio inteiro de luzes de um único smartphone. Da mesma forma, ele é usado em aplicações de saúde como BPM, SP02 , termômetro e outros. As outras áreas de aplicações incluem área de Fitness e Esportes para Atletas, Conectividade com a Internet, Sensores genéricos, conectividade HID sobre perfis GATT, Detecção de Proximidade, hardware de áudio, Sistema de Alerta, teclados sem fio, mouses e controladores de jogo.

Neste tutorial de introdução , programaremos a placa de breakout U-blox NINA B302 da Smartcore . Aprenderemos tudo sobre os pinos GPIO, arquitetura e mapeamento de pinos. Também aprenderemos sobre o aplicativo Bluefruit da Adafruit. Usando o aplicativo Bluefruit , podemos controlar vários dispositivos por meio de uma conectividade sem fio entre o aplicativo Android e a placa u-blox NINA B302, no caso utilizaremos BLE serial.

O que é Bluetooth Low Energy (BLE 5.0)?

Bluetooth 5.0 é a versão mais recente do padrão de comunicação sem fio Bluetooth . Bluetooth 5 é o avanço mais significativo no padrão Bluetooth desde a introdução do Bluetooth Low Energy no Bluetooth 4.0 . É comumente usado para fones de ouvido sem fio e outros hardwares de áudio, bem como teclados, mouses e controladores de jogos sem fio. O Bluetooth também é usado para comunicação entre vários dispositivos de casa inteligente e Internet das Coisas (IoT) .

Existem quatro novos recursos significativos do Bluetooth 5 em comparação com o BLE 4.0:
1. Uma taxa de bits mais alta de 2 Mbps.
2. Um modo de longo alcance com melhor sensibilidade em duas novas taxas de bits mais baixas de 500 kbps e 125 kbps.
3. Uma melhoria de 8 vezes na capacidade de transmissão com extensões de publicidade.
4. Um algoritmo de seleção de canal aprimorado


Termos BLE 5.0

1. Central

A Central é o computador host que geralmente é um dispositivo móvel, como um telefone ou tablet, ou talvez um desktop ou laptop.

2. Periférico

O Periférico são os dispositivos conectados, como monitor de freqüência cardíaca, smartwatch ou rastreador de fitness.

3. Publicidade

O termo Publicidade significa as informações enviadas pelo periférico durante o estabelecimento da conexão. Quando um dispositivo anuncia, ele está transmitindo o nome do dispositivo e descrevendo seus recursos. A central procura um periférico de publicidade ao qual se conectar e usa essa informação para determinar do que o periférico é capaz.

4. Serviço

É a função que o dispositivo periférico fornece. O periférico anuncia seus serviços. Um serviço realmente comum que usamos é o serviço UART, que atua como um UART de hardware e é uma forma de enviar bidirecionalmente informações de e para dispositivos.

5. Pacote

Os dados transmitidos por um dispositivo são chamados de Pacote. Dispositivos BLE e computadores host transmitem e recebem dados em pequenas rajadas chamadas de pacotes.

Nordic nRF52840 (core do u-blox NINA B302)

nRF52840 System on Chip é construído em torno de um processador ARM® Cortex®-M4F de 32 bits otimizado para operação de ultra-baixo consumo de energia, combinando Bluetooth 5, Bluetooth Mesh, Thread, IEEE 802.15.4 , ANT e proprietário de 2,4 GHz . Ele também é apresentado com NFC no chip e um controlador USB 2.0 (velocidade total) no chip O SoC é desenvolvido com 1 MB FLASH e 256 kB de RAM .

Características e especificações

1. Advanced Single-chip de 2,4 GHz multi-protocolo SoC
2. 32 bits ARM Cortex-M4F Processor
3. 1.7v para 5.5v operação
4. 1MB Flash + 256kB RAM
5.  Longo alcance e alta taxa de transferência
6. 802.15 .4 Suporte de rádio
7. NFC on-chip
8. PPI - Interconexão periférica programável
9. Sistema de gerenciamento de energia automatizado
10. Mapeamento de E / S analógico / digital configurável
11. 48 GPIO , 1 QSPI , 4 SPI , 2I2C , I²S , 2 UART , 4 PWM
12. Controlador USB 2.0
13. Interface de microfone digital (PDM)
14. Decodificador de quadratura
15. ADC de 12 bits
16. Comparador de baixa potência
17. On-air compatível com nRF52, nRF51 e nRF24 Series

Breakout para U-BLOX NINA B302


Adquirimos então os seguintes componentes



Montado ficou assim



O esquema elétrico é este



Algumas características do Kit

-Botão de RESET;
-Botão de Modo BOOTLOADER (W10X);
-Plugável no PROTOBOARD;
-Acesso às várias GPIOS.

Pequena 


Primeiros passos com u-blox NINA B302 usando Arduino IDE

Então isso é tudo sobre a parte de hardware. Agora, não vamos passar para a parte de programação e o programa u-blox NINA B302 usando o IDE do Arduino . 


Baixando Arduino Bootloader para placa u-blox NINA B302

Para fazer o download do firmware para a placa nRF52840 , você precisa ter um J-Link . 

Etapa 1: Baixe o J-Link do seguinte link: https://www.segger.com/downloads/jlink/JLink_Windows.exe

Etapa 2: Faça a seguinte conexão entre o conector J-Link e a placa u-blox NINA B302.

Ligue os pinos SWD DIO e CLK ...

...nestes pinos da placa BREAKOUT


Etapa 3: Abra o J-Flash e selecione “ Criar um novo projeto “. Em seguida, clique em “ Iniciar J-Flash “.

Na nova janela selecione “ Cortex-M0 Board “. Selecione SWD para Interface e velocidade em 4000. E clique em OK.


Etapa 4: Selecione nRF52840_xxAA


Etapa 5: Baixe o firmware nRF52840 Arduino no seguinte link: 

https://github.com/Makerfabs/NRF52840/tree/master/Arduino

Etapa 6: Ligue a placa usando a porta MicroUSB. Abra o arquivo e selecione o firmware que você acabou de baixar.

PS: 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.


Etapa 7: Agora clique no alvo. Clique em “ Conectar ”. Isso conectará a placa ao J-Link. Em seguida, selecione Programação manual. Primeiro, apague o chip clicando em “ Apagar Chip “. Assim que o Chip for apagado, agora você pode programar o dispositivo clicando na opção “ Programar e verificar ”.





Você atualizou com sucesso o Arduino Bootloader para a placa breakout u-blox NINA B302


Adicionando nRF52840 ao Board Manager do Arduino IDE (NO FINAL É APRESENTADO PARA O U-BLOX NINA B302)

Agora precisamos instalar as placas no IDE do Arduino. Portanto, siga as seguintes etapas:

Etapa 1: Abra seu IDE Arduino. Clique em Arquivo >>> Preferência


Etapa 2: Copie o seguinte URL do gerente da placa para aseção “ URLs adicionais do gerente da placa ”. E depois de adicionar clique em OK .

Etapa 3: Agora vá para Ferramentas >>>> Placas >>>> Gerenciador de placa


Etapa 4: agora pesquise NRF52840 na caixa de pesquisa.

Portanto, selecione nrf52 Adafruit Option e clique em instalar. Então, depois de um tempo, a placa será instalada com sucesso .


Conecte a USB do u-blox nina B302 no PC

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



Arduino U-BLOX NINA B302 - 1º Programa - LED piscando

Agora vamos testar a placa escrevendo um código de piscar de LED . Este código simples é como escrever o “ Olá Mundo ” no programa C . Este programa o ajudará a saber se a placa está funcionando ou não. Isso também verifica se o Bootloader foi carregado e está funcionando.

Portanto, pegue um LED de qualquer cor e conecte o pino positivo do LED ao P0.31 (IO20)  da BREAKOUT U-BLOX NINA B302. Conecte o pino negativo do LED ao GND.

Aqui está um código Arduino simples. Copie o seguinte código do Arduino e cole-o na janela do Arduino IDE.

#define LED_BUILTIN 30
 
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}
 
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}


Agora compile o código. 
Após a compilação, selecione a seguinte placa e 
porta e clique em Upload . Você pode fazer o upload do código para a placa usando a porta USB.


Assim, depois que o código for carregado com sucesso, o LED começará a piscar. Você pode alterar o intervalo de intermitência para verificar mais. Você também pode tentar o mesmo código com alguns outros pinos de entrada/saída.

Agora, vamos passar para a parte principal do u-blox NINA B302, ou seja, a parte de comunicação sem fio .

Aplicativo Adafruit Bluefruit LE Connect

Para interagir com sua placa a partir de seu telefone ou tablet, você usará o aplicativo Adafruit Bluefruit LE Connect . Baixe ou simplesmente instale o aplicativo da Apple App Store ou Google Play App Store

Este aplicativo só funciona se você tiver código em execução na breakout u-blox nina B302. O dispositivo só anunciará quando o código estiver em execução. Isso significa que o dispositivo irá transmitir / mostrar o nome do dispositivo no Android / Apple Phone se o dispositivo estiver em execução.

Portanto, agora vamos executar o código na placa e verificar o funcionamento.


Código / programa Arduino para se comunicar com o aplicativo Bluefruit LE Connect

Foi utilizado o exemplo Pairing_Pin e alterado para ser um gateway

/********************************************************************* This is an example for our nRF52 based Bluefruit LE modules Pick one up today in the adafruit shop! Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! MIT license, check LICENSE for more information All text above, and the splash screen below must be included in any redistribution *********************************************************************/ /* This sketch demonstrates Pairing process using static Passkey aka PIN. * This sketch is essentially the same as bleuart.ino except the BLE Uart * service requires Security Mode with Man-In-The-Middle protection i.e * using 6 digits PIN for pairing. */ /* Modified by Miguel Alexandre Wisintainer to make it a ble to serial gateway * On u-blox nina B302 - IO22 TXD IO23 RXD */ #include <bluefruit.h> #include <Adafruit_LittleFS.h> #include <InternalFileSystem.h> // Static PIN is 6 digits from 000000-999999 #define PAIRING_PIN "123456" // BLE Service BLEUart bleuart; // uart over ble void setup() { Serial.begin(115200); Serial1.begin(115200); //gateway //while ( !Serial ) delay(10); // for nrf52840 with native usb Serial.println("BLEUART"); Serial.println("-------\n"); // Setup the BLE LED to be enabled on CONNECT // Note: This is actually the default behavior, but provided // here in case you want to control this LED manually via PIN 19 Bluefruit.autoConnLed(true); // Config the peripheral connection with maximum bandwidth // more SRAM required by SoftDevice // Note: All config***() function must be called before begin() Bluefruit.configPrphBandwidth(BANDWIDTH_MAX); Bluefruit.begin(); Bluefruit.setTxPower(4); // Check bluefruit.h for supported values Serial.println("Setting pairing PIN to: " PAIRING_PIN); Bluefruit.Security.setPIN(PAIRING_PIN); Bluefruit.Periph.setConnectCallback(connect_callback); Bluefruit.Periph.setDisconnectCallback(disconnect_callback); // Configure and Start BLE Uart Service // Set Permission to access BLE Uart is to require man-in-the-middle protection // This will cause central to perform pairing with static PIN we set above Serial.println("Configure BLE Uart to require man-in-the-middle protection for PIN pairing"); bleuart.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); bleuart.begin(); // Set up and start advertising startAdv(); Serial.println("Please use Adafruit's Bluefruit LE app to connect in UART mode"); Serial.println("Your phone should pop-up PIN input"); Serial.println("Once connected, enter character(s) that you wish to send"); } void startAdv(void) { // Advertising packet Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); Bluefruit.Advertising.addTxPower(); // Include bleuart 128-bit uuid Bluefruit.Advertising.addService(bleuart); // Secondary Scan Response packet (optional) // Since there is no room for 'Name' in Advertising packet Bluefruit.ScanResponse.addName(); /* Start Advertising * - Enable auto advertising if disconnected * - Interval: fast mode = 20 ms, slow mode = 152.5 ms * - Timeout for fast mode is 30 seconds * - Start(timeout) with timeout = 0 will advertise forever (until connected) * * For recommended advertising interval * https://developer.apple.com/library/content/qa/qa1931/_index.html */ Bluefruit.Advertising.restartOnDisconnect(true); Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds } void loop() { // Forward data from HW Serial to BLEUART while (Serial1.available()) { // Delay to wait for enough input, since we have a limited transmission buffer delay(2); uint8_t buf[64]; int count = Serial1.readBytes(buf, sizeof(buf)); bleuart.write( buf, count ); } // Forward from BLEUART to HW Serial while ( bleuart.available() ) { uint8_t ch; ch = (uint8_t) bleuart.read(); Serial1.write(ch); } } // callback invoked when central connects void connect_callback(uint16_t conn_handle) { // Get the reference to current connection BLEConnection* connection = Bluefruit.Connection(conn_handle); char central_name[32] = { 0 }; connection->getPeerName(central_name, sizeof(central_name)); Serial.print("Connected to "); Serial.println(central_name); } /** * Callback invoked when a connection is dropped * @param conn_handle connection where this event happens * @param reason is a BLE_HCI_STATUS_CODE which can be found in ble_hci.h */ void disconnect_callback(uint16_t conn_handle, uint8_t reason) { (void) conn_handle; (void) reason; Serial.println(); Serial.print("Disconnected, reason = 0x"); Serial.println(reason, HEX); }




Agora abra o aplicativo Bluefruit LE Connect em seu dispositivo móvel. Conecte-se ao alvo apropriado ' Bluefruit52 '.


Habilite NINA B302

Copie arquivos para pasta de instalação do Arduino Adafruit

https://github.com/khoih-prog/EthernetWebServer/tree/master/Packages_Patches/adafruit/hardware/nrf52

Selecione sua placa nRF5 no menu Ferramentas -> Placa->NINA B302 u-blox



Compilando e transferindo o programa

Compile o programa e pressione o botão para gravar.



Como podem observar, o programa será transferido!

Testes

Foi realizada a conexão dos pinos IO22 e IO23 no emulador de erminal 










Pareado

Testes efetuados também com Celular antigo






Se você mantiver conectado na USB do u-blox NINA B302, poderá ver mensagens do Status da conexão do Bluetooth.


 

Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfó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