4.6 KiB
4.6 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 |
--flipper PORT |
Включить Flipper Zero сервер на указанном порту |
--debug |
Включить отладочный вывод |
Интеграция с Flipper Zero
Подключение
RPi5 Flipper Zero
GPIO14 (TX) --------> RX (pin 14)
GPIO15 (RX) <-------- TX (pin 13)
GND ---------- GND (pin 18)
Запуск с Flipper
python -m src.main --interface can0 --flipper /dev/serial0
Страницы на Flipper
| Страница | Тип | Описание |
|---|---|---|
| Live Data | Info | RPM, Speed, Coolant, Throttle, Fuel |
| Statistics | Info | Queries, Success rate, Uptime |
| System Info | Info | IP, CPU temp, Memory, CAN interface |
| Actions | Menu | Reconnect, Clear cache, Reboot, Shutdown |
Управление
- ←/→ - переключение страниц
- ↑/↓ - выбор пункта меню / прокрутка
- OK - подтверждение действия
- Back - отмена / возврат
Поддерживаемые 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 # Циклический опрос
│ └── flipper/
│ ├── protocol.py # UART протокол
│ ├── pages.py # Генераторы страниц
│ └── server.py # UART сервер
├── config.json
├── requirements.txt
└── README.md