Modern automobiles are laced with a number of microcontrollers and sensors that monitor and control everything from the throttle position to the ambient air temperature. These devices communicate with each other over a wired in-vehicle network, a CAN bus.
The CAN bus is one of the primary components of OBD-II, a vehicle diagnostic standard mandatory for all cars sold in the United States since 1996. The OBD-II standard sends and receives messages on the CAN bus. If you've ever watched your mechanic plug a tool in somewhere underneath your steering wheel, or seen a vehicle monitoring app for your smartphone, that's OBD-II in action. You'll always find the port by the driver's knees.
This means that every vehicle in the United States has a very accessible place to connect to the same network used by all of the vehicle's subsystems. That's where OpenXC comes in - with some knowledge of how to process the messages on the network, you can start to get valuable data out of your car.
The OpenXC architecture is divided into two parts:
The vehicle interface (VI) is a device that plugs into the OBD-II port (and thus to the CAN bus), reads and translates CAN messages into a standard cross-vehicle format. The translated messages can be sent over USB or Bluetooth, so they can be read by any computer or smartphone.
The Android host device connects to the vehicle interface and reads the translated vehicle data. OpenXC developers can write applications on this device and use any of the data through a Java library.
When you're ready to begin writing an OpenXC app, continue on to install the Android library. You can get started even if you don't have a hardware vehicle interface (or even a car!).
If you're interested in created a web application instead and want to leave the in-vehicle details to someone else, jump to the vehicle data format section to know what type of data your app needs to accept.