Pyintel Lux

Status: In production — active research & development
GitHub: Pyintel/pyintel-lux
Short-form: lux | Wire sync: 0x4C 0x58 (LX)

What OpenTelemetry is for cloud-native microservices — Pyintel Lux is for bare-metal microcontrollers. At 1/100th the footprint.


What is this?

Pyintel Lux is an open binary telemetry standard I’m building from scratch because nothing that exists today works on a microcontroller without fighting the framework constantly.

OpenTelemetry, Prometheus, Datadog — all designed assuming you have megabytes of RAM, a heap allocator, an OS, and a stable internet connection. Plug any of those into an ESP32 or STM32 and watch the fun begin.

Lux is the opposite. Zero heap allocation. Compile-time string tokenization. A 12-byte binary frame. Runs on UART, CAN-bus, UDP, or ESP-NOW depending on what’s available — and switches between them dynamically.


Why I’m building it in public

This series documents the whole process — from the first frame emitted over UART on two ESP32s, all the way to (eventually) a formal research paper. Every experiment, every failed measurement, every number that doesn’t match the target gets published here.

If this works, the blog history becomes the primary data source for the paper.
If it doesn’t, at least someone learns from it.


The series

More entries added as each research phase completes.


Engineering targets (short version)

MetricTarget
Flash footprint on MCU< 4 KB
Static RAM on MCU< 1 KB
Heap allocation at runtimeZero
Minimum frame size12 bytes
Payload reduction vs JSON70–90%
lux_emit_u32() on ESP32 @ 240MHz< 2 µs

Full targets with rationale: docs/GOALS.md


Research phases

Phase 1 (DONE)  UART emit + Python decode
Phase 2 (DONE)  UDP stream over Wi-Fi
Phase 3 (DONE)  ESP-NOW P2P mesh (2 boards)
Phase 4 (DONE)  luxd Python ingest → SQLite
Phase 5 (DONE)  WebSocket → browser live chart
Phase 6 (DONE)  Multi-Node Hardware Swarm (4 Boards) + 120s Wire Benchmark + 8-bit Arduino Uno Relay Bridge  ← complete!