Skip to content

Latest commit

 

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚙 BMW I/K Bus — Interface for Classic BMW

A complete solution for interfacing with the BMW I-Bus and K-Bus using Arduino, ESP32, STM32 or Raspberry Pi Pico — sniff bus traffic, read live data and inject commands to control lights, windows, locks and multimedia on classic BMWs (E38, E39, E46, E53 and more).

GitHub Repo stars GitHub forks GitHub Issues or Pull Requests GitHub License GitHub last commit Arduino ESP32 BMW


🌟 Overview

An Arduino / ESP32 interface and library for the BMW I-Bus (Instrumentation Bus) and K-Bus (Body Bus). It lets you sniff bus traffic, decode messages in real time, and inject commands to control lights, windows, locks and multimedia modules on classic BMWs — using microcontrollers like Arduino, ESP32, STM32 or Raspberry Pi Pico.

The I/K-Bus is a single-wire serial protocol used in classic BMW models (E38, E39, E46, E53, etc.), operating at 9600 baud, 8E1 (even parity). This repository contains the source code, an Arduino library and hardware schematics needed to bridge this automotive protocol with modern development boards.

💼 Hire Me

I design custom automotive diagnostic tools, firmware and apps — this is what I do professionally. Whether you need a full product or just the communication layer, I can help.

  • Custom protocol implementation — BMW I/K-Bus, K-Line (ISO 9141-2 / KWP2000), CAN bus, and other manufacturer-specific protocols (VAG KW1281, and more)
  • Custom bus & protocol communication code — low-level drivers and communication routines for any automotive bus or proprietary/custom protocol you need
  • ECU security access — seed-key (security access) algorithms and unlock routines for KWP2000 / UDS ECUs
  • Custom mobile & desktop apps — Android / iOS / web companion apps to visualize, log and control your device
  • Bespoke hardware — diagnostic shields & PCBs designed around your requirements
  • ECU communication & reverse engineering — bus sniffing, packet decoding, module control, undocumented buses
  • Embedded firmware — Arduino, ESP32, ESP8266, STM32, Raspberry Pi Pico

Need something else related to automotive communication or electronics? Just reach out — if it involves cars, buses or embedded hardware, I can most likely help.

Have a project in this space? → 📧 muksin.muksin04@gmail.com

✨ Features

Bus Communication

  • 🔍 Real-time sniffing — monitor and decode every message on the bus.
  • 🔁 Bi-directional control — not just reading; inject packets to control car modules.
  • 📦 Packet decoding — source, length, destination and data parsing via the IbusSerial library.
  • 💤 Sleep / wake handling — automatic bus sleep support to avoid draining the battery.

Hardware & Platforms

  • 🧩 Multi-platform — tested on Arduino Nano; compatible with ESP32, STM32, Raspberry Pi Pico and more.
  • 🛠️ Hardware flexibility — schematics for optocouplers, TH3122 / ELMOS and MCP2025.
  • ⚡ Standard bus timing — 9600 baud, 8E1, single-wire, matching the classic-BMW spec.

📨 Message Frame Format

Every I/K-Bus message follows the same structure:

Byte Field Description
0 Source Sender module ID
1 Length Number of bytes from Destination to Checksum
2 Destination Target module ID
3 … n-1 Data Command byte + payload
n Checksum XOR of all preceding bytes

📡 Supported BMW Models

Model Series Period I-Bus K-Bus
E31 8 Series 1989–1999 ✅
E38 7 Series 1999–2001 ✅ ✅
E39 5 Series 1995–2004 ✅ ✅
E46 3 Series 1997–2006 ✅
E52 Z8 2000–2003 ✅
E53 X5 1999–2006 ✅ ✅
E83 X3 2003–2010 ✅
E85 Z4 2002–2008 ✅
E87 1 Series 2004–2013 ✅

🚀 Quick Start

First, build a bus interface from one of the Schematics below and tap into the bus — see Where to Connect. Then install the library and pick an example that fits your goal:

  1. Install the library — BMW I/K Bus Library in the Arduino IDE.
  2. Choose an example sketch:

🔍 Just reading / sniffing? → Basic_Code

Reads and decodes all traffic on the bus and prints it to a debug serial — the fastest way to see what's happening.

👉 Sketch: Codes/Basic_Code

🎛️ Controlling an E46? → E46_KBus_Code

Example for reading and sending commands to K-Bus modules on the BMW E46.

👉 Sketch: Codes/E46_KBus_Code

  1. Select your board (Arduino Nano, ESP32, …), set the COM port, and upload.

⚠️ Disclaimer: This is a hobby / development project. I am not responsible for any issues or damage that may occur during testing. Injecting packets onto a live vehicle bus can affect its modules — proceed with caution and at your own risk.

🔌 Where to Connect to the K-Bus (BMW E46 Example)

Common, practical places to tap the K-Bus wiring:

  • CD Changer connector – trunk
  • Radio K-Bus wiring
  • K-Bus junction block (above the fuse box)

1. CD Changer Connector

The easiest place to connect an Arduino or similar interface.

  • Provides +12V, GND and K-Bus in one connector
  • CD changer is optional, but the wiring is usually present
  • Located in the trunk, driver's side, behind the trim

Connector: X18180 (BMW WDS) · K-Bus wire: White/Red with yellow dots · Ground: Brown · 12V: Red/Green

2. K-Bus Junction Block (above the fuse box)

A central distribution point for the K-Bus.

  • K-Bus wire color: White/Red with yellow dots
  • Tap the K-Bus here; take +12V and GND from another location.

🛠️ Schematics for Communication

Interfacing a 5V / 3.3V microcontroller with the 12V single-wire bus requires level shifting. Pick the approach that suits your project:

🔹 Optocouplers

A simple, low-cost and electrically isolated interface — great for prototyping and safe experimentation.

🔹 TH3122.4 or ELMOS 10026B

Dedicated BMW bus transceiver ICs with built-in level shifting and protection — the most reliable, production-grade option.

🔹 MCP2025

A LIN transceiver-based interface — a compact, standards-based alternative.

🔗 Related Projects

Part of a full automotive communication & diagnostics ecosystem:

Firmware & Readers Libraries Manufacturer Protocols UI
OBD2 K-line Reader OBD2 K-Line Library BMW I/K Bus OBD2 Diagnostic UI
OBD2 CAN Bus Reader OBD2 CAN Bus Library VAG KW1281

☕ Support My Work

If you enjoy my projects and want to support me, you can do so through the links below:

Buy Me A Coffee PayPal GitHub Sponsors


📬 Contact

For custom development, job offers, collaboration, sponsorship, or purchasing my devices, feel free to reach out.

📧 Email: muksin.muksin04@gmail.com


Created by Muki · If you find this useful, consider giving it a ⭐

About

BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.).

Topics

Resources

Stars

58 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages