Arduino with OBDII and Android

Hey guys,

I've just downloaded my Arduino software and ordered my first Arduino Uno to play around a little bit with. Just to get the feel of it and get familiar with the enviroment and so on. However I haven't done any actual uploading of code yet.

The goal is to get some Arduino hardware hooked up to my cars OBDII and get some diagnostics about the car, fuel/rpm/speed and so on, and eventually get this hooked up to my android phone so I can put my android-programming to use as well.

I've tried to gather some knowledge and information on my own by googling and looking at tutorials. But I would have loved it if someone could just give me a push in the right direction. My two biggest concerns are: -What hardware will I eventually need for this to work? -How can the Arduino communicate with Android?

But if you guys have any other tips, that would be great!

Best regards and thanks in advance!

As far as ODBIII goes, the hardware depends upon whether you want to make your interface universal, or tied to a line of vehicles. Universal often means you need at least 4 hardware interfaces PWM, VPW, ISO-9141, and ISO-11898(CAN). Depending upon the exact data you are trying to extract, you may need to add KW2000, ISO15031, and ISO15765 as well. You can save yourself a boatload of money by requesting these standards from a good university library (ideally with an automotive engineering program). If you want a high level overview, check out and, especially the forums. Such should give you the high points you need to get rolling.

Its often times easier to walk before you run, and ODBII can have a lot of gotchas, especially if you are trying to make a universal device. As such, I'd recommend you identify the protocol your car uses, and then build the appropriate interface and write the code. Once you know that things are working on 1 protocol, then you can look to add the others... It often means borrowing a few folks cars to play around with. The standards are a bit of a pig in a poke... each manufacturer, or I should go further and say each design group has some nuances with their implementation which make universal solutions tricky.

This thread has made me want to try something with ODB-II as well. So I've requested some sample STN1110 ICs from here: If they ship me one I'll begin working on a datalogger/diagnostic tool I've been wanting to make for a while now.

The STN1110 chip supports all the OBD-II protocols. If you want something a little more user-friendly (and a little more expensive) you can also get the ODB-II UART board from Sparkfun ( which also uses the STN1110.

Or you could build your own version of the Sparkfun board using their schematics.


I am also trying to do the same thing. I have bought the OBD-II-UART from sparkfun, a db9-obd cabel and an ECUsim 2000 simualor with ISO15765-4 protocol to experiment with. I also have an Arduino UNO and a Arduino MEGa. But I have problem to cummucate between the the Arduino and the Simulator, I have searched a lot for a library that allows me to do this, but I only find librarys for the CAN-shield that uses SPI. I have tryed the obdUartQuickStart.pde from sparkfun. When I use this sketch the arduino communicates to the obd-uart, the rx,tx and obdtx lights blinks on the uart but not the obdrx. In the arduino serial monitor I can se that the program sends ATZ, 010c and 010d but I get no response from the simulator so it just sends those commands again and again and again. Does anyone know a library for the OBD-II-UART that makes it able to cummicate to CAN ISO15765-4?


For guidance, the following book has a 90-page chapter on connecting the Arduino
to the ELM327 chip.

Also, like everything else, the chinese sell low cost OBD readers with ELM327 chip and USB
interface for less than the cost of the chip alone in the US. Google “ebay ELM327”.

This Arduino project may interest you:

Depends on what your final goal is. If you want to focus on the app, then I think the way to go for this is to skip the DIY arduino part and get a elm327 bluetooth interface.

Then you can focus on the app rather than all the other pieces involved with trying to communicate with the OBDII interface with varies by car manufacturer not only at the electrical interface but also in the in the message protocols.

Bluetooth is nice because you can then talk to the OBDII from either a PC/laptop or an android device.

The elm327 type interfaces make it much simpler because they handle much of the low level differences.

Here is a project for a GM car that talks directly to the OBDII port. It does not use Arduino, but you can get an idea of what it is like to talk directly to the OBDII interface:

--- bill