Skip to content

Blip default firmware

Default firmware for blip which collects data from all onboard sensors and sends it over BLE. We use something we are calling Indrium as our specification for the data format.


Indrium is a protobuf spec we are using for sensor data. Protobuf is a serialization format and it doesn't say anything about the transport layer (which couild be BLE, or serial, or TCP etc.). Indrium spec contains BLE transport layer requirements also, like the UUIDs of the service and characteristec, and how large packets will be divided into smaller chunks (fragmentation).

Although this may increase the number of bytes that need to be sent, especially for smaller packets, it is structured data which is easy to parse using libraries generated with protobuf tools. In firmware we use nanopb library for parsing/generating protobuf messages.

The linked document contains information about BLE specific portions of the protocol also. Please see: BLE transport specification.

Build instructions

No special build instructions, except that for now, Zephyr needs a certain branch, currently at

This branch is based off Zephyr release v1.14, we only added drivers code for which is not yet in mainline zephyr (it's in the process of being merged).

To get to this branch:

cd /path/to/zephyr/
git remote add electronut
git fetch --all
git checkout electronut/blip_dev

Building the firmware:

cd /path/to/default_fw
git submodule init && git submodule update  # for nanopb
. ~/repos/zephyrproject/zephyr/
mkdir build
cd build
cmake -GNinja -DBOARD=nrf52_blip ..
ninja flash