Marine instruments are expensive and single-purpose. I wanted one small rotary knob at the helm that could be the rev counter, fuel gauge, temperature or autopilot control, depending on what I need at the time.
The system
- Display driver. The knob's display controller renders a GUI from its own flash. Instead of one screen per instrument, I flash a single generic "canvas" of addressable slots: a 60-tick colour ring, labels, symbols and a value. The host composes any instrument at runtime over UART, with no reflashing.
- Instrument registry. RPM, temperature, fuel and autopilot are just data: ranges, colour zones, sweep and style.
- Telemetry pipeline. Sensors are read through an ADC on an RP2040 CAN board and broadcast as NMEA 2000 messages, or bridged through Signal K, including an autopilot provider plugin.
How it's built
Go for the host tools and N2K codec (CAN framing, PGN scaling, fast-packet reassembly over SocketCAN or serial), PlatformIO firmware for the cockpit nodes, and a Python "canvas compiler" that generates every display asset and its page config.