⌨️ELM327 und Werkzeuge
Der ELM327 (Elm Electronics) ist ein Mikrocontroller, der alle OBD-Protokolle spricht und sie über eine serielle Textschnittstelle anbietet: AT-Befehle konfigurieren den Adapter, Hex-Zeichenketten gehen als Anfrage ans Fahrzeug.
🖥️Terminal-Simulation
📖Wichtige AT-Befehle
| ATZ | Reset – Adapter startet neu und meldet seine Version |
| ATI | Versionskennung anzeigen |
| AT@1 | Gerätebeschreibung anzeigen |
| ATE0 / ATE1 | Echo aus/an (Programme schalten das Echo fast immer aus) |
| ATL0 / ATL1 | Zeilenvorschub nach CR aus/an |
| ATS0 / ATS1 | Leerzeichen zwischen den Bytes aus/an |
| ATH0 / ATH1 | Header (CAN-ID) und PCI-Byte ausblenden/anzeigen |
| ATSP0 | Protokoll automatisch suchen (ATSP6 = fest CAN 11 Bit/500 kbit/s) |
| ATDP / ATDPN | Aktuelles Protokoll als Text / als Nummer |
| ATRV | Spannung an Pin 16 (Bordnetz) lesen |
| ATSH 7E0 | Header setzen – Anfragen physikalisch an ein Steuergerät statt an 0x7DF |
| ATCAF0 / 1 | CAN Auto-Formatting (PCI-Byte automatisch) aus/an |
| ATD | Alle Einstellungen auf Standardwerte |
Protokollnummern (ATSPn)
| 0 | Automatisch |
| 1 | SAE J1850 PWM (41,6 kbit/s) |
| 2 | SAE J1850 VPW (10,4 kbit/s) |
| 3 | ISO 9141-2 (5-Baud-Init, 10,4 kbit/s) |
| 4 | ISO 14230-4 KWP (5-Baud-Init, 10,4 kbit/s) |
| 5 | ISO 14230-4 KWP (Fast Init, 10,4 kbit/s) |
| 6 | ISO 15765-4 CAN (11 Bit, 500 kbit/s) |
| 7 | ISO 15765-4 CAN (29 Bit, 500 kbit/s) |
| 8 | ISO 15765-4 CAN (11 Bit, 250 kbit/s) |
| 9 | ISO 15765-4 CAN (29 Bit, 250 kbit/s) |
| A | SAE J1939 CAN (29 Bit, 250 kbit/s) |
Antworten wie NO DATA (keine Antwort), UNABLE TO CONNECT, CAN ERROR oder ? (Befehl unbekannt) kommen vom Adapter selbst, 7F xx 11 dagegen vom Steuergerät (negative Antwort: Service nicht unterstützt).
📶Adapter: Bluetooth, WLAN, USB
🔵 Bluetooth Classic
Serielles Profil (SPP), gut mit Android-Apps. iOS unterstützt SPP nicht – dort braucht es WLAN- oder Bluetooth-LE-Adapter.
📶 WLAN
Der Adapter spannt ein eigenes Netz auf und bietet eine TCP-Verbindung an (feste Adresse und Port je nach Gerät, siehe Handbuch).
🔌 USB
Erscheint als serielle Schnittstelle (z. B. /dev/ttyUSB0), am zuverlässigsten für Laptop und python-OBD.
🐍Werkzeuge
python-OBD
Python-Bibliothek, die über einen ELM327 abfragt und in Einheiten umrechnet.
import obd
connection = obd.OBD() # sucht den Adapter
r = connection.query(obd.commands.RPM)
print(r.value) # z. B. 780.0 revolutions_per_minute
r = connection.query(obd.commands.GET_DTC)
print(r.value) # [("P0301", "...")]SocketCAN (Linux)
CAN-Schnittstellen als Netzwerkgeräte, Werkzeuge aus can-utils. Zum Üben ohne Hardware: virtuelles vcan0.
# virtuelle Schnittstelle zum Üben sudo modprobe vcan sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0 # echte Schnittstelle, 500 kbit/s sudo ip link set can0 up type can bitrate 500000 candump -t z vcan0 # mitlesen cansend vcan0 7DF#02010C0000000000
Wireshark
Zeichnet SocketCAN-Schnittstellen direkt auf und dekodiert CAN, ISO-TP (ISO 15765) und UDS. Ideal, um Multi-Frame-Antworten wie die VIN zusammengesetzt zu sehen.
Filter: can.id == 0x7e8
iso15765
udsSenden auf einem echten Fahrzeugbus kann Steuergeräte stören. Üben am besten mit vcan0 oder einem Testaufbau – siehe „UDS & Sicherheit“.