Skip to the content
PCBKitNew board
4 layers68 × 19 mmBob, the printed circuit board in 3D

BleRiot is a compact request/response protocol for reading and writing named integer registers on low-power RF nodes. A Linux hub polls the nodes and bridges their registers to an external Registry service.

Size
68 × 19 mm
Copper layers
4
Thickness
1.6 mm
Parts
25
Nets
38
Pads
122
Tracks, vias
327, 69
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
23 Nov 2025
Updated
3 Nov 2026

Overview

Bob is an open-source printed circuit board by burgrp, from the burgrp/bleriot repository on GitHub. It is a 4-layer board of 68 × 19 mm with 25 parts on 38 nets, routed with 327 tracks and 69 vias.

It is built around the PAN2110P0AA, LM1117MP-3.3 and DSK14. Its parts include 8 capacitors, 5 resistors, 3 ICs, 3 diodes and 3 connectors.

Main components

3

README

README.md

BleRiot

BleRiot is a compact request/response protocol for reading and writing named integer registers on low-power RF nodes. A Linux hub polls the nodes and bridges their registers to an external Registry service. Registry change requests become idempotent absolute register assignments.

The radio uses GFSK with BLE Coded PHY framing: S8 provides about 125 kbps for maximum range, while S2 provides about 500 kbps at shorter range. It is not a standard BLE connection: BleRiot selects raw RF channels and uses its own fixed packet, addressing, transaction, and encryption rules.

Architecture

text
Registry service
       ^  provide values / consume assignments
       |
Linux hub: lib/site
  - inventory and per-node XTEA keys
  - one polling scheduler per RF channel
  - retries, liveness, Registry publication, diagnostics
       |
       | USB HID
       v
MCP2210 --SPI-- PAN211x radio   one passive dongle per active channel
       |
       | BLE-compatible raw RF framing (S8 ~125 kbps / S2 ~500 kbps)
       v
nodes sharing that channel

Each independent group uses one half-duplex RX/TX radio channel. The hub permits one in-flight GET or SET transaction on a channel, including its retries and reply wait. Different channels have independent transaction lanes and run concurrently.

The MCP2210 dongle is a passive USB-to-SPI bridge driving a PAN211x. It has no microcontroller, firmware, keys, or protocol state. All protocol and scheduling logic runs on the Linux host.

Protocol Summary

Every packet is 13 bytes: a four-byte plaintext source address, a one-byte plaintext packet version, and one XTEA-encrypted eight-byte block containing type, flags, register tag, and raw int32 value. The four packet types are:

ValueTypeTransaction
0x00GETHub asks for a register; node replies with VALUE.
0x01VALUENode returns the current value or NULL.
0x02SETHub assigns an absolute value or NULL; node replies with ACK.
0x03ACKNode confirms receipt of a SET; resulting state may settle asynchronously.

There is no transaction token. Channel ownership serializes requests, and the hub accepts a reply only when its source, register, and response type match the active transaction. See the authoritative protocol specification for packet fields, pacing, retry, and register semantics.

Repository Layout

PathResponsibility
libThe Go library module and authoritative protocol specification.
lib/sharedBuild-tag-free packages shared by host and TinyGo: packet codec, configuration, inventory, conversions, and chip profiles.
lib/nodeAllocation-free firmware runtime for GET and SET.
lib/siteLinux host engine, polling bridge, diagnostics, CLI, and radio drivers.
example/bobReference device type, TinyGo firmware, and inventory-driven host executable.
dongle/mcp2210Passive MCP2210/PAN211x dongle hardware and Linux udev rule.
dongle/py32f403Smart-dongle hardware design.
bobReference node PCB.
sub/hw-kicadShared KiCad symbols and footprints.

Register identity is a permanent, nonzero per-device-type uint16 tag. Deployments are ordinary Go inventory.Inventory values; there is no JSON descriptor. bleriot node build generates the TinyGo entry point that bakes one instance's address, key, channel, spread factor, and config into its firmware.

Quick Start

Run the reference hub against a Registry service:

sh
cd example/bob
go run ./cmd/dev hub --registry http://localhost:8080 --sweep-interval 1s

The hub discovers MCP2210 dongles and assigns them to inventory channels. It starts with no dongle attached and brings channels online as dongles appear. Install the shipped udev rule first so the hub can use /dev/hidraw* without root; see USB access.

Useful optional flags include --timeout 50ms, --retries 3, --diagnostics bleriot, and --diag-interval 1s. The persistent --debug flag may appear before or after the subcommand:

sh
go run ./cmd/dev --debug hub --registry http://localhost:8080 --diagnostics bleriot

Create and flash an inventory identity from the reference module:

sh
cd example/bob
go run ./cmd/dev node new
go run ./cmd/dev node build --name bob --flash --rtt

node new works offline and prints an inventory.Instance stub with a random nonzero address and XTEA key. node build selects the inventory instance, generates its baked firmware entry point, and follows the build and pyOCD policy declared by the device type's firmware manifest.

The reference firmware exposes bob.led as the single writable LED register; it controls the green LED. The red LED is reserved for connection status: off while hub packets are arriving, and a 200 ms pulse once per second after five seconds without a packet.

Documentation

  • Protocol specification: authoritative wire format, RF, transactions, reliability, register model, and identity.
  • Host library: inventory, commands, polling scheduler, Registry behavior, USB access, and diagnostics.
  • Diagnostic metrics: schema 10 catalog, accounting rules, and Prometheus examples.

Parts

25
QtyValueFootprintReferences
4100nCapacitor_SMD:C_0805_2012MetricC6, C8, C10, C12
210uCapacitor_SMD:C_0805_2012MetricC9, C11
21uCapacitor_SMD:C_0805_2012MetricC5, C7
2330RResistor_SMD:R_0805_2012MetricR3, R4
24k7Resistor_SMD:R_0805_2012MetricR2, R5
110kResistor_SMD:R_0805_2012MetricR1
116MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
131mmDrake:Wire antena 2.4GHzA1
15V / 3.3VJumper:SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mmJP1
1BBConnector_PinHeader_2.54mm:PinHeader_1x26_P2.54mm_VerticalJ3
1DSK14Diode_SMD:D_SOD-123D1
1GREENLED_SMD:LED_0805_2012MetricD3
1LM1117MP-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1PAN2110P0AAPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1PROGConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ1
1PWRConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1PY32F030K1xTxPackage_QFP:LQFP-32_7x7mm_P0.8mmU3
1REDLED_SMD:LED_0805_2012MetricD2

Questions

How big is the Bob PCB?

It measures 68 × 19 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Bob use?

25 parts, built around the PAN2110P0AA, LM1117MP-3.3 and DSK14. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Bob KiCad files?

From the burgrp/bleriot repository on GitHub, at the commit this page was made from: the board is bob/bob.kicad_pcb and its schematic bob/bob.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Bob design in my own project?

Its repository states no licence, so its author keeps all rights: ask burgrp before reusing the design.

More from burgrp/bleriot

2
  • 2 layers46.5 × 16 mmDongle py32f403, the printed circuit board in 3D

    Dongle py32f403

    burgrp/bleriot

    BleRiot is a compact request/response protocol for reading and writing named integer registers on low-power RF nodes. A Linux hub polls the nodes and bridges their registers to an external Registry service.

    25 parts
  • 2 layers40 × 16 mmDongle mcp2210, the printed circuit board in 3D

    Dongle mcp2210

    burgrp/bleriot

    BleRiot is a compact request/response protocol for reading and writing named integer registers on low-power RF nodes. A Linux hub polls the nodes and bridges their registers to an external Registry service.

    22 parts

Similar boards

  • 2 layers77 × 51 mmAt32f455-bob, the printed circuit board in 3D

    At32f455-bob

    burgrp/hw-at32f455-bob

    66 parts
  • 2 layers40 × 42 mmBleriot rs485, the printed circuit board in 3D

    Bleriot rs485

    burgrp/bleriot-rs485

    DIN rail mounted RS485 to WiFi bridge

    21 parts1
  • 2 layers314 × 27 mmBleriot REG6, the printed circuit board in 3D

    Bleriot REG6

    burgrp/bleriot-REG6

    REG6 is a six-channel solid-state-relay controller built around a PY32F030 and PAN2110. This repository contains the KiCad hardware and a standalone TinyGo/BleRiot module under fw/ that exposes one integer percentage…

    85 parts
  • 2 layers50 × 35 mmFan switch, the printed circuit board in 3D

    Fan switch

    burgrp/hw-fan-switch

    12V DC Fan switch based on ESP8266

    23 parts
  • 4 layers170 × 100 mmLeviathan V1.3, the printed circuit board in 3D

    Leviathan V1.3

    MotorDynamicsLab/Leviathan

    Leviathan Main Controller for Voron 2 / Trident 3D Printers

    420 parts124GPL-3.0
  • 4 layers89 × 72.2 mmOcean harness, the printed circuit board in 3D

    Ocean harness

    jericho-adler/ocean-harness

    An ADAS CAN interposer for the Fisker Ocean, designed in KiCad. It plugs in between the car's harness and the ADAS ECU's main connector (CON1), so a comma device can sit between the car and the ECU.

    33 partsCERN-OHL-S-2.0