Unfortunately I’ve slowly undone most of this project and returned the car to stock. I don’t drive much anymore and the project wasn’t in a reliable state. I will likely sell the thing soon.
For your car, you could probably get 90% of the way there with an android head unit, LTE/USB stick, and resler’s ibus interface or bluebus. The only meaningful feature the custom PCB added was controlling the door locks with software.
It was really fun at the time to mess around with, but it’s not something I’d recommend doing. IMO the most reliable piece to come out of the experiment was the gokbus library (I still use it to this day to reset my radio’s mode). The rest of the stack frankly isn’t usable. Let me know if you want any missing source code/files regardless.
BMW Control Center
An embedded computer, an Arduino PCB, and an Android tablet walk into a bar car…
I am modernizing my 2005 vehicle by adding oodles of connectivity and custom electronics. So far, I’ve successfully implemented:
- Bluetooth Audio with hotspot tethering
- Programmable wireless LTE, pushing state over MQTT
- Arduino based custom PCB measuring battery voltages, switching relays, and tracking GPS location
- K-Bus, controlling radio/windows/locks/other auxiliaries
- CAN Bus, recording ECU data like speed, RPM, pressure
- Hardwired 4K dash camera with 1TB SSD
- Prometheus exported on
/metrics
for recording time series data - IP namespaces and write-on-update state control, limiting wireless data
- Android tablet running a customized build of LineageOS
- 3D printed cases, bezels, and shims
- Android apps providing “Tesla-like” control over all the above
These primary features culminate into an app controlled, privacy preserving, monolith of a smart-car-computer system.
Stack
It’s all primarily written with:
- Go API for vehicle state
- React Native clients for remote system control
- C with PlatformIO + Arduino
- MQTT
- Python for handling exported album artwork
- Containizered Mosquito and Prometheus instances on a home server
- Various Unix tools
My design goal is to steal all the ideas modern automakers have fleshed out the past two decades, learning everything I can while writing my own take.
Hardware
- Board: Currently fulfilled by a Raspberry Pi 3 A, although has also worked well on the ODROID N2 and Khadas VIM3
- KBus USB adapter
- Canable Pro
- Huawei LTE dongle
- Samsung Tab S2
- Excellent OLED panel, looks stunning at night
- Custom 3D printed bezel for mounting in dash
- 30Ah deep cycle battery
Control App
Infrequently Asked Qs
What makes this specific to BMW?
Great question, me. The KBus is a proprietary complement to the more universal CAN bus, and is unique to BMWs and Minis. Probably Rolls-Royce as well.
The KBus is such a critical component, and the design is specific to my model, it would be less useful on any other vehicle.