# PYOBD is a Python 3 OBD-II diagnostic tool

> PYOBD is a remake of an old Python 2 car diagnostic tool, moved to Python 3 and rebuilt on the python-OBD library so the app auto-detects what a car supports. Its dependencies tell the real story: wxPython 4.2 for the interface, pyserial for the ELM327 link, and tornado pinned at 3.2.1, a release that predates Python 3 support in the package it came from.

**barracuda-fsh/pyobd** — OBD-II compliant automotive diagnostic tool

- Repository: https://github.com/barracuda-fsh/pyobd
- Stars: 1,270 · Forks: 105
- Language: Python
- License: GPL-2.0
- Published: 2026-10-17 · Updated: 2026-10-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/barracuda-fsh-pyobd

## The one part you cannot avoid is the adapter

Before any software question, the README is blunt about hardware. You need an ELM327 adapter, a laptop and a car that supports OBD2, with all cars made in Europe since 2001 and in the USA since 1996 expected to support it.

What that ELM327 is is a small serial-to-OBD bridge, and the difference between a working one and a frustrating one is firmware quality. The README's guidance is that most, if not all, adapters for $10 or more should work, and it lists the ones the author actually tested: the VGate Vlinker FS USB, the OBDPro USB Scantool, the OBDLink SX USB, a Chinese OBD2 1.5 USB, and the VGate iCar Pro over Bluetooth 4.0.

The reasoning behind the price threshold is stated rather than assumed. OBDLink makes good adapters, as does VGate, and their adapters also receive firmware updates, so while they are already very good they keep improving. The author attributes that assessment to three days of reading rather than measurement, which is worth knowing.

For clones, the README gives a specific recommendation: a PIC18F25K80 chip and an FTDI chip for USB, with firmware 1.5 preferred, and notes that even then the firmware is a factor and it is not certain what you will receive. The branded budget option it suggests is the Konnwei KW903 at about $15 including postage, while noting the iCar Pro is better.

USB is recommended over Bluetooth for stability and speed, with wireless described as slower and less reliable. The VLinker FS USB is the top USB recommendation and the Vgate iCAR Pro the top Bluetooth one.

One platform quirk is worth reading before you buy: both USB and Bluetooth adapters work, but under Linux the Bluetooth adapter had to be paired manually via the command line and then connected manually, which the author attributes to buggy Bluetooth GUI managers on Linux.

## Serial port permissions are the real Linux install step

The install instructions are short because the executable is downloaded, and the work is in permissions and drivers.

On Linux you add your user account to the groups that can access USB and serial ports:

```bash
sudo usermod -a -G dialout $USER
sudo usermod -a -G tty $USER
```

The README attaches a note that applies to both the Linux and macOS sections: after running these commands you must log out and log back in, or restart, for it to take effect. That is the step people miss, and the symptom is an adapter that appears in the device list but never connects.

Bluetooth on Linux needs its own packages:

```bash
sudo apt-get install bluetooth bluez blueman
```

The README then corrects a documentation error in its own past, which is a good sign about how the project is maintained. It says `bluez-utils` was used by older Ubuntu releases, and that on current Ubuntu systems the Bluetooth command-line tools including `bluetoothctl` and `rfcomm` come from the `bluez` package.

There is a small naming inconsistency worth knowing: the installation section says you may need to install `libnsl` on Linux if it did not come prepacked, and the running-the-script section says `libsnl`. Those are different strings and neither is a standard Debian package name, so treat that line as unreliable and install what your distribution actually reports as missing.

On Windows the step is a driver rather than a group membership. Download the standalone executable and install the driver for your ELM327 device, with a link provided for the case where your adapter did not come with one.

## Connect, or set the port by hand

The connection procedure is where the README spends more words than the installation does, and the advice is specific.

Run the executable or the script, connect the ELM327 to the computer and to the car's OBD port, set the ignition on without needing to start the engine, and click CONNECT. To connect you go to Configure, select the right port and the right baudrate, and click connect.

The distinction drawn is manual versus AUTO. You can leave it at AUTO and connect, but it will take longer and in some cases will not connect at all. Manual is described as safest and fastest, with AUTO working in most cases. The README then carries an update line stating that automatic port and baud detection should now work every time, which contradicts the paragraph above it and is a fair indication of what to trust.

For Bluetooth you need to pair the adapter once and then connect to it, with the Linux caveat from earlier applying again.

Once connected, data displays, although most sensors show values only when the engine is running. There is one connection quirk named explicitly: if you connect and then turn the engine on, you have to wait a bit for the program to reconnect.

If you connect and then turn the engine on, wait a bit for the program to reconnect.

The interfaces the app offers are listed as TESTS data, SENSORS data, FREEZE FRAME data, displaying and clearing TROUBLE CODES, and live GRAPHS. The README is explicit that it currently only displays live data, with no recording and replay possible.

## Engine only, and that limit is explicit

The scoping note in the README deserves more attention than it usually gets, because it defines what the tool is.

The program only displays the engine data, not airbags, ABS and body control systems. Even if your adapter supports that, you will need a more specialised program for it.

This limit is explicit in the project documentation: more specialised software is needed for those modules.

The upside is that the engine surface is where the useful generic data is. The app can also display freeze frame data.

The other limitation to note is the absence of recording and replay. For a car with an intermittent fault, a tool that shows live data but cannot capture a time series means you either watch the gauges or you reproduce the fault with someone else watching. That is a real gap and the README does not present it as a roadmap item.

There is a To-Do List referenced in the table of contents, which is the place to look for whether recording is planned.

## Two dependency manifests that disagree with each other

The repository contains both a `pyproject.toml` and a `requirements.txt`, and they are not identical, which is worth knowing before you install.

The `pyproject.toml` declares the package as `pyobd2` at version `1.17`, with Python `>=3.8`, GPL-2.0-only, and authors listed as Jure Poljsak and Charles Donour Sizemore, the latter being the original author whose program this is a remake of. Its dependencies are `wxpython~=4.2.1`, `pyserial~=3.5`, `numpy~=1.23`, `tornado~=3.2.1`, `pint==0.20.1`, `pillow==10.4.0` and `six==1.16.0`.

The `requirements.txt` says nearly the same thing with different bounds: `wxpython>=4.2.2,<4.3`, `pyserial==3.5`, `numpy==1.26.4`, `tornado==3.2.1`, `pint==0.20.1`, `pillow==10.4.0` and `six==1.16.0`.

The differences that could bite you are wxPython, where one file allows 4.2.1 and the other requires at least 4.2.2, and numpy, where one allows the 1.23 series and the other pins 1.26.4 exactly. The README's script instructions use the requirements file:

```bash
pip install -r requirements.txt
```

and then run the script with `python3 pyobd.py`.

The dependency that most deserves comment is tornado pinned at 3.2.1 in both files. Whether the app uses tornado or inherits it from the original program is not explained in the README.

## Maintenance, packaging and history

The repository is not archived and the last push was on 2026-06-26, a little under four months before today.

The release history is old by open source standards. The recent releases are v1.19 on 2024-09-02, v1.18 on 2024-08-04 and v1.17-2 on 2024-06-10. So the last tagged release is about two years old while commits continue, and the package version in `pyproject.toml` is still `1.17`, which does not match the v1.19 tag. That mismatch means the metadata describes an older state than the repository.

The origin story is worth restating because it explains the dependency choices. The program was originally made by Donour Sizemore a long time ago, was not operational for the last 15 years, and was upgraded from Python 2 to Python 3 with new libraries to make it work again. After that the fixed commands were deleted and the Python-OBD library was used instead, which supports far more commands and auto-detects what a car's computer supports, so it displays much more data than before.

That replacement of hardcoded commands with the python-OBD library is the single most important functional change in the project's history. A tool with a fixed command list can only read a fixed set of sensors on a fixed set of cars; one that asks the ECU what it supports can read what that car actually has.

Licensing is GPL-2.0, with `license = "GPL-2.0-only"` in the manifest and a `COPYING` file at the repository root.

Packaging is manual rather than distributed through an index. The install instructions are download the standalone executable, and the table of contents has a Creating the Executable section for all three platforms. The repository has a `requirements/` directory alongside `requirements.txt`, and a `pyproject.toml` with a setuptools and wheel build backend, so a package build is possible but the documented path is a downloaded binary.

## Conclusion

PYOBD fits a hobbyist who owns an ELM327 adapter, wants a desktop tool for engine data and trouble codes, and does not want to sign up for a vehicle manufacturer's paid subscription. Do not adopt it for modules beyond the engine, because the README states it shows engine data only and you need a more specialised program for airbags, ABS and body control systems. Verify first whether your adapter's firmware and chip actually work, since the README's own recommendation is a $10-or-more adapter rather than the cheapest clone, and confirm your serial port and baud rate manually rather than relying on auto-detection.

## FAQ

### What hardware do I need to run PYOBD?

An ELM327 adapter, a laptop and a car supporting OBD2, which the README expects in all cars made in Europe since 2001 and in the USA since 1996. The README recommends an adapter costing $10 or more and lists tested models including the VGate Vlinker FS USB and OBDLink SX USB.

### How do I run PYOBD on Linux?

Download the standalone executable and add your user to the dialout and tty groups with `sudo usermod -a -G dialout $USER` and `sudo usermod -a -G tty $USER`, then log out and back in for it to take effect. Bluetooth adapters additionally need `sudo apt-get install bluetooth bluez blueman`.

### Does PYOBD show airbag or ABS data?

No. The README states the program only displays engine data, not airbags, ABS and body control systems, and that even if the adapter supports it you need a more specialised program for those.

### Can PYOBD record and replay diagnostic data?

Not currently. The README says it only displays live data, with no recording and replay possible. It does show TESTS data, SENSORS data, FREEZE FRAME data, trouble codes and live graphs.

### How do I install PYOBD from source on Windows?

Install Python 3, run `pip install -r requirements.txt`, then execute the script with `python3 pyobd.py`. The dependencies include wxPython, pyserial, numpy, tornado 3.2.1, pint, pillow and six.

### What license is PYOBD released under?

GPL-2.0, with `license = "GPL-2.0-only"` in pyproject.toml and a COPYING file at the repository root. The package is declared as pyobd2 at version 1.17, while the latest tag is v1.19 from 2024-09-02.

## Sources

- [barracuda-fsh/pyobd on GitHub](https://github.com/barracuda-fsh/pyobd)
- [Issues](https://github.com/barracuda-fsh/pyobd/issues)
- [License: GPL-2.0](https://github.com/barracuda-fsh/pyobd/blob/main/LICENSE)
- [README](https://github.com/barracuda-fsh/pyobd/blob/main/README.md)
- [Releases](https://github.com/barracuda-fsh/pyobd/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/barracuda-fsh-pyobd
