domingo, 5 de maio de 2019

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!

4) Com o GIT instalado, vá no MSDOS e baixe os exemplos, o qual incluir para BLE.



5) No PLATFORMIO, abra o projeto que se encontra em 

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.


8) Faça o UPLOAD (efetuado via SEGGER JTAG)





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: 

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