Simple Stream With BLE

In order to stream data over BLE, we currently implement communication with a BLE GATT Service.

A code example of the service on an embedded device is located on github at

Simple Stream BLE GATT Service

The BLE GATT service implements two characteristics: the configuration characteristic and the data characteristic.

In the code example for the Nano33 BLE Sense, the service is implemented with UUID 16480000-0525-4ad5-b4fb-6dd83f49546b

Simple Stream Service default UUID’s

Simple Stream Service UUID

default 16480000-0525-4ad5-b4fb-6dd83f49546b

Configuration Characteristic UUID

default 16480001-0525-4ad5-b4fb-6dd83f49546b

Data Characteristic UUID

default 16480002-0525-4ad5-b4fb-6dd83f49546b

Configuration Characteristic

The characteristic will store the device configuration JSON. Applications such as the Data Studio will only need to read the value of this characteristic once per connection.

An example configuration for a 6-axis IMU sensor at 100Hz would be

Configuration Characteristic Settings

Configuration Descriptor


Characteristic Data

JSON string describing output

Characteristic Value Length

Variable (string length)

Data Characteristic

When notifications are enabled by applications such as the Data Studio, data should be sent via BLE GATT notifications, sending unformatted data.

The Data Studio expects the format of the data to be in the order specified by the json in the configuration characteristic.

When notifications are disabled, the data stream should stop.

Data Characteristic Settings

Configuration Descriptor


Characteristic Value

Variable (raw binary in Version 1 or Version 2 format)

Characteristic Value Length

Variable (Up to max MTU size)

SensiML Open Gateway

In some cases, you may want to use a gateway device to retrieve sensor data from your device as an intermediary between the Data Studio. We have created the SensiML Open Gateway that communicates with the Data Studio over Wi-Fi and can read sensor data from BLE, TCP/IP, and Serial Connections. It is open-sourced and easily extensible to other data sources.


The Open Gateway will be expecting the befault UUID’s for the BLE service

This application is intended to run as a simple application on a remote computer (Raspberry Pi or other single-board computers that can run Python included).

Instructions for running and configuring the application can be found in the SensiML Open Gateway Documentation.