U-BLOX NINA B112 e PlatformIO - BLE ARDUINO
O objetivo deste BLOG é demonstrar como é possível utilizar o PlatformIO para programar o módulo U-BLOX NINA B112 e acencer um LED via BLE.
1) Baixe e instale o Visual Studio Code
2) Execute o Visual Studio Code
3) Na opção EXTENSIONS (canto esquerdo), procure por PlatformIO e Instale. Aguarde!
5) No PLATFORMIO, abra o projeto que se encontra em
C:\platform-nordicnrf52\examples\arduino-ble-led>
C:\platform-nordicnrf52\examples\arduino-ble-led>
Se o SDK não existir, levará um tempo para instalação do mesmo.
6) ALTERE
// LED pin
#define LED_PIN 8 //IO1 DO BREAKOUT
7) Compile (seja paciente), a primeira vez demora mais tempo.
9) Abra o BLE SCANNER em seu CELULAR
Escreva 01 e o LED vai acender! Escreve 00 que o LED vai apagar!
Se você gosta da IDE do ARDUINO, então instale os exemplos da ADAFRUIT em preferences
PS: neste caso, o HEX gerado deve ser gravado manualmente no NINA B112, por não dispor do BOOTLOADER.
PS: requer mudanças nos arquivos variant.h e variant.cpp para ser compatível com GPIO do NINA B112.
const uint32_t g_ADigitalPinMap[] = {
// D5 E D8 NC
NC, // xtal 1 //0
NC, // xtal 2 //1
NINA_B1_GPIO_24, // A0 SDA //2 **
NINA_B1_GPIO_25, // A1 SCL //3 **
NINA_B1_GPIO_27, // A2 //4 **
NINA_B1_GPIO_23, // D0 RXD //5 **
NINA_B1_GPIO_22, // D1 TXD //6 **
NINA_B1_GPIO_21, // D2 CTS //7 **
// D8 - D13
NINA_B1_GPIO_1, // D9 RED LED1 //8 **
NINA_B1_GPIO_28, // D6 NFC1 //9 **
NINA_B1_GPIO_29, // D7 NFC2 //10 **
NINA_B1_GPIO_2, // D10 CS //11 **
NINA_B1_GPIO_5, // D12 SCK //12 **
NINA_B1_GPIO_4, // D11 MOSI //13 **
NINA_B1_GPIO_3, // D13 MISO //14 **
NC, //15 **
NINA_B1_GPIO_7, // SW1 GREEN LED2 //16 **
NC, //17 **
NINA_B1_GPIO_SWO , // D4 //18 **
NC, //19 **
NC, //20 **
NINA_B1_GPIO_RESET, // Reset //21 ???
NC, //22 **
NC, //23 **
NC, //24 **
NINA_B1_GPIO_24, // SDA A0 //25 **
NINA_B1_GPIO_25, // SCL A1 //26 **
NC, //27 **
NINA_B1_GPIO_16, // A5 //28 **
NINA_B1_GPIO_17, // A4 //29 **
NINA_B1_GPIO_18, // A3 SW2 BLUE LED3 //30 **
NINA_B1_GPIO_21, // D3 RTS //31 **
};
// nRF52 pin names
#define p0 0
#define p1 1
#define p2 2
#define p3 3
#define p4 4
#define p5 5
#define p6 6
#define p7 7
#define p8 8
#define p9 9
#define p10 10
#define p11 11
#define p12 12
#define p13 13
#define p14 14
#define p15 15
#define p16 16
#define p17 17
#define p18 18
#define p19 19
#define p20 20
#define p21 21
#define p22 22
#define p23 23
#define p24 24
#define p25 25
#define p26 26
#define p27 27
#define p28 28
#define p29 29
#define p30 30
#define p31 31
#define NC (int)0xFFFFFFFF
//NINA-B1 module pin names
#define NINA_B1_GPIO_1 p8
#define NINA_B1_GPIO_2 p11
#define NINA_B1_GPIO_3 p12
#define NINA_B1_GPIO_4 p13
#define NINA_B1_GPIO_5 p14
#define NINA_B1_GPIO_7 p16
#define NINA_B1_GPIO_8 p18
#define NINA_B1_GPIO_16 p28
#define NINA_B1_GPIO_17 p29
#define NINA_B1_GPIO_18 p30
#define NINA_B1_GPIO_19 p21
#define NINA_B1_GPIO_20 p31
#define NINA_B1_GPIO_21 p7
#define NINA_B1_GPIO_22 p6
#define NINA_B1_GPIO_23 p5
#define NINA_B1_GPIO_24 p2
#define NINA_B1_GPIO_25 p3
#define NINA_B1_GPIO_27 p4
#define NINA_B1_GPIO_28 p9
#define NINA_B1_GPIO_29 p10
#define NINA_B1_GPIO_BOOT p23
#define NINA_B1_GPIO_CS1 p15
#define NINA_B1_GPIO_SWO p25
#define NINA_B1_GPIO_RESET p21
// EVK-NINA-B1 board
#define NINA_LED1 NINA_B1_GPIO_1 // Red
#define NINA_LED2 NINA_B1_GPIO_7 // Green/SW1
#define NINA_LED3 NINA_B1_GPIO_8 // Blue
#define NINA_LED4 NC
#define NINA_SW1 NINA_B1_GPIO_7
#define NINA_SW2 NINA_B1_GPIO_18
#define NINA_D0 NINA_B1_GPIO_23
#define NINA_D1 NINA_B1_GPIO_22
#define NINA_D2 NINA_B1_GPIO_21
#define NINA_D3 NINA_B1_GPIO_20
#define NINA_D4 NINA_B1_GPIO_8
#define NINA_D5 NC // SWDIO
#define NINA_D6 NINA_B1_GPIO_28
#define NINA_D7 NINA_B1_GPIO_29
#define NINA_D8 NC // SWDCLK
#define NINA_D9 NINA_B1_GPIO_1
#define NINA_D10 NINA_B1_GPIO_2
#define NINA_D11 NINA_B1_GPIO_4
#define NINA_D12 NINA_B1_GPIO_3
#define NINA_D13 NINA_B1_GPIO_5
#define NINA_D14 NINA_B1_GPIO_24
#define NINA_D15 NINA_B1_GPIO_25
#define NINA_A0 NINA_B1_GPIO_25
#define NINA_A1 NINA_B1_GPIO_24
#define NINA_A2 NINA_B1_GPIO_27
#define NINA_A3 NINA_B1_GPIO_18
#define NINA_A4 NINA_B1_GPIO_17
#define NINA_A5 NINA_B1_GPIO_16
// Nordic SDK pin names
#define NINA_RX_PIN_NUMBER NINA_B1_GPIO_23
#define NINA_TX_PIN_NUMBER NINA_B1_GPIO_22
#define NINA_CTS_PIN_NUMBER NINA_B1_GPIO_21
#define NINA_RTS_PIN_NUMBER NINA_B1_GPIO_20
//i2c
#define NINA_I2C_SDA0 NINA_B1_GPIO_24
#define NINA_I2C_SCL0 NINA_B1_GPIO_25
// LEDs
#define PIN_LED1 NINA_LED1
#define PIN_LED2 NINA_LED2
#define PIN_LED3 NINA_LED3
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2
#define LED_RED PIN_LED1
#define LED_GREEN PIN_LED2
#define LED_BLUE PIN_LED3
#define LED_STATE_ON 1 // State when LED is litted
// Buttons
// KEY
#define PIN_BUTTON1 NINA_SW1
#define PIN_BUTTON2 NINA_SW2
/*
* Analog pins
*/
#define PIN_A0 NINA_A0
#define PIN_A1 NINA_A1
#define PIN_A2 NINA_A2
#define PIN_A3 NINA_A3
#define PIN_A4 NINA_A4
#define PIN_A5 NINA_A5
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 = NINA_D0;
static const uint8_t D1 = NINA_D1;
static const uint8_t D2 = NINA_D2;
static const uint8_t D3 = NINA_D3;
static const uint8_t D4 = NINA_D4;
static const uint8_t D5 = NINA_D5;
static const uint8_t D6 = NINA_D6;
static const uint8_t D7 = NINA_D7;
static const uint8_t D8 = NINA_D8;
static const uint8_t D9 = NINA_D9;
static const uint8_t D10 = NINA_D10;
static const uint8_t D11 = NINA_D11;
static const uint8_t D12 = NINA_D12;
static const uint8_t D13 = NINA_D13;
static const uint8_t D14 = NINA_D14;
static const uint8_t D15 = NINA_D15;
static const uint8_t BOOT = NINA_B1_GPIO_BOOT; //OK
static const uint8_t CS1 = NINA_B1_GPIO_CS1; //OK
static const uint8_t SWO = NINA_B1_GPIO_SWO; //OK
// Buttons
// KEY
#define PIN_BUTTON1 NINA_SW1
#define PIN_BUTTON2 NINA_SW2
//
#define ADC_RESOLUTION 14
// Other pins
#define PIN_NFC1 NINA_B1_GPIO_28
#define PIN_NFC2 NINA_B1_GPIO_29
/*
* Serial interfaces
*/
// Serial
#define PIN_SERIAL_RX NINA_B1_GPIO_23
#define PIN_SERIAL_TX NINA_B1_GPIO_22
/*
* SPI Interfaces
*/
#define SPI_INTERFACES_COUNT 1
#define PIN_SPI_MISO NINA_B1_GPIO_3
#define PIN_SPI_MOSI NINA_B1_GPIO_4
#define PIN_SPI_SCK NINA_B1_GPIO_5
#define PIN_SPI_CS NINA_B1_GPIO_2
static const uint8_t SS = PIN_SPI_CS;
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 NINA_B1_GPIO_24
#define PIN_WIRE_SCL NINA_B1_GPIO_25
10) Questões: suporte@smartcore.com.br
FONTES:
https://github.com/platformio/platform-nordicnrf52
https://www.u-blox.com/sites/default/files/NINA-B1_DataSheet_%28UBX-15019243%29.pdf
https://learn.adafruit.com/bluefruit-nrf52-feather-learning-guide/arduino-bsp-setup
https://www.u-blox.com/sites/default/files/NINA-B1_DataSheet_%28UBX-15019243%29.pdf
https://learn.adafruit.com/bluefruit-nrf52-feather-learning-guide/arduino-bsp-setup
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