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.
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.
Connect the Adapter
Plug the ELM327 into the OBD-II port, turn the ignition on, and open a serial terminal.
Send Requests
Type requests such as 010C for engine speed. The adapter prints each response on its own line.
Paste the Session
Paste requests and responses together. AT commands are skipped.
Read or Check Formulas
Decoded explains every line, and Bytes and formulas shows how each number is worked out.
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.
“>010C 41 0C 1A F8”
“41 0C 1A F8 41 42 37 2E”
“>0105 41 05 7B >010F 41 0F 44”
“41 00 BE 3F A8 13”
“>0101 41 01 81 07 65 04”
“>03 43 01 01 33”
“7E8 06 41 A6 00 01 E2 40”
“>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”
“>0151 41 51 01 >011C 41 1C 06”
“>012F NO DATA 7F 01 31”
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 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 Freeze Frame
The same PIDs as service 01, frozen at the moment a trouble code was stored.
“When is the freeze frame captured?”
03 Stored Codes
Confirmed trouble codes, the ones that turn on the check engine light.
“What does 43 01 01 33 hold?”
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 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 Monitor Tests
Results of the on-board monitoring tests, with limits, for catalysts, EGR and more.
“What does service 06 report?”
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 Control
Asks the car to run a test, such as an evaporative system leak check.
“What does service 08 do?”
09 Vehicle Info
The VIN, calibration IDs and other identifiers, often across several frames.
“Which PID returns the VIN?”
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.
ATZ
Resets the adapter, which answers with its version banner such as ELM327 v1.5.
ATSP0
Sets the protocol to automatic, so the adapter searches until the car answers. SEARCHING appears the first time.
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.
ATE0
Turns echo off, so your requests aren’t repeated in the output. Pasted requests still decode fine.
NO DATA
The car didn’t answer, usually because it doesn’t support that PID. Check the supported PID bitmaps first.
Multi-Frame Lines
Long replies such as the VIN arrive as a length line, then 0:, 1:, 2: frames that this decoder joins.
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.
Not Every PID Exists
Cars support different PIDs. Request 0100, 0120 and 0140 first to see which ones answer.
Metric Only
Speeds are km/h and temperatures are °C, whatever the dashboard shows.
Headers Change the Bytes
With ATH1 the first bytes are the ECU ID and length, not data. This decoder strips them.
Several ECUs Answer
Engine and transmission modules can both reply to one request, giving two lines with different IDs.
Clearing Codes Hides Problems
Service 04 resets readiness monitors, so an inspection right after will fail.
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.