OBD-II UART Adapter for Arduino
This product works as an OBD-II to serial UART data bridge with open-source Arduino library provided. Besides providing OBD-II data access, it also provides power supply (converted and regulated from OBD-II port) for Arduino and its attached devices. The adapter can also be used in other embedded systems with serial UART interface.
Features
- Directly pluggable into vehicle’s OBD-II port
- Providing serial UART interface for Arduino
- Providing 5V DC power supply (up to 500mA) with reverse protection
- Supporting CAN bus (used by most modern cars) as well as J1939, J1850, ISO 9141 etc.
- Accessing all OBD-II PIDs available in the vehcile ECU
- 3-axis accelerometer, 3-axis gyro and temperature sensors embedded inside (model B only)
- Extendable and actively maintained Arduino library and example sketches provided
The model B has an additional MPU6050 module embedded inside the case, providng additional accelerometer, gyro and temperature sensor accessible via I2C. The accelerometer can be used for measuring car’s acceleration and steering G-force. The gyroscope can be used for measuing car’s orientation without GPS.
The model B has 3 connectors at the end of the cable (whereas the model A has 2) including the additional SDA/SCL connector.
When the adapter is plugged and locked in the car’s OBD-II port, the MPU6050 module inside the case will always stay static to the car body, so the sensor data can reflect the movement of the car accurately. A programming guide using this module is available in the official Arduino playground.
Compatibility
The adapter stays plugged into the OBD port usually located under the steering column or slightly to the left of it. It supports the following countries and year of manufacture:
- United States (Gas) 1996+
- United States (Diesel) 2004+
- Canada (Gas) 1998+
- Europe + UK (Gas) 2001+
- Europe + UK (Diesel) 2004+
- Australia + NZ (Gas/Diesel) 2006+
Vehicles made prior to the dates above may still be OBDII certified. To check if your vehicle is OBD-II certified, open your hood and find the sticker that looks like this:
The adapter is 100% compatible with various Arduino models including Arduino UNO, Arduino Duemilanove, Arduino Leonardo, Arduino Micro, Arduino Nano, Arduino Mini, Arduino Pro Mini, Arduino MEGA 1280/2560/ADK. Most other 5V-based Arduino variants with serial UART are also supported.
Getting Started
The adapter stays plugged into the OBD port usually located under the steering column or slightly to the left of it.

A cable comes out from the adapter and splits into 2 connectors (3 connectors for model B) at the end, which are power connector (VCC/GND), OBD-II data connector (Rx/Tx) and additional I2C sensor connector (SDA/SCL) for model B. They can be connected to Arduino with onboard breakout pins or breakout shield. Your Arduino device will look tidy in car with only one connected cable.

Power Connector:
- Red: VCC (connecting to Arduino’s VCC)
- Black: GND (connecting to Arduino’s GND)
OBD-II Data Connector:
- White: Tx (connecting to Arduino’s UART Rx / D0)
- Green: Rx (connecting to Arduino’s UART Tx / D1)
Sensor Connector: (model B only)
- Grey: SDA
- Brown/White: SCL
The Library
A dedicated Arduino library is developed and maintained, providing a set of easy-to-use APIs to retrieve realtime data from a vehicle.
Here is an example code of a simplest engine RPM indicator, which uses the pin 13 LED (built in every Arduino board) to indicate whether the engine is above 5000rpm.
#include <OBD.h>
COBD obd;
void setup()
{
// we'll use the debug LED as output
pinMode(13, OUTPUT);
// start serial communication at the default adapter baudrate
Serial.begin(OBD_SERIAL_BAUDRATE);
// initiate OBD-II connection until success
while (!obd.Init());
}
void loop()
{
int value;
// save engine RPM in variable 'value', return true on success
if (obd.ReadSensor(PID_RPM, value)) {
// light on LED on Arduino board when the RPM exceeds 5000
digitalWrite(13, value > 5000 ? HIGH : LOW);
}
}
In current version of the library, following PIDs are defined:
- Vehicle speed (PID_SPEED)
- Engine RPM (PID_RPM)
- Throttle position (PID_THROTTLE)
- Calculated Engine load (PID_ENGINE_LOAD)
- Absolute Engine load (PID_ABS_ENGINE_LOAD)
- Engine coolant temperature (PID_COOLANT_TEMP)
- Intake temperature (PID_INTAKE_TEMP)
- Intake MAP (PID_INTAKE_PRESSURE)
- MAF flow pressure (PID_MAF_FLOW)
- Fuel pressure (PID_FUEL_PRESSURE)
- Fuel level (PID_FUEL_LEVEL)
- Barometric pressure (PID_BAROMETRIC)
- Ignition timing advance (PID_TIMING_ADVANCE)
- Engine running time (PID_RUNTIME)
- Vehicle running distance (PID_DISTANCE)
Additional defines can be added to access all OBD-II PIDs which the car’s ECU provides.
The complete source code of the library and examples is hosted on GitHub.
Kits & Applications
Arduino OBD-II Data Logger Kits
To make it even easier to get started with the OBD-II adapter especially for perform some data logging, several kits for are available here.

Some other interesting applications
By having access to these data, an Arduino can store, compute and show the realtime vehicle status in any unique way you can think of. Here are some of my works done with Arduino and the OBD-II adapter.

FAQ
Q: Does my Arduino needs power from somewhere in the car?
A: The adapter provides regulated 5V DC output to provide power for Arduino. Your Arduino can be powered by connecting the adapter’s VCC/GND connector to Arduino’s 5V and GND pins, so no extra power input is needed.
Q: Do I need a CAN bus shield to use with the adapter?
A: Definitely no. The adapter retrieves data from CAN bus, like a CAN bus shield does and convert the more complicated CAN bus interface to simple serial UART interface which Arduino and most embedded systems are easy to access. The data connection is provided by adapter’s data connector (Rx and Tx).
Q: How do I connect the adapter with my Arduino?
A: The adapter works with all models of Arduino with the dedicated Arduino library and is connected with Arduino by connecting adapter’s Tx to Arduino’s Rx (D0) and adapter’s Rx to Arduino’s Tx (D1). If you want to connect and disconnect the adapter with your Arduino effortlessly, it’s recommended to use a common I/O breakout shield or use an Arduino board with breakout pins for Rx/Tx/VCC/GND.
Q: Is the power provided by the adapter always available in car?
A: This depends on whether the OBD-II port of your car still has power after ignition is off. Actually it is so with most cars.
Product Gallery
Support
For seeking support, please visit this forum. You can post your inquries or questions there and they will be replied soon.
User Feedbacks
Just wanted to let you know that I got the adapter today and took it for a spin on the race car. Worked great out of the box!
Haven’t tried the accelerometer/gyro yet or the legacy protocols but will do that in a couple weeks.Thanks
Brian Calder @ Bluefire Racing
2005 Mustang GT
#404 NASA Texas American Iron
www.bluefireracing.com
After looking around online I found a OBD2 Arduino kit here. I also decided to use a 3.2″ TFT LCD Touch Shield Mega for Arduino and a Arduino MEGA 2560 Board.
I have started off by building the home screen to display the data from the engine management system, this includes RPM, Speed, Coolant / Intake Temperature and Fuel / Intake pressure.
More…
News and Updates
[6/6/2013] The OBD-II adapter model B is put on sale in DFRobot Online Store
[4/15/2013] The OBD-II adapter model B is available for order
[3/12/2013] This product is now officially available in DFRobot Online Store
OBD-II UART Adapter for Arduino
- Size: 72x48x28 mm
- Weight: 70g
- Cable Length: 1.2m
- Free worldwide shipping!
LCD Shield for Arduino
- 84×48 pixels display with backlight
- 5 DOF joystick and reset button
- A rich set of pinout (including UART)
- Stackable to Arduino board
- Digital dashboard sketch
- Bright monochrome 128×64 pixels
- 3.3v or 5v input
- Built-in 8×16 font
- I2C interface
- Supported by MultiLCD library
LCD1602 Shield for Arduino
- 16×2 characters display with blue backlight
- Display contrast adjustable
- 5 buttons available (connected with A0)
- Supported by MultiLCD library
GPS Receiver for Arduino
- SIRF 3 (1Hz)
- U-BLOX (5Hz)
- MTK3329 (10Hz)
- TTL UART interface
- Working with Arduino TinyGPS library
- Built-in ceramic antenna
- Size:42x21x10 mm
- Weight: 65g
Shipping
The ordered items can be shipped worldwide and will be delivered to you in 7-14 days depending on your location with a flat shipping fee (no matter how many items you order).
If you have any special requirements (e.g. alternative connector pin order, longer cable), please leave it as order comment or directly email to me with the PayPal address you see when making an order.














