Files
carpibord/obd2_client/README.md

4.6 KiB
Raw Blame History

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.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