⌨️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

Die Beispiel-Sitzung zeigt die typische Initialisierung, wie sie Diagnose-Apps durchführen. Grüne Kommentare erklären Mode-01-Antworten.
EchoHeaderLeerzeichenProtokoll auto
# Simulierter ELM327 an einem synthetischen Fahrzeug (CAN 11 Bit/500 kbit/s). Befehl eingeben oder Demo starten.
>▌

📖Wichtige AT-Befehle

ATZReset – Adapter startet neu und meldet seine Version
ATIVersionskennung anzeigen
AT@1Gerätebeschreibung anzeigen
ATE0 / ATE1Echo aus/an (Programme schalten das Echo fast immer aus)
ATL0 / ATL1Zeilenvorschub nach CR aus/an
ATS0 / ATS1Leerzeichen zwischen den Bytes aus/an
ATH0 / ATH1Header (CAN-ID) und PCI-Byte ausblenden/anzeigen
ATSP0Protokoll automatisch suchen (ATSP6 = fest CAN 11 Bit/500 kbit/s)
ATDP / ATDPNAktuelles Protokoll als Text / als Nummer
ATRVSpannung an Pin 16 (Bordnetz) lesen
ATSH 7E0Header setzen – Anfragen physikalisch an ein Steuergerät statt an 0x7DF
ATCAF0 / 1CAN Auto-Formatting (PCI-Byte automatisch) aus/an
ATDAlle Einstellungen auf Standardwerte

Protokollnummern (ATSPn)

0Automatisch
1SAE J1850 PWM (41,6 kbit/s)
2SAE J1850 VPW (10,4 kbit/s)
3ISO 9141-2 (5-Baud-Init, 10,4 kbit/s)
4ISO 14230-4 KWP (5-Baud-Init, 10,4 kbit/s)
5ISO 14230-4 KWP (Fast Init, 10,4 kbit/s)
6ISO 15765-4 CAN (11 Bit, 500 kbit/s)
7ISO 15765-4 CAN (29 Bit, 500 kbit/s)
8ISO 15765-4 CAN (11 Bit, 250 kbit/s)
9ISO 15765-4 CAN (29 Bit, 250 kbit/s)
ASAE 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.

⚠️ Klone
Viele billige Adapter sind Nachbauten, die sich z. B. als „v1.5“ melden (eine Version, die Elm Electronics nie veröffentlicht hat) und nicht alle Befehle beherrschen. Ein dauerhaft steckender Adapter kann außerdem die Batterie entladen und ist ein offener Zugang zum Fahrzeug.

🐍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
         uds

Senden auf einem echten Fahrzeugbus kann Steuergeräte stören. Üben am besten mit vcan0 oder einem Testaufbau – siehe „UDS & Sicherheit“.