the messenger between devices

janus
← ble →
mercury
→ redis →
llizard

what it is

Mercury is the BLE client that runs on LlizardOS, connecting to Janus on your phone. Named for the swift messenger god - fleet-footed, carrying information between realms.

Written in Go for efficiency on embedded hardware. It discovers, connects, subscribes to notifications, and relays media state to the UI. Quick and light, like liquid metal.

how it flows

// mercury scans, connects, listens func (m *Mercury) Connect(addr string) { device := m.adapter.Connect(addr) services := device.DiscoverServices() // subscribe to media characteristics for _, char := range services.Characteristics { char.EnableNotifications(m.onUpdate) } }

features

auto discovery
scans for janus advertisements, reconnects on drop
gatt client
subscribes to notifications, reads characteristics on demand
command relay
writes play/pause/skip to control characteristic
redis bridge
publishes media state to redis for llizard to consume

built with

golang tinygo bluetooth redis bluez gatt client
view on github

the flow

Mercury is the messenger. Janus serves media from your phone, Mercury carries it to Redis, and Llizard reads it to render the display.

return to projects