U-BLOX NINA B112 e ARDUINO Sandeep Mistry
O objetivo deste BLOG é demonstrar como é possível utilizar a IDE do Arduino para programar o módulo U-BLOX NINA B112. Foi utilizado o módulo NINA B112 para o teste com o gravador Segger.
Abaixo o roteiro para você seguir:
Baixe e instale o Arduino IDE (pelo menos v1.6.12)
Inicie o Arduino IDE, vá em Preferências e adicione
https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
como "URL adicional do gerenciador de pastas"
Abra o Boards Manager no menu Tools -> Board e instale o "Nordic Semiconductor nRF5 Boards"
Selecione sua placa nRF5 no menu Ferramentas -> Placa
OBSERVAÇÃO: Durante a instalação, o Arduino IDE leva alguns minutos para extrair as ferramentas após o download, por favor, seja paciente.
Drivers
Windows
Configuração de driver para dispositivos mbed
Faça o download do driver serial Windows mbed
Configuração do driver para o Segger J-Link
Faça o download do Zadig
Plugin Segger J-Link ou placa DK
Iniciar o Zadig
Selecione Opções -> Listar Todos os Dispositivos
Conecte e desconecte seu dispositivo para descobrir o que muda e selecione a Interface 2 no menu suspenso do dispositivo
Clique em Substituir Driver
NOTA: Para reverter para o driver original, acesse: Gerenciador de dispositivos -> clique com o botão direito no dispositivo -> caixa de seleção para "Excluir o software do driver para este dispositivo" e clique em Desinstalar
Caso você queira usar os serviços BLE
Selecionando um SoftDevice
Os SoftDevices contêm a pilha BLE e o serviço de limpeza, e devem ser baixados uma vez antes que um esboço usando o BLE possa ser carregado. O SD consome ~ 5k de RAM + algum extra baseado na configuração real do BLE.
O SoftDevice S132 v2.0.1 suporta nRF52 no papel periférico e central. Tem 112k de tamanho.
Instalando exemplos BLE
Este núcleo do Arduino não contém nenhuma API do estilo Arduino para a funcionalidade BLE. Todos os arquivos de cabeçalho do Nordic SoftDevice (S110, S130, S132) relevantes são incluídos no caminho de construção quando um SoftDevice é selecionado através do menu Ferramentas.
Bibliotecas BLE recomentadas
BLEPeriférico
v0.3.0 e superior, disponível através do gerenciador de bibliotecas do Arduino IDE.
Suporta apenas o modo periférico.
Compílando o exemplo
Abra o exemplo:
Habilite o SoftDevice S132
Selecione o programador (J-LINK) (Atenção, aplique o driver ZADIG sobre o J-LINK)
Altere arquivo variant.h para que o TXD e RXD sejam os mesmos do NINA B112
Compile e grave a aplicação
Antes, remova os comentários da loop()
Abra um terminal burro e se conecte na serial do módulo NINA B112, digite algum texto, você verá o APP Bluefruit recebendo. Faça o mesmo no Bluefruit.
Baixe e instale o Arduino IDE (pelo menos v1.6.12)
Inicie o Arduino IDE, vá em Preferências e adicione
https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
Abra o Boards Manager no menu Tools -> Board e instale o "Nordic Semiconductor nRF5 Boards"
Selecione sua placa nRF5 no menu Ferramentas -> Placa
OBSERVAÇÃO: Durante a instalação, o Arduino IDE leva alguns minutos para extrair as ferramentas após o download, por favor, seja paciente.
Drivers
Windows
Configuração de driver para dispositivos mbed
Faça o download do driver serial Windows mbed
Configuração do driver para o Segger J-Link
Faça o download do Zadig
Plugin Segger J-Link ou placa DK
Iniciar o Zadig
Selecione Opções -> Listar Todos os Dispositivos
Conecte e desconecte seu dispositivo para descobrir o que muda e selecione a Interface 2 no menu suspenso do dispositivo
Clique em Substituir Driver
NOTA: Para reverter para o driver original, acesse: Gerenciador de dispositivos -> clique com o botão direito no dispositivo -> caixa de seleção para "Excluir o software do driver para este dispositivo" e clique em Desinstalar
Caso você queira usar os serviços BLE
Selecionando um SoftDevice
Os SoftDevices contêm a pilha BLE e o serviço de limpeza, e devem ser baixados uma vez antes que um esboço usando o BLE possa ser carregado. O SD consome ~ 5k de RAM + algum extra baseado na configuração real do BLE.
O SoftDevice S132 v2.0.1 suporta nRF52 no papel periférico e central. Tem 112k de tamanho.
Instalando exemplos BLE
Este núcleo do Arduino não contém nenhuma API do estilo Arduino para a funcionalidade BLE. Todos os arquivos de cabeçalho do Nordic SoftDevice (S110, S130, S132) relevantes são incluídos no caminho de construção quando um SoftDevice é selecionado através do menu Ferramentas.
Bibliotecas BLE recomentadas
BLEPeriférico
v0.3.0 e superior, disponível através do gerenciador de bibliotecas do Arduino IDE.
Suporta apenas o modo periférico.
Compílando o exemplo
Abra o exemplo:
Selecione o programador (J-LINK) (Atenção, aplique o driver ZADIG sobre o J-LINK)
Grave o bootloader (softdevice)
Altere arquivo variant.h para que o TXD e RXD sejam os mesmos do NINA B112
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2016 Sandeep Mistry All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _VARIANT_GENERIC_
#define _VARIANT_GENERIC_
/** Master clock frequency */
#ifdef NRF52
#define VARIANT_MCK (64000000ul)
#else
#define VARIANT_MCK (16000000ul)
#endif
/*----------------------------------------------------------------------------
* Headers
*----------------------------------------------------------------------------*/
#include "WVariant.h"
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (6u)
#define NUM_ANALOG_OUTPUTS (0u)
// LEDs
#define PIN_LED (14) // P0.14 D13
#define LED_BUILTIN PIN_LED
//LEDs onboard
#define LED1 (8) // Red
#define LED2 (16) // Green/SW1
#define LED3 (18) // Blue
//Switch
#define SW1 (16)
#define SW2 (30)
// NFC
#define PIN_NFC_1 (9) // P0.9
#define PIN_NFC_2 (10) // P0.10
/*
* Analog pins
*/
#define PIN_A0 (3) // P0.03
#define PIN_A1 (2) // P0.02
#define PIN_A2 (4) // P0.04
#define PIN_A3 (30) // P0.30
#define PIN_A4 (29) // P0.29
#define PIN_A5 (28) // P0.28
/*
* Digital Pins
*/
#define PIN_D0 (5) // P0.05
#define PIN_D1 (6) // P0.06
#define PIN_D2 (7) // P0.07
#define PIN_D3 (31) // P0.31
#define PIN_D4 (18) // P0.18
#define PIN_D6 (9) // P0.09
#define PIN_D7 (10) // P0.10
#define PIN_D9 (8) // P0.8
#define PIN_D10 (11) // P0.11
#define PIN_D11 (13) // P0.13
#define PIN_D12 (12) // P0.12
#define PIN_D13 (14) // P0.14
#define PIN_D14 (2) // P0.02
#define PIN_D15 (3) // P0.03
static const uint8_t A0 = PIN_A0 ;
static const uint8_t A1 = PIN_A1 ;
static const uint8_t A2 = PIN_A2 ;
static const uint8_t A3 = PIN_A3 ;
static const uint8_t A4 = PIN_A4 ;
static const uint8_t A5 = PIN_A5 ;
static const uint8_t D0 = PIN_D0 ;
static const uint8_t D1 = PIN_D1 ;
static const uint8_t D2 = PIN_D2 ;
static const uint8_t D3 = PIN_D3 ;
static const uint8_t D4 = PIN_D4 ;
static const uint8_t D6 = PIN_D6 ;
static const uint8_t D7 = PIN_D7 ;
static const uint8_t D9 = PIN_D9 ;
static const uint8_t D10 = PIN_D10 ;
static const uint8_t D11 = PIN_D11 ;
static const uint8_t D12 = PIN_D12 ;
static const uint8_t D13 = PIN_D13 ;
static const uint8_t D14 = PIN_D14 ;
static const uint8_t D15 = PIN_D15 ;
#ifdef NRF52
#define ADC_RESOLUTION 14
#else
#define ADC_RESOLUTION 10
#endif
/*
* Serial interfaces
*/
// Serial
#define PIN_SERIAL_RX (5) // P0.05
#define PIN_SERIAL_TX (6) // P0.06
#define PIN_SERIAL_CTS (7) // P0.07
#define PIN_SERIAL_RTS (31) // P0.31
#define PIN_SERIAL_DTR (28) // P0.28
#define PIN_SERIAL_DSR (29) // P0.29
/*
* SPI Interfaces
*/
#define SPI_INTERFACES_COUNT 1
#define PIN_SPI_MISO (12) // P0.12
#define PIN_SPI_MOSI (13) // P0.13
#define PIN_SPI_SCK (14) // P0.14
static const uint8_t SS = 11 ; // P0.11
static const uint8_t MOSI = PIN_SPI_MOSI ;
static const uint8_t MISO = PIN_SPI_MISO ;
static const uint8_t SCK = PIN_SPI_SCK ;
/*
* Wire Interfaces
*/
#define WIRE_INTERFACES_COUNT 1
#define PIN_WIRE_SDA (2) // P0.02
#define PIN_WIRE_SCL (3) // P0.03
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
#ifdef __cplusplus
}
#endif
#endif
Compile e grave a aplicação
Antes, remova os comentários da loop()
void loop() {
BLESerial.poll();
forward();
loopback();
spam();
}
Execute o APP Bluefruit do celular e selecione ESP32 e então escolha o serviço UART.
Abra um terminal burro e se conecte na serial do módulo NINA B112, digite algum texto, você verá o APP Bluefruit recebendo. Faça o mesmo no Bluefruit.
Dúvidas:
suporte@smartcore.com.br
Referências:
https://github.com/sandeepmistry/arduino-nRF5
https://www.arduinolibraries.info/libraries/ble-peripheral
https://github.com/sandeepmistry/arduino-nRF5/issues/102
https://www.u-blox.com/sites/default/files/NINA-B1_SIM_%28UBX-15026175%29.pdf
Sobre a SMARTCORE
suporte@smartcore.com.br
Referências:
https://github.com/sandeepmistry/arduino-nRF5
https://www.arduinolibraries.info/libraries/ble-peripheral
https://github.com/sandeepmistry/arduino-nRF5/issues/102
https://www.u-blox.com/sites/default/files/NINA-B1_SIM_%28UBX-15026175%29.pdf
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