Introduction: Arduino OBD2 ELM327 I2C-LCD HC05 Bluetooth


This is a project of mine that I wanted to share with anyone that is interested in same thing that I was. I just wanted a simple output of the Coolant Temperature data that the ECU already has in its memory. That's easier said than done. Since the car industry has decided to use a different variety of protocols internally. The OBD2 standard is not really a standard you would typically think of. The only thing that is considered standard in my mind is the Connector. But as far as the signals that's all up in the air. That is why you need a middle man. That middle man is the ELM327 chip. The Chip translates all the 10 different protocols to a single protocol. Now a days they come in a cheap package. Ebay $5.00 dollars with Bluetooth or a USB adapter but Bluetooth is cheaper.

Other parts you will need is an Arduino Microcontroller, a Bluetooth adapter and a Display for the output.

Here are the parts needed

  • ELM327 Bluetooth OBD2 Adapter $5.00
  • Arduino Uno $5.00
  • HC05 Bluetooth Module $5.00
  • LCD I2C Display $5.00

Arduino Uno


  • Connect HC05 TX RX to Rx TX pins of Arduino
  • Connect LCD I2C to SCL SDA Pins of Arduino (Pins A4 A5 are mirrored to SCL SDA Pins)

HC05 Bluetooth Setup


HC05 will be the Master. ELM327 will be the Slave.

  • Connect HC05 to 5v power and ground and to TX/RX pins of Arduino


  • Hold Button before power up to force HC05 into AT command mode.

(Should blink on off every 2 seconds)

  • Open Serial Monitor or Hyper terminal to COM Port

My ELM327 Address is 12:3.4:56:78:9c:72 ( You need to find yours)

My HC05 Address is 00:14:03:05:97:07 ( AT+ADDE? = +ADDR: 14:3:59707 ) no zeros ( Not really needed )

AT Commands to set up HC05 to connect permanantly to ELM327

  • AT+ORGL (Set to original)
  • AT+ROLE=1 (Set to Master)
  • AT+CMODE=0 (Set connect to a specific address)
  • AT+BIND=1234,56,789c72
  • AT+INIT (Need to connect)
  • AT+PAIR=1234,56,789c72,20 (,20 means 20 second timeout)
  • AT+LINK=1234,56,789c72


When programming Arduino remove HC05 connection from TX RX Pins of Arduino

LCD I2C Display

  • Connect LCD I2C to SCL SDA Pins of Arduino (Pins A4 A5 are mirrored to SCL SDA Pins)
  • Copy Following libraries to the User's profile Arduino Library
  • #include <liquidcrystal_I2C.h>
  • #include <Wire.h>

Note: The Wire.h Library is in the Program Files folder but need to be copied to the Library folder of the user's profile. It must be in the same library directory as the LiquidCrystal_I2C.h library

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h



Need following code for I2C display. The hardware ID is hardcoded in theI2C chip. In this case it's 0x3F

  • LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  • lcd.begin(16, 2);

Step 1: Upload the Program to the Arduino

Step 2: Connect the LCD Display and Bluetooth HC05 to the Arduino

Step 3: Connect the ELM327 to the OBD2 Connector of Your Car

Step 4: Turn the Ignition on or Start Your Car to Display the Coolant Temperature