Skip to main content

Overview

This document describes the Bluetooth Low Energy (BLE) protocol used to communicate between the Omi app and device. Use this reference when building custom apps or SDKs.

BLE Discovery

The official app discovers the device by scanning for BLE devices with the name Omi.

BLE Services

The Omi wearable implements three BLE services:

Battery Service

Standard BLE battery level monitoring

Device Info Service

Device metadata and firmware version

Audio Service

Audio streaming and codec configuration

Battery Service

Battery notifications require firmware v1.5 or later. Earlier versions (1.0.x) do not support notifications.
This is the standard BLE Battery Service.

Device Information Service

Available since firmware version 1.0.3
This is the standard BLE Device Information Service.

Characteristics


Audio Streaming Service

This is the main service for streaming audio from the device to the app.

Characteristics


Codec Types

The codec type characteristic determines how to decode the audio data:
Starting with firmware v1.0.3, the default codec is Opus. Earlier versions used PCM 16-bit at 8 kHz.

Audio Data Format

Audio data is sent as BLE notifications on the Audio Data characteristic.

Packet Structure

Each value update includes a 3-byte header:
Each audio packet contains 160 samples. If the packet exceeds (negotiated BLE MTU - 3 bytes), it will be split across multiple value notifications.Example: PCM 16-bit at 16 kHz
  • 160 samples × 2 bytes = 320 bytes per packet
  • On iOS devices, this typically results in:
    • Notification 1: packet n, index 0, 251 bytes
    • Notification 2: packet n+1, index 1, 75 bytes
All audio data is sent in little-endian format.

Implementation Example


Python SDK

Python SDK with Opus decoding

Swift SDK

Native iOS SDK

React Native SDK

Cross-platform mobile SDK

Firmware

Compile custom firmware