An arduino core for ARM based BLE devices supported by the NimBLE stack.
LGPL-2.1 License
An Arduino Core for ARM based BLE boards supported by the NimBLE stack.
If you are interested in assisting the development of this project please submit issues and PR's. Or become a collaborator!
printf
and Serial.printf
delay
is called.build_opt.h
file in your sketch.I wanted to have a consistent BLE API on all of the devices I work with. NimBLE is the best choice for this as it is the most feature complete and fully open source library available for Arduino.
This Arduino Core does not contain any BLE functionality. It has been designed to support using the NimBLE-Arduino library for BLE operation. Note: Only the release version 1.4.0 and above of NimBLE-Arduino supports Arm devices.
[env]
platform = https://github.com/h2zero/platform-n-able.git@^1.0.0
framework = arduino
lib_deps = h2zero/NimBLE-Arduino@^1.4.0
board = ...
...
https://h2zero.github.io/n-able-Arduino/package_n-able_boards_index.json
as an "Additional Board Manager URL"cd <SKETCHBOOK>
, where <SKETCHBOOK>
is your Arduino Sketch folder:~/Documents/Arduino
~/Arduino
~/Documents/Arduino
hardware
, if it does not exist, and change directories to itgit clone https://github.com/h2zero/n-able-Arduino.git
sketch
-> Include Library
-> Manage Libraries
, search for NimBLE and install version 1.4.0 or greater.#include "NimBLEDevice.h"
at the beginning of your sketch.pip install adafruit-nrfutil
pip install nrfutil
You can change the configuration for many settings by creating a build_opt.h
file in your sketch folder.
In here you can set compile time definitions for settings that will be included directly on the command line.
For example: '-DCONFIG_MAIN_TASK_STACK_SIZE=512'
This will set the main task stack size to 512 words (2048 bytes).
CONFIG_MAIN_TASK_STACK_SIZE
- sets the size in 32bit words of the main loop task.CONFIG_RTOS_TICK_RATE_HZ
- set the tick rate for FreeRTOS (default 1024).CONFIG_RTOS_MAX_PRIORITIES
- set the maximum priority level for FreeRTOS tasks.CONFIG_RTOS_MIN_TASK_STACK_SIZE
- set the minimum task stack size.CONFIG_RTOS_TIMER_QUEUE_LENGTH
- set the queue size for the FreeRTOS timers.CONFIG_RTOS_TIMER_STACK_DEPTH
- set the timer task stack size in 32bit words.CONFIG_WDT_TIMEOUT_SECONDS
- set the number of seconds before the watchdog times out (0 = disable watchdog, default = 0).There are a few useful functions available to help with your project.
uint32_t RTOS.getMainTaskHwm();
- Returns the high water mark of the Main task stack in 32bit words.uint32_t RTOS.getIsrStackHwm();
- Returns the high water mark of the ISR stack in 32bit words.uint32_t RTOS.getIdleTaskHwm();
- Returns the high water mark of the Idle task stack in 32bit words.uint32_t RTOS.getTimerTaskHwm()
- Returns the high water mark of the Timer task stack in 32bit words.uint32_t RTOS.getBleHostTaskHwm();
- Returns the high water mark of the NimBLE Host task stack in 32bit words.uint32_t RTOS.getBleLLTaskHwm()
- Returns the high water mark of the NimBLE Link Layer task stack in 32bit words.uint32_t RTOS.getFreeHeap();
- Returns the currently free heap size in bytes.uint32_t getResetReason();
- Returns the reset reason for the last boot.void systemPowerOff();
- Shuts down the MCU.void systemRestart();
- Reboot.Currently only some boards have Adafruit bootloaders available which are provided as options. You may choose to use the bootloader or none.
The provided Adafruit bootloaders have no softdevice, if you currently are using the softdevice based Adafruit bootloader on your nRF52 board you will need to update it to the one provided by selecting it from the boards menu and clicking Burn Bootloader
.
For boards without the Adafruit bootloader option clicking Burn Bootloader
will simply erase the flash memory on the device. This is required if you have any bootloader flashed already.
This core is based on Arduino-nRF5 by Sandeep Mistry, which is based on the Arduino SAMD Core. With some code from Adafruit_nRF52_Arduino
The following libraries are used: