
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.

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.
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.
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.
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 channelEach 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.
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:
| Value | Type | Transaction |
|---|---|---|
0x00 | GET | Hub asks for a register; node replies with VALUE. |
0x01 | VALUE | Node returns the current value or NULL. |
0x02 | SET | Hub assigns an absolute value or NULL; node replies with ACK. |
0x03 | ACK | Node 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.
| Path | Responsibility |
|---|---|
| lib | The Go library module and authoritative protocol specification. |
| lib/shared | Build-tag-free packages shared by host and TinyGo: packet codec, configuration, inventory, conversions, and chip profiles. |
| lib/node | Allocation-free firmware runtime for GET and SET. |
| lib/site | Linux host engine, polling bridge, diagnostics, CLI, and radio drivers. |
| example/bob | Reference device type, TinyGo firmware, and inventory-driven host executable. |
| dongle/mcp2210 | Passive MCP2210/PAN211x dongle hardware and Linux udev rule. |
| dongle/py32f403 | Smart-dongle hardware design. |
| bob | Reference node PCB. |
| sub/hw-kicad | Shared 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.
Run the reference hub against a Registry service:
cd example/bob
go run ./cmd/dev hub --registry http://localhost:8080 --sweep-interval 1sThe 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:
go run ./cmd/dev --debug hub --registry http://localhost:8080 --diagnostics bleriotCreate and flash an inventory identity from the reference module:
cd example/bob
go run ./cmd/dev node new
go run ./cmd/dev node build --name bob --flash --rttnode 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.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100n | Capacitor_SMD:C_0805_2012Metric | C6, C8, C10, C12 |
| 2 | 10u | Capacitor_SMD:C_0805_2012Metric | C9, C11 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric | C5, C7 |
| 2 | 330R | Resistor_SMD:R_0805_2012Metric | R3, R4 |
| 2 | 4k7 | Resistor_SMD:R_0805_2012Metric | R2, R5 |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 16MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 31mm | Drake:Wire antena 2.4GHz | A1 |
| 1 | 5V / 3.3V | Jumper:SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mm | JP1 |
| 1 | BB | Connector_PinHeader_2.54mm:PinHeader_1x26_P2.54mm_Vertical | J3 |
| 1 | DSK14 | Diode_SMD:D_SOD-123 | D1 |
| 1 | GREEN | LED_SMD:LED_0805_2012Metric | D3 |
| 1 | LM1117MP-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U2 |
| 1 | PAN2110P0AA | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U1 |
| 1 | PROG | Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical | J1 |
| 1 | PWR | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | PY32F030K1xTx | Package_QFP:LQFP-32_7x7mm_P0.8mm | U3 |
| 1 | RED | LED_SMD:LED_0805_2012Metric | D2 |
It measures 68 × 19 mm and has 4 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask burgrp before reusing the design.

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.

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.



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…



MotorDynamicsLab/Leviathan
Leviathan Main Controller for Voron 2 / Trident 3D Printers

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.
