A modern, easy to use, Python ≥3.8 library for interacting with Vehicles via OBDII devices.
This library lets you interact with almost any vehicles through the OBDII (On-Board Diagnostics II) port.
Connect through an OBDII adapter via USB, Bluetooth, WiFi, or Ethernet to monitor sensors, read diagnostic data, retrieve trouble codes, and access a wide range of vehicle information.
Whether you're building:
- A Diagnostic Tool
- A Performance Data Logger
- A Car Maintenance Tracker
- A Custom Dashboard Display
- A Vehicle Option Unlocker
- A Smart Home Vehicle Integration
- A Fleet Management System
- A Real-time Vehicle Health Monitor
- An App to learn about Automotive Systems
- Or any other automotive applications..
The library handles the complexity of vehicle communication and provides the foundation you need for developing your automotive projects.
Python 3.8 or higher is required.
Install from PyPI using pip:
pip install py-obdiiFor more installation options, see the Installation Guide.
from obdii import Connection, at_commands, commands
from obdii.utils.scan import scan_ports
# Find first available OBDII device connected via serial
ports = scan_ports(return_first=True)
if not ports:
raise ValueError("No OBDII devices found.")
# Connect to the adapter
with Connection(ports[0]) as conn:
# Query adapter firmware version
version = conn.query(at_commands.VERSION_ID)
print(f"Version: {version.value}")
# Query vehicle's engine speed (rpm)
response = conn.query(commands.ENGINE_SPEED)
print(f"Engine Speed: {response.value} {response.unit}")More examples in the examples folder and Usage Guide.
You don't need a physical OBDII device to start developing.
You can use the ELM327-Emulator library to simulate an OBDII adapter and vehicle responses.
Install the library with the
simextra options:pip install py-obdii[sim]Start the ELM327-Emulator:
python -m elm -p "REPLACE_WITH_PORT" -s car --baudrate 38400Note
Replace
REPLACE_WITH_PORTwith the serial port of your choice
For platform-specific instructions, see the Emulating a Vehicle guide.
For real-world usage, an ELM327-compatible OBDII adapter is required to connect to your vehicle.
- USB: reliable, plug and play
- Ethernet: reliable
- Bluetooth: wireless, convenient
- WiFi: wireless, mobile compatible
More information on connecting to different adapter types can be found in the Connection Guide.
Almost every vehicle from 2008 onwards should be compatible (CAN Protocols). In future updates additional protocols and olders vehicles will be supported.
| ID | Protocol | Specifications | Supported |
|---|---|---|---|
| 0x01 | SAE J1850 PWM | 41.6 Kbaud | No |
| 0x02 | SAE J1850 VPW | 10.4 Kbaud | No |
| 0x03 | ISO 9141-2 | 5 baud init, 10.4 Kbaud | No |
| 0x04 | ISO 14230-4 KWP | 5 baud init, 10.4 Kbaud | No |
| 0x05 | ISO 14230-4 KWP | fast init, 10.4 Kbaud | No |
| 0x06 | ISO 15765-4 CAN | 11 bit ID, 500 Kbaud | Yes |
| 0x07 | ISO 15765-4 CAN | 29 bit ID, 500 Kbaud | Yes |
| 0x08 | ISO 15765-4 CAN | 11 bit ID, 250 Kbaud | Yes |
| 0x09 | ISO 15765-4 CAN | 29 bit ID, 250 Kbaud | Yes |
| 0x0A | SAE J1939 CAN | 29 bit ID, 250 Kbaud | Yes |
| 0x0B | USER1 CAN | 11 bit ID, 125 Kbaud | Yes |
| 0x0C | USER2 CAN | 11 bit ID, 50 Kbaud | Yes |
For questions start a discussion on Github, for support open an issue. Your feedback and questions are greatly appreciated and will help improve this project !
Thank you for using or contributing to this project.
Follow our updates by leaving a star to this repository !