Skip to content

edgeimpulse/obd-automotive-data

Repository files navigation

OBD Automotive Data Capture

Created as part of the Webinar Webinar Anomaly Detection Anywhere: Edge AI Diagnostics Meets Satellite IoT

This repo includes two scripts to capture automotive data as CSV for upload and another to run inference or forward the results to a dashboard for integration.

Screen.Recording.2025-09-04.at.13.20.40.mov
Screen.Recording.2025-09-04.at.13.16.38.mov

The scenario and car used for this example is a simulated air leak for the unhealthy condition simulated by disconnedting the intake sensor or vacume line:

image
  • simulating the airleak by disrupting the intake airflow measurements, disconnect the MAF sensor or a vaccume line.
image
  • Capture OBD-II data from an ELM327 (USB or Bluetooth/RFCOMM) into a CSV that Edge Impulse can ingest.
image
  • Replay a CSV through an Edge Impulse .eim model and print predictions (top-k per window).

    image
  • Usinging the Python-OBD library for integration

Install Steps

# 0) System packages (Raspberry Pi OS / Debian/Ubuntu)
sudo apt update
sudo apt install -y python3-venv python3-pip bluez rfcomm

# (optional) If edge_impulse_linux import complains about audio/camera deps
# sudo apt install -y portaudio19-dev    # enables pip install pyaudio later

# 1) Create a virtualenv (avoids PEP 668 / system pip issues)
python3 -m venv ~/.venvs/ei
source ~/.venvs/ei/bin/activate
pip install --upgrade pip wheel

# 2) Install Python deps
pip install edge_impulse_linux numpy pyserial
pip install "opencv-python>=4.5.1.48,<5"
pip install pyaudio

# reboot or log out/in to apply

Bluetooth Classic (if you’ll use an ELM327 over BT/RFCOMM):

# Pair & trust in bluetoothctl (PIN is often 1234 or 0000 on ELM clones)
bluetoothctl
# power on
# agent on
# scan on
# pair XX:XX:XX:XX:XX:XX
# trust XX:XX:XX:XX:XX:XX
# connect XX:XX:XX:XX:XX:XX
# quit

# Bind RFCOMM channel 1 to a TTY
sudo rfcomm bind 0 XX:XX:XX:XX:XX:XX 1
# You now have /dev/rfcomm0 for the capture script

Capture from USB

# Find the device (easiest to use the by-id path)
ls -l /dev/serial/by-id

# Capture at 2 Hz for 2 minutes (AUTO protocol)
python3 collect_obd_data.py \
  --port /dev/ttyUSB0 --baud 38400 --proto 0 \
  --hz 2 --label healthy --outfile obd_healthy.csv --duration-s 120

Capture from Bluetooth

 Pair / trust in bluetoothctl (PIN often 1234 or 0000), then:
sudo rfcomm bind 0 XX:XX:XX:XX:XX:XX 1

python3 collect_obd_data.py \
  --port /dev/rfcomm0 --baud 115200 --proto 0 \
  --hz 2 --label healthy --outfile obd_bt.csv --duration-s 120

Replay the captured CSV to run inference

python3 play_csv_to_eim.py \
  --model ./your_model.eim \
  --csv ./obd_healthy.csv \
  --axes "RPM [RPM],PEDAL INPUT [%],MAF [g/s],NOx [ppm]" \
  --hz 2 --window-ms 1000 --step-ms 1000 \
  --print-topk 2 --out-jsonl predictions.jsonl

Cron job to run on a pi for BMW used in the webinar

crontab -e

paste the following

# m h  dom mon dow   command
@reboot /home/pi/start_obd_logger.sh >> /home/pi/obd_logs/boot.log 2>&1

ctrl+x save

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages