3.4 KiB
3.4 KiB
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.jsonOBD2_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