quinta-feira, 16 de maio de 2019

U-BLOX NINA B112 e ARDUINO Sandeep Mistry

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)





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

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