Open-source CAN bus controller for BMW E9X vehicles. Controls instrument cluster gauges via the K-CAN bus using the KWP2000 diagnostic protocol.
firmware/ PlatformIO firmware (Arduino/AVR + STM32)
hardware/
avr/ KiCad PCB design — Standard Module V1 (ATmega328P)
stm32/ KiCad PCB design — Standard Module V2 (STM32)
configurator/ Web-based configuration app (React + TypeScript)
- Needle sweep on ignition (speedo, tacho, fuel, oil temp, cruise control)
- Coolant temperature display on cruise control or oil temp gauge
- Runtime config menu — cluster variant, coolant gauge type, button assignment
- Automatic DTC clear on ignition
- CAN bus-off detection and recovery
- Web configurator for device setup over USB
Two PCB revisions are available under hardware/:
| Module | MCU | Status |
|---|---|---|
| Standard Module V1 | ATmega328P (Arduino Nano) | Stable |
| Standard Module V2 | STM32 | Stable |
See the README in each subdirectory:
- Firmware and configurator — GNU General Public License v3.0
- Hardware (PCB designs) — CERN Open Hardware Licence Version 2 – Strongly Reciprocal
Free for personal and open-source use. Commercial use in closed-source products requires a separate written agreement — contact hello@miljanilic.com.
BMW, E9X, and related model designations are registered trademarks of BMW AG. This project is not affiliated with, endorsed by, or sponsored by BMW AG or any of its subsidiaries. The use of these names is solely for the purpose of identifying the compatible vehicle hardware and is purely descriptive in nature.
