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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - muki01/I-K_Bus: BMW I-Bus / K-Bus communication and control with microcontrollers (ESP32, Arduino, etc.). · GitHub
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 starsGitHub forksGitHub Issues or Pull RequestsGitHub LicenseGitHub last commitArduinoESP32BMW


🌟 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:

ByteFieldDescription
0SourceSender module ID
1LengthNumber of bytes from Destination to Checksum
2DestinationTarget module ID
3 … n-1DataCommand byte + payload
nChecksumXOR of all preceding bytes

📡 Supported BMW Models

ModelSeriesPeriodI-BusK-Bus
E318 Series1989–1999
E387 Series1999–2001
E395 Series1995–2004
E463 Series1997–2006
E52Z82000–2003
E53X51999–2006
E83X32003–2010
E85Z42002–2008
E871 Series2004–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 libraryBMW 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 & ReadersLibrariesManufacturer ProtocolsUI
OBD2 K-line ReaderOBD2 K-Line LibraryBMW I/K BusOBD2 Diagnostic UI
OBD2 CAN Bus ReaderOBD2 CAN Bus LibraryVAG 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 CoffeePayPalGitHub 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

55 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages