166 lines
4.6 KiB
Markdown
166 lines
4.6 KiB
Markdown
# OBD2 Client для Skoda Kodiaq 2021 на RPi5
|
||
|
||
Python приложение для чтения OBD2 данных через WaveShare 2-CH CAN HAT.
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Конфигурация RPi5
|
||
|
||
### /boot/config.txt
|
||
```
|
||
dtparam=spi=on
|
||
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=23
|
||
```
|
||
|
||
### Инициализация CAN интерфейса
|
||
```bash
|
||
sudo ip link set can0 up type can bitrate 500000
|
||
sudo ifconfig can0 txqueuelen 65536
|
||
```
|
||
|
||
## Использование
|
||
|
||
### Запуск с реальным авто
|
||
```bash
|
||
python -m src.main --interface can0
|
||
```
|
||
|
||
### Только сканирование PID
|
||
```bash
|
||
python -m src.main --interface can0 --scan-only
|
||
```
|
||
|
||
### Тестирование с виртуальным CAN
|
||
```bash
|
||
# Создание виртуального интерфейса
|
||
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
|
||
|
||
```bash
|
||
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`:
|
||
|
||
```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 # Циклический опрос
|
||
│ └── flipper/
|
||
│ ├── protocol.py # UART протокол
|
||
│ ├── pages.py # Генераторы страниц
|
||
│ └── server.py # UART сервер
|
||
├── config.json
|
||
├── requirements.txt
|
||
└── README.md
|
||
```
|