Skip to content
 
 

Latest commit

 

History

189 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NimBLE-Arduino

A fork of the NimBLE stack restructured for compilation in the Ardruino IDE with a CPP library for use with ESP32.

Note for IDF users: An ESP-IDF component version of this library can be found here, this will not compile correctly in ESP-IDF.

This library significantly reduces resource usage and improves performance for ESP32 BLE applications as compared
with the bluedroid based library. The goal is to maintain, as much as reasonable, compatibility with the original
library but refactored to use the NimBLE stack. In addition, this library will be more actively developed and maintained
to provide improved capabilites and stability over the original.

Resource use improvement

(Original) BLE_client example comparison (Debug):

Arduino BLE Library

Sketch uses 1216377 bytes (58%) of program storage space.
Memory after connection: Free Heap: 171548

NimBLE-Arduino library

Sketch uses 617256 bytes (29%) of program storage space.
Memory after connection: Free Heap: 270336


(Original) BLE_notify example comparison (Debug):

Arduino BLE Library

Sketch uses 1208409 bytes (57%) of program storage space.
Memory after connection: Free Heap: 173300

NimBLE-Arduino library

Sketch uses 603432 bytes (28%) of program storage space.
Memory after connection: Free Heap: 269792

As shown: there is nearly a 50% reduction in flash use and approx. 100kB less ram consumed!

Installation

Download as .zip and extract to Arduino/libraries folder, or in Arduino IDE from Sketch menu -> Include library -> Add .Zip library.

#include "NimBLEDevice.h" at the beginning of your sketch.

Tested and working with esp32-arduino v1.0.2 and 1.0.4 in Arduino IDE v1.8.12 and platform IO.

Using

This library is intended to be compatible with the original ESP32 BLE functions and types with minor changes.
See: Breaking API Changes vs Original for changes that might required to adapt your exisiting projects.

Also see Improvements_and_updates for information about non-breaking changes.

Check the Refactored_original_examples in the examples folder for highlights of the differences with the original library.

More advanced examples highlighting many available features are in examples/ NimBLE_Server, NimBLE_Client.

Beacon examples provided by @beegee-tokyo are in examples/ BLE_Beacon_Scanner, BLE_EddystoneTLM_Beacon, BLE_EddystoneURL_Beacon.

Change the settings in the nimconfig.h file to customize NimBLE to your project, such as increasing max connections, default is 3.

Continuing development

This Library is tracking the esp-nimble repo, nimble-1.2.0-idf master branch, currently @46c1d9f.

Also tracking the NimBLE related changes in ESP-IDF, master branch, currently @2ef4890.

Acknowledgments


Todo

  1. Implement random addresses.
  2. Implement NimBLEServer::removeService
  3. Implement extra fields in NimBLEAdvertisedDevice.
  4. Document nimconfig.
  5. Add BLE Mesh code.

About

A fork of the NimBLE library structured for compilation with Ardruino, designed for use with ESP32.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages