The nRF Toolbox is a container app that stores your Nordic Semiconductor apps for Bluetooth Low Energy in one location.
It contains applications demonstrating standard Bluetooth LE profiles:
- Cycling Speed and Cadence
- Running Speed and Cadence
- Heart Rate Monitor
- Blood Pressure Monitor
- Health Thermometer Monitor
- Glucose Monitor
- Continuous Glucose Monitor
- Universal Asynchronous Receiver/Transmitter (UART)
- Throughput
- nRF Distance Measurement
- Blinky (LBS) Service
- Channel Sounding Service
Note
The Proximity profile is not included in this version of the app. If you need it, please download the previous version.
The production version of nRF Toolbox depends on Kotlin BLE Library. The single profile implementation This also utilizes Nordic Android Common Library, which contains utility classes such as Bluetooth LE permission, Bluetooth LE scanner, and so on, used by apps developed by Nordic Semiconductor.
The ProfileService is responsible for managing Bluetooth Low Energy (BLE) connections in a centralized way.
It runs as a foreground service, maintaining connections to multiple devices, handling lifecycle events, and exposing device data to bound components (e.g., activities or fragments).
The service establishes and maintains BLE connections via the CentralManager. Connections are kept alive independently of any activity or fragment lifecycle. When the UI component unbinds from the service, the connections remain active, ensuring uninterrupted data flow.
All connected devices are tracked, and their states (connection, services, disconnections) are published using a StateFlow.
-
Single Service for All Devices: Instead of running a separate service per device, one ProfileService manages all active connections.
-
Connection Lifecycle: Starts a connection when
onStartCommandis triggered with a device address. Cleans up and disconnects gracefully when no devices remain connected. Publishes disconnection events with reasons for UI handling. -
Device State Management: Keeps a map of devices and their DeviceData (address, state, services). Tracks missing services and notifies observers if required services are unavailable.
-
Service Discovery & Management: Discovers services after connection. New profiles can be added by implementing a ServiceManager subclass.
-
Logging: Integrates with nRF Logger to provide per-device logs. Each device connection initializes its own logger instance.
The UART profile allows for fast prototyping of devices. The service itself is very simple, having just 2 characteristics, one for sending data and one for receiving. A UART preset configuration can be created as a separate profile. Each of them, when pressed, will send the stored command to the device. The UART profile is included in the profile list and is managed in the same way as other profiles.
Note
The Device Firmware Update (DFU) feature has been removed from this application and is now offered in nRF DFU (for devices with Legacy and Secure DFU from nRF5 SDK) or nRF Connect Device Manager (for devices based on nRF Connect SDK or Zephyr).
nRF Toolbox depends on Kotlin BLE Library which may be cloned into the same root folder as this app.
The nRF Toolbox also uses the nRF Logger API library. This library allows the app to create log entries in nRF Logger. Please, read the library documentation on GitHub for more information about the usage and permissions.
The Kotlin-Utils-Library is used for different ByteArray operations during profile data parsing.
The graph in the HRM profile is created using the MPAndroidChart v3.1.0 contribution based on the Apache 2.0 license.
- Android 6.0 or newer is required. Android 5.0 was supported until version 4.1.4.
- Compatible with nRF5 devices running samples from the Nordic SDK and other devices implementing standard profiles.
- Development kits: https://www.nordicsemi.com/Software-and-tools/Development-Kits.
- The nRF Connect SDK documentation is available at https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/index.html.