Skip to the content
2 layers100 × 56.5 mmPi dash input hat, the printed circuit board in 3D

Pi dash input hat

outlandfabworks/overdash

Open-source Raspberry Pi vehicle dashboard. Reads CAN (J1939), OBD-II, Megasquirt/Speeduino, GPS, and GPIO — streams to a canvas-based kiosk frontend with a visual no-code layout editor.

Size
100 × 56.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
68
Nets
61
Pads
203
Tracks, vias
970, 27
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
14 Jul 2026
Updated
9 Sep 2026

Overview

Pi dash input hat is an open-source printed circuit board by outlandfabworks, from the outlandfabworks/overdash repository on GitHub, published under the MIT licence. It is a 2-layer board of 100 × 56.5 mm with 68 parts on 61 nets, routed with 970 tracks and 27 vias.

It is built around the SMAJ15A, DMG2305UX and SB360, with the SMAJ36A among its other parts. Its parts include 25 resistors, 19 diodes, 9 ICs, 4 connectors and 2 capacitors. It belongs with the radio and wireless boards of this library.

Main components

4

README

README.md

Overdash

Open-source digital dashboard for Raspberry Pi. Most commercial Pi-based dash solutions lock you into a single ECU brand and require paid third-party software licenses. Overdash doesn't: it speaks J1939 CAN, OBD-II K-line, ELM327, CAN OBD, GPS, and GPIO natively, so it works with engine swaps, custom builds, and vehicles that commercial options simply don't support.

A Python async backend reads from any combination of those sources simultaneously and streams everything over WebSocket to a Chromium kiosk frontend. Gauges are rendered on canvas, and the layout is fully editable in-browser with a visual no-code editor. No paid software required.

Built for a TDI-swapped Land Rover Discovery (J1939 engine + CompuShift Sport TCM + ZF4HP22EH), but config-driven; no code changes needed to adapt it to another vehicle.

Overdash dashboard screenshot


Features

  • Multiple data sources: J1939 CAN, CompuShift TCM, OBD-II (K-line and ELM327), CAN OBD, Megasquirt/Speeduino USB serial, GPS (NMEA), analog ADC, frequency counter, GPIO inputs, and a mock source for development without hardware
  • Visual no-code layout editor: drag to move, resize handles, properties panel for zones/thresholds/colors, gauge palette, theme picker, save to server or export JSON
  • Gauge types: circular sweep (tach, speedo), vertical/horizontal bar, large numeric with value mapping, indicator lights, warning light strip with DTC panel
  • DTC monitoring: Mode 03 (stored) + Mode 07 (pending) codes, MIL status, tap any active warning light to open the fault code panel
  • Odometer: integrates vehicle speed into a persisted lifetime total and resettable trip counter
  • PWA: add to home screen on a tablet for fullscreen landscape kiosk mode
  • Auth-protected HTTP API: layout save/load, signal snapshot, trip reset, odometer set, per-source simulation mode

Quick start

bash
# Clone
git clone https://github.com/outlandfabworks/overdash.git
cd overdash

# Create a virtual environment and install dependencies
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

# Test with the mock vehicle source (no hardware required)
.venv/bin/python -m backend.main configs/vehicles/mock.yaml

# Open http://localhost:8080 in a browser

For full installation on a Raspberry Pi (CAN setup, systemd service, Chromium kiosk), see INSTALL.md.


Project structure

text
backend/
  main.py                     Entry point: wires sources, processors, servers
  data_bus.py                 In-memory signal store with asyncio pub/sub
  config.py                   YAML loader
  sources/
    base.py                   Abstract DataSource
    can_j1939.py              J1939 PGN/SPN decoder (python-can)
    can_compushift.py         CompuShift Sport TCM CAN messages
    can_obd.py                OBD-II over CAN (ISO 15765-4)
    obd_kline.py              ISO 9141-2 / KWP2000 K-line poller
    elm327.py                 ELM327 USB/Bluetooth OBD adapter
    megasquirt.py             Megasquirt 1/2/3 and Speeduino USB serial
    gps_nmea.py               GPS via NMEA serial stream
    analog_adc.py             Analog voltage/sensor via SPI ADC (MCP3xxx)
    frequency_counter.py      RPM/frequency via GPIO pulse counting
    gpio_inputs.py            Overdash Input HAT (turn signals, lights, reverse)
    mock_vehicle.py           Simulated signals for dev/testing
  processors/
    odometer.py               Integrates vehicle_speed → odometer + trip signals
  server/
    websocket.py              WebSocket broadcast server (30 Hz)
    http_api.py               HTTP API + frontend file serving (port 8080)

frontend/

Signal flow

text
Hardware  →  Source._read_loop()  →  DataBus.publish(name, value, unit)
                                           │
                                   OdometerProcessor (vehicle_speed → odometer/trip)
                                           │
                                   WebSocketServer (batches at 30 Hz)
                                           │
                                   Browser WSClient
                                           │
                                   LayoutManager.update(signals)
                                           │
                                   Gauge.draw(value)  →  <canvas>

Adding a gauge type

  1. Create frontend/js/gauges/my_gauge.js extending BaseGauge, implement draw(value).
  2. Register it in index.html: GaugeRegistry.register('my_gauge', MyGauge).
  3. Add a gauge entry in the layout JSON with "type": "my_gauge".

Adding a data source

  1. Create backend/sources/my_source.py extending BaseSource, implement _read_loop().
  2. Register it in backend/main.py: _SOURCE_TYPES['my_source'] = MySource.
  3. Add a source entry in the vehicle YAML with type: my_source.

TDI Discovery: signal reference

SignalSourceNotes
engine_rpmJ1939 PGN 61444 SPN 190EEC1
coolant_tempJ1939 PGN 65262ET1
intake_mapK-line PID 0x0BAbsolute kPa (doubles as boost)
vehicle_speedJ1939 PGN 65265CCVS1
trans_current_gear_labelCompuShift CAN 0x3E0P/R/N/D/3/2/1
trans_tcc_lockupCompuShift CAN 0x3E00 = open, 1 = locked
trans_tempCompuShift CAN 0x3E1°C
battery_voltageJ1939 PGN 65271VEP1
odometerProcessorPersisted lifetime km
tripProcessorResettable trip km

CompuShift Sport CAN IDs

Default map derived from community reverse-engineering (Sport firmware ≥ 2.x). Override via messages: in the vehicle YAML if your TCM uses different IDs.

CAN IDContent
0x3E0Current gear, target gear, TCC status, shift mode
0x3E1Trans temp
0x3E2Line pressure, error codes

License

MIT. See LICENSE. Third-party license notices in THIRD_PARTY_LICENSES.md.

Parts

68
QtyValueFootprintReferences
91kR_0805_2012MetricR17, R18, R19, R20, R21, R22, R23, R24, R25
810kR_0805_2012MetricR9, R10, R11, R12, R13, R14, R15, R16
8560R_0805_2012MetricR1, R2, R3, R4, R5, R6, R7, R8
8LED_GRNLED_THT:LED_D3.0mmD9, D10, D11, D12, D13, D14, D15, D16
8PC817Package_DIP:DIP-4_W7.62mmU1, U2, U3, U4, U5, U6, U7, U8
8SMAJ15ADiode_SMD:D_SMAD1, D2, D3, D4, D5, D6, D7, D8
6MountingHole_2.7mm_M2.5MountingHole:MountingHole_2.7mm_M2.5H1, H2, H3, H4, H5, H6
1100u/3AL_Radial_D10.0mm_P5.00mm_Fastron_07PL1
112V_PWR_INPhoenixContact_MSTBA_2,5_2-G-5,08_1x02_P5.08mm_HorizontalJ3
12.5A_PolyR_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalF1
1220u/10VCP_Radial_D8.0mm_P3.50mmC2
1220u/35VCP_Radial_D8.0mm_P3.50mmC1
1DMG2305UXSOT-23Q1
1GPIO_2x20Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ2
1LED_GRNLED_D3.0mmD19
1LM2596-5.0TO-220-5_VerticalU9
1Molex_MicroFit3_9pinConnector_PinHeader_2.54mm:PinHeader_1x09_P2.54mm_VerticalJ1
1SB360D_SMAD18
1SMAJ36AD_SMAD17
1Sensor_ConnectorPinHeader_2x05_P2.54mm_VerticalJ4

Similar boards

  • 2 layers180 × 58 mmHandheld sstc, the printed circuit board in 3D

    Handheld sstc

    automagicle/handheld-sstc

    A handheld SSTC project on PCB, designed for a large magic wand form factor, entirely powered from 8s 18650. Uses direct secondary feedback with gate driver and MOSFETs, and 555 interrupter

    66 parts1
  • 2 layers99.7 × 48.8 mmAC DC Wandler, the printed circuit board in 3D

    AC DC Wandler

    MoElashmawi/Flyback-AC-DC-Converter

    Flyback AC-DC Converter (230V AC to 12V DC) — Full SMPS design using VIPer22A PWM Controller. Schematic, PCB layout & 3D render in KiCad.

    34 parts1MIT
  • 2 layers110.7 × 74.7 mmTgn, the printed circuit board in 3D

    Tgn

    0x007E/tgn

    Tone generator

    92 parts
  • 2 layers49.5 × 57.2 mmStep up, the printed circuit board in 3D

    Step up

    dzavalishin/hardware

    Misc smart house hardware

    40 parts3
  • 4 layers66.3 × 40.2 mmCm4 drone, the printed circuit board in 3D

    Cm4 drone

    dridri/bcflight

    Raspberry Pi based drone flight controller and remote control

    56 parts175GPL-3.0
  • 2 layers141.9 × 72.9 mmImu to dxl 10p, the printed circuit board in 3D

    Imu to dxl 10p

    jyg9/microduck-community-kit

    补充microduck缺少的硬件电路和固件,另外配套一些测试工具。imu_to_dxl;banana_pcb;microduck复刻

    897 parts28Apache-2.0
  • 2 layers80 × 50 mmOpen PSU Meter ESP32, the printed circuit board in 3D

    Open PSU Meter ESP32

    nitefood/opsum

    OPSUM - The Open PSU Meter project

    51 parts5MIT
  • 4 layers50 × 50 mmSimpleFOC Dual Motor Controller, the printed circuit board in 3D

    SimpleFOC Dual Motor Controller

    Brendanofawesome/SimpleFOC-DualESC

    High-performance dual BLDC motor driver with FOC (Field-Oriented Control) algorithm support, designed for applications requiring precise motor control with simultaneous dual-motor operation.

    130 parts1

Questions

How big is the Pi dash input hat PCB?

It measures 100 × 56.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Pi dash input hat use?

68 parts, built around the SMAJ15A, DMG2305UX, SB360 and SMAJ36A. 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 Pi dash input hat KiCad files?

From the outlandfabworks/overdash repository on GitHub, at the commit this page was made from: the board is hardware/pi-dash-input-hat/pi-dash-input-hat.kicad_pcb and its schematic hardware/pi-dash-input-hat/pi-dash-input-hat.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Pi dash input hat design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).