— Developer Tools

Free OBD-II PID Decoder

Paste an ELM327 session or raw OBD-II responses to turn hex bytes into speeds, temperatures, trouble codes and the VIN.

— Samples
Responses 7Trouble codes 1Valid
Live

What is an OBD-II PID Decoder?

Every car sold in the US since 1996 and in Europe since 2001 answers OBD-II requests. An ELM327 adapter prints the answers as hex, such as 41 0C 1A F8, and this decoder turns them into readable values: 1726 rpm, in that case.

It reads requests, responses, ELM327 status lines, CAN headers and multi-frame replies, then applies the SAE J1979 formula for each PID. Trouble codes from services 03, 07 and 0A become P, C, B and U codes, and the VIN is reassembled from its ISO-TP frames.

Key Features

Values With Units

Engine speed, speed, temperatures, pressures, fuel trims, voltages, distances and more from service 01 and 02.

The Formula Shown

Bytes and formulas lists A, B, C and D and the J1979 formula that makes each value.

Trouble Codes

Stored, pending and permanent codes decoded to P0133 style, plus the check engine light state.

Whole Sessions

Requests, NO DATA and other ELM327 lines, CAN headers and multi-frame VIN replies in one paste.

Stays on Your Computer

Your session, including the VIN, is decoded in your browser and never uploaded.

Perfect for everyone

  • DIY mechanics
  • Car app developers
  • ELM327 tinkerers
  • Students learning vehicle diagnostics

How to Use the OBD-II PID Decoder

Copy the session from your terminal or app and paste it in.

1

Connect the Adapter

Plug the ELM327 into the OBD-II port, turn the ignition on, and open a serial terminal.

2

Send Requests

Type requests such as 010C for engine speed. The adapter prints each response on its own line.

3

Paste the Session

Paste requests and responses together. AT commands are skipped.

4

Read or Check Formulas

Decoded explains every line, and Bytes and formulas shows how each number is worked out.

Worked Examples

OBD-II Responses, Decoded

Each row is part of an ELM327 session, with requests marked by the > prompt, and each answer is this decoder’s output in the mode on the chip.

REF_001Engine speed

“>010C 41 0C 1A F8”

REF_002Bytes and formulas

“41 0C 1A F8 41 42 37 2E”

REF_003Coolant and intake air temperature

“>0105 41 05 7B >010F 41 0F 44”

REF_004Which PIDs the car supports

“41 00 BE 3F A8 13”

REF_005Check engine light status

“>0101 41 01 81 07 65 04”

REF_006A stored trouble code

“>03 43 01 01 33”

REF_007Odometer with CAN headers on

“7E8 06 41 A6 00 01 E2 40”

REF_008A VIN over several frames

“>0902 014 0: 49 02 01 31 46 54 1: 46 57 31 45 54 35 44 2: 46 41 31 32 33 34 35”

REF_009Fuel type and OBD standard

“>0151 41 51 01 >011C 41 1C 06”

REF_010No data and a negative response

“>012F NO DATA 7F 01 31”

OBD-II Services

The Ten OBD-II Services

The first byte of a request picks a service, also called a mode. A response adds 0x40, so a service 01 answer starts with 41.

01 / 01

01 Current Data

Live values such as engine speed, coolant temperature and vehicle speed, one PID per request.

“What does a 01 response start with?”

02 / 02

02 Freeze Frame

The same PIDs as service 01, frozen at the moment a trouble code was stored.

“When is the freeze frame captured?”

03 / 03

03 Stored Codes

Confirmed trouble codes, the ones that turn on the check engine light.

“What does 43 01 01 33 hold?”

04 / 04

04 Clear Codes

Clears stored codes and freeze frames and turns the light off. Readiness monitors reset too.

“What does service 04 reset besides codes?”

05 / 05

05 Oxygen Sensors

Oxygen sensor test results on older non-CAN cars. CAN cars report these through service 06.

“Do CAN cars use service 05?”

06 / 06

06 Monitor Tests

Results of the on-board monitoring tests, with limits, for catalysts, EGR and more.

“What does service 06 report?”

07 / 07

07 Pending Codes

Faults seen once but not yet confirmed. They can turn into stored codes on the next drive cycle.

“Do pending codes light the MIL?”

08 / 08

08 Control

Asks the car to run a test, such as an evaporative system leak check.

“What does service 08 do?”

09 / 09

09 Vehicle Info

The VIN, calibration IDs and other identifiers, often across several frames.

“Which PID returns the VIN?”

10 / 0A

0A Permanent Codes

Codes that only the car can clear, after it confirms the fault has gone.

“Can a scan tool clear them?”

PIDs Worth Knowing

A car supports dozens of PIDs, but a few do most of the work in apps and dashboards. These are the ones to request first, with the formula behind each.

0C Engine Speed

Two bytes, (256A+B)/4 rpm. The most requested PID of all, and a good first test of a connection.

0D Vehicle Speed

One byte, A km/h. Convert to mph yourself, as the car always reports metric.

05 Coolant Temperature

One byte, A−40 °C, so 7B is 83 °C. Engines run around 85 to 105 °C when warm.

04 Engine Load

One byte, A×100/255 percent, showing how hard the engine is working right now.

06 to 09 Fuel Trims

One byte each, (A−128)×100/128 percent. Large positive trims point to vacuum leaks or weak fuel delivery.

42 Module Voltage

Two bytes, (256A+B)/1000 V. Around 14 V means the alternator is charging.

A6 Odometer

Four bytes in tenths of a kilometre, added in later J1979 revisions and missing from older cars.

ELM327 Commands and Replies

ELM327 adapters wrap OBD-II in a small command language. These lines show up in almost every session and change what the responses look like when you paste them here.

Tip 01

ATZ

Resets the adapter, which answers with its version banner such as ELM327 v1.5.

Tip 02

ATSP0

Sets the protocol to automatic, so the adapter searches until the car answers. SEARCHING appears the first time.

Tip 03

ATH1 and ATH0

Turn CAN headers on or off. With headers on, each response starts with an ID such as 7E8 and a length byte.

Tip 04

ATE0

Turns echo off, so your requests aren’t repeated in the output. Pasted requests still decode fine.

Tip 05

NO DATA

The car didn’t answer, usually because it doesn’t support that PID. Check the supported PID bitmaps first.

Tip 06

Multi-Frame Lines

Long replies such as the VIN arrive as a length line, then 0:, 1:, 2: frames that this decoder joins.

Tip 07

Clones

Cheap clones often report v1.5 while implementing less. Odd behaviour is usually the adapter, not the car.

How a Trouble Code Is Built

Two bytes become a five-character code such as P0133. Each character is a field of its own, and knowing them lets you read an unfamiliar code before looking it up.

The Letter

The top two bits pick the system: P for powertrain, C for chassis, B for body and U for network.

Generic or Manufacturer

The next digit is 0 or 2 for codes defined by SAE, and 1 or 3 for manufacturer-specific codes.

The Subsystem

The third character narrows it down, such as 1 for fuel and air metering or 3 for ignition.

The Fault

The last two characters identify the exact fault, such as 33 in P0133, a slow oxygen sensor response.

Count Byte on CAN

Over CAN, a 43 response starts with the number of codes, which this decoder skips before reading pairs.

OBD-II Pitfalls

What usually goes wrong when reading OBD-II data.

Tip 01

Not Every PID Exists

Cars support different PIDs. Request 0100, 0120 and 0140 first to see which ones answer.

Tip 02

Metric Only

Speeds are km/h and temperatures are °C, whatever the dashboard shows.

Tip 03

Headers Change the Bytes

With ATH1 the first bytes are the ECU ID and length, not data. This decoder strips them.

Tip 04

Several ECUs Answer

Engine and transmission modules can both reply to one request, giving two lines with different IDs.

Tip 05

Clearing Codes Hides Problems

Service 04 resets readiness monitors, so an inspection right after will fail.

Tip 06

Manufacturer Data Is Elsewhere

Brand-specific values use service 22 with UDS, which OBD-II PIDs don’t cover.

When to Decode OBD-II Responses

Whenever an adapter has given you hex and you want the numbers.

Checking a Check Engine Light

Read the stored code and the monitor status before deciding whether a repair can wait.

Building a Car App

Confirm your formulas match J1979 by pasting the raw responses your app received.

Debugging an Adapter

See whether NO DATA, SEARCHING or a negative response is behind missing values.

Buying a Used Car

Check the monitor status and time since codes were cleared, which can reveal a freshly reset light.

Learning Diagnostics

Work out values by hand, then check them against the bytes and formulas view.

Frequently Asked Questions