Files
carpibord/obd2_client
2026-01-29 22:37:59 +03:00
..
2026-01-29 22:37:59 +03:00
2026-01-29 22:37:59 +03:00
2026-01-29 22:37:59 +03:00

OBD2 Client для Skoda Kodiaq 2021 на RPi5

Python приложение для чтения OBD2 данных через WaveShare 2-CH CAN HAT.

Установка

pip install -r requirements.txt

Конфигурация RPi5

/boot/config.txt

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=23

Инициализация CAN интерфейса

sudo ip link set can0 up type can bitrate 500000
sudo ifconfig can0 txqueuelen 65536

Использование

Запуск с реальным авто

python -m src.main --interface can0

Только сканирование PID

python -m src.main --interface can0 --scan-only

Тестирование с виртуальным CAN

# Создание виртуального интерфейса
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

# Запуск клиента
python -m src.main --interface vcan0 --virtual

Параметры командной строки

Параметр Описание
-i, --interface CAN интерфейс (can0, vcan0)
-c, --config Путь к config.json
-v, --virtual Использовать виртуальный CAN
--scan-only Только сканировать PID
--debug Включить отладочный вывод

Поддерживаемые PID

PID Параметр Единицы
0x04 Engine Load %
0x05 Coolant Temp °C
0x0C Engine RPM RPM
0x0D Vehicle Speed km/h
0x0F Intake Air Temp °C
0x10 MAF Rate g/s
0x11 Throttle Position %
0x2F Fuel Level %
0x5C Oil Temperature °C

Конфигурация

Файл config.json:

{
  "can": {
    "interface": "can0",
    "bitrate": 500000,
    "virtual": false
  },
  "obd2": {
    "request_id": "0x7DF",
    "response_id": "0x7E8",
    "timeout": 0.1
  },
  "polling": {
    "interval_fast": 0.1,
    "interval_slow": 1.0,
    "fast_pids": ["0x0C", "0x0D", "0x11"],
    "slow_pids": ["0x05", "0x2F", "0x5C"]
  }
}

Переменные окружения

  • OBD2_CONFIG_PATH - путь к config.json
  • OBD2_CAN_INTERFACE - CAN интерфейс
  • OBD2_CAN_BITRATE - битрейт
  • OBD2_CAN_VIRTUAL - использовать виртуальный CAN (true/false)
  • OBD2_TIMEOUT - таймаут ответа

Структура проекта

obd2_client/
├── src/
│   ├── __init__.py
│   ├── main.py          # Точка входа, CLI
│   ├── config.py        # Конфигурация
│   ├── logger.py        # Логирование
│   ├── can/
│   │   ├── frame.py     # CAN фрейм dataclass
│   │   └── interface.py # Абстракция CAN шины
│   ├── obd2/
│   │   ├── pids.py      # Определения PID
│   │   ├── protocol.py  # OBD2 запросы/ответы
│   │   └── scanner.py   # Автодетект PID
│   └── vehicle/
│       ├── state.py     # Состояние авто
│       └── poller.py    # Циклический опрос
├── config.json
├── requirements.txt
└── README.md