~/notes / ecu-can-bus-read

2026-02-24🚗 ЭБУ авто1 мин0 просм.

Чтение параметров ЭБУ по CAN-шине через python-can

Что такое OBD-II PID

OBD-II — стандартный диагностический интерфейс, обязательный для всех автомобилей с 2001 года. Через него можно читать параметры двигателя в реальном времени: обороты, температуру, нагрузку и сотни других.

PID (Parameter ID) — числовой код параметра. Например, 0x0C — обороты двигателя, 0x05 — температура охлаждающей жидкости.

Подключение

Нужен ELM327-совместимый адаптер или CAN-интерфейс (например, PEAK PCAN-USB). На Linux socketcan работает из коробки:

sudo ip link set can0 type can bitrate 500000
sudo ip link set up can0

python-can

import can

bus = can.interface.Bus(channel='can0', bustype='socketcan')

# Запрос оборотов двигателя (PID 0x0C)
msg = can.Message(
    arbitration_id=0x7DF,
    data=[0x02, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00],
    is_extended_id=False
)
bus.send(msg)

response = bus.recv(timeout=1.0)
if response:
    rpm = ((response.data[3] * 256) + response.data[4]) / 4
    print(f'RPM: {rpm}')

Расшифровка ответа

ЭБУ отвечает на ID 0x7E8. Формула для каждого PID своя — смотри в стандарте SAE J1979 или на Wikipedia в разделе OBD-II PIDs.

Ограничения

Не все параметры доступны через стандартный OBD-II. Проприетарные данные (адаптация, кодирование блоков) требуют знания протокола конкретного производителя — UDS или KWP2000.