alexanderlavrushko/BLEProof-collection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Collection of sample Bluetooth Low Energy applications for iOS, Android, ESP32 and Arduino Nano 33 IoT.

The apps implement basic BLE communication:

  • Central scans for Peripheral and connects to it
  • Central reads a value from Peripheral
  • Central writes a value to Peripheral
  • Peripheral notifies Central that a value has changed

Each BLE Central is compatible with each BLE Peripheral, because they use the same service and characteristics UUIDs.

Android BLE CentraliOS BLE Peripheral
Screenshot Android CentralScreenshot iOS Peripheral

Screenshot of ESP32 BLEProofPeripheral

To run and see it working, you need 2 physical devices supporting Bluetooth Low Energy:

...and some development tools:

PlatformPeripheralCentralNotes
AndroidYESYESAndroid 5.0 and newer, including Android 12
iOSYESYESiOS 11.0 and newer
ESP32YESYES
Arduino Nano 33YESYESTested on Arduino Nano 33 IoT, but should work on any board compatible with ArduinoBLE library
NameUUID
Service25AE1441-05D3-4C5B-8281-93D4E07420CF
Characteristic for read25AE1442-05D3-4C5B-8281-93D4E07420CF
Characteristic for write25AE1443-05D3-4C5B-8281-93D4E07420CF
Characteristic for indicate25AE1444-05D3-4C5B-8281-93D4E07420CF

Peripheral (also called Slave or Server) works similarly on all platforms:

  • Advertises a service with our UUID (see Table of UUIDs)
  • The service contains 3 characteristics:
    • for read - has only read permission (see Table of UUIDs)
    • for write - has only write permission (see Table of UUIDs)
    • for indication - supports only indications (see Table of UUIDs)
  • Allows the user to change the string value of the characteristic for read
  • Allows the user to change the string value of the characteristic for indicate
  • Allows the user to send an indication with updated string value to the connected Central

Note 1: technically characteristics can have any amount of permissions (read, write default, write without response, notify, indicate), but in this project each characteristic has only one permission for simplicity.

Note 2: indication is a notification with response - Peripheral notifies, Central confirms that notification received.

Central (also called Master or Client) works similarly on all platforms:

  • Scans for Peripherals which have a service with our UUID (see Table of UUIDs)
  • Connects to the first found Peripheral
  • Discovers services and characteristics of the connected Peripheral
  • Subscribes to indications of the "Characteristic for indicate" (see Table of UUIDs)
  • Allows the user to disconnect from Peripheral
  • Allows the user to read a characteristic value (string) from Peripheral
  • Allows the user to write a characteristic value (string) to Peripheral

Android BLE (usually articles cover only BLE Central role):

Android BLE Peripheral role (less popular topic):

iOS:

LightBlue: for iOS, for Android

BLE Scanner: for iOS, for Android

About

Example of complete BLE application: Central and Peripheral for Android, iOS, ESP32, Arduino Nano 33

Topics

Resources

Stars

Watchers

Forks