{"product_id":"freematics-obd-ii-uart-adapter-v2-1-for-arduino","title":"Freematics OBD-II UART Adapter V2.1 (for Arduino)","description":"\u003cdiv id=\"tab-description\" class=\"tab-content\" style=\"display: block;\" data-mce-fragment=\"1\" data-mce-style=\"display: block;\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThis product works as a data bridge between a car’s \u003ca href=\"https:\/\/en.wikipedia.org\/wiki\/On-board_diagnostics\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/en.wikipedia.org\/wiki\/On-board_diagnostics\" target=\"_blank\"\u003eOBD\u003c\/a\u003e port and Arduino (or similar hardware) with a dedicated open-source library provided. It provides high-speed OBD-II data access and integrates 9-DOF motion sensor with built-in sensor fusion algorithm. The adapter is powered directly from OBD port and outputs regulated 5V voltage for powering attached devices.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eFeatures\u003c\/h1\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eAccess to all standard \u003ca data-mce-=\"\" href=\"https:\/\/en.wikipedia.org\/wiki\/OBD-II_PIDs\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/en.wikipedia.org\/wiki\/OBD-II_PIDs\" target=\"_blank\"\u003eOBD-II PIDs\u003c\/a\u003e with \u003ca data-mce-=\"\" href=\"https:\/\/www.sparkfun.com\/datasheets\/Widgets\/ELM327_AT_Commands.pdf\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.sparkfun.com\/datasheets\/Widgets\/ELM327_AT_Commands.pdf\" target=\"_blank\"\u003eELM327 AT command-set\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eReading and clearing vehicle diagnostic trouble codes (engine \u0026amp; powertrain only)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN bus sniffing\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCar battery voltage measurement\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eMotion sensing with MPU-9250 9-DOF motion sensor\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eOrientation measurement with built-in quaternion sensor fusion algorithm\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePower supply (5V\/2.1A)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eSerial UART compatible with both 3.3V and 5V micro-controllers\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eMicro USB for computer\/tablet connection\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003ca data-mce-=\"\" href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\" target=\"_blank\"\u003eArduino library and example sketches\u003c\/a\u003e available\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eCompatibility\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe adapter plugs into the OBD port usually located under the steering column or slightly to the left of it. To check if your vehicle is OBD-II certified, open your hood and find the sticker that looks like this:\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003ca href=\"https:\/\/blog.freematics.com\/wp-content\/uploads\/2012\/03\/obd_sticker.gif\" rel=\"shadowbox[sbpost-576];player=img;\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/blog.freematics.com\/wp-content\/uploads\/2012\/03\/obd_sticker.gif\"\u003e\u003cimg alt=\"obd_sticker\" class=\"size-full wp-image-3384 aligncenter\" src=\"https:\/\/blog.freematics.com\/wp-content\/uploads\/2012\/03\/obd_sticker.gif\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/blog.freematics.com\/wp-content\/uploads\/2012\/03\/obd_sticker.gif\" width=\"330\" height=\"222\"\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eVehicles using following vehicle protocols are supported.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN 500Kbps\/29bit\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN 500Kbps\/11bit\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN 250Kbps\/29bit\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN 250Kbps\/11bit\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eKWP2000 Fast\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eKWP2000 5Kbps\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eConnectors\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe adapter stays plugged into the OBD port usually located under the steering column or slightly to the left of it. A unpluggable cable comes out from the adapter and splits into one 4-pin connector two 2-pin connectors, including power lines (VCC\/GND) and data lines (Rx\/Tx). They can be connected to Arduino with onboard breakout pins or breakout shield. Your Arduino device will look tidy in car with only one cable.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003ePower Connector\u003c\/strong\u003e (2-pin 2.54 Dupont connector)\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eRed: VCC (connecting to Arduino’s VCC)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eBlack: GND (connecting to Arduino’s GND)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSerial UART Data Connector\u003c\/strong\u003e (2-pin 2.54 Dupont connector)\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eWhite: Rx (connected to Arduino’s serial Tx)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eGreen: Tx (connected to Arduino’s serial Rx)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003eNote: Arduino UNO or Nano only has one hardware serial which is also used by USB serial. Avoid using serial output if the adapter is connected to hardware serial. Arduino Leonardo, Mega, Due do not have this limit.\u003c\/em\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eUSB Port\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFor connection with computer or tablet via micro USB cable\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eAllows power output (5V\/2A)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eExtended AT Command Set\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWe have extended standard ELM327 command set for following purposes:\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eReading built-in MEMS motion sensor data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eReading orientation result from sensor fusion computation\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eData bus specific controls\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCAN bus sniffing\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eMotion Sensor Access\u003c\/h2\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATACL\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: reading accelerometer data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse format: X,Y,Z (in G)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATGYRO\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: reading gyroscope data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse: X,Y,Z (in degree)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATMAG\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: reading magnetometer data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse: X,Y,Z (in milli-Gauss)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATTEMP\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: reading temperature data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse: temperature (raw) data\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eQuaternion Control and Orientation\u003c\/h2\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATQU0\/ATQU1\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: disable\/enable 9-DOF sensor fusion (disabled by default)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse: OK\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATORI\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: retrieving orientation parameters from 9-DOF sensor fusion\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eResponse: \u0026lt;yaw\u0026gt;,\u0026lt;pitch\u0026gt;,\u0026lt;roll\u0026gt; (in degree)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eK-Line and ISO9141-2 Specific\u003c\/h2\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATSH \u0026lt;AA\u0026gt; \u0026lt;BB\u0026gt; \u0026lt;CC\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set header bytes\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATSH C1 33 F1\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATPTH \u0026lt;AA\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set initializing pulse time for (in hex, range of 0~255ms)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATPTH 19 (set to 25ms)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATPTA \u0026lt;BB\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set negative pulse duration before first data (in hex, range of 0~255ms)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATPTA 32 (set to 50ms)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eCAN Bus Specific (CAN bus sniffing)\u003c\/h2\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eCAN Bus Specific (CAN bus sniffing)\u003c\/h2\u003e\n\u003ch2 data-mce-fragment=\"1\"\u003eCAN Bus Specific\u003c\/h2\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATSH \u0026lt;ABC\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set CAN message header (on 11-bit CAN)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATSH 7DF\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATSH \u0026lt;AA\u0026gt; \u0026lt;BB\u0026gt; \u0026lt;CC\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set lower 24 bits of CAN message header (on 29-bit CAN),  higher 5 bits are set by ATCP command\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATSH DB 33 F1\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATCP \u0026lt;HH\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set CAN priority\/higher 5 bits of header (on 29-bit CAN)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATSH 18\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATCF \u0026lt;ABC\u0026gt; or \u0026lt;AA\u0026gt; \u0026lt;BB\u0026gt; \u0026lt;CC\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set CAN message header filter for CAN sniffing, \u0026lt;ABC\u0026gt; for CAN 11-bit, \u0026lt;AA\u0026gt; \u0026lt;BB\u0026gt; \u0026lt;CC\u0026gt; for CAN 29-bit\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATCF 7E8\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATCM \u0026lt;AA\u0026gt; \u0026lt;BB\u0026gt; \u0026lt;CC\u0026gt; \u0026lt;DD\u0026gt;\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFunction: set CAN message filtering bit mask (32-bit)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eExample: ATCM FFFFFFFE (ignore the lowest bit when comparing with header filter number)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATM1\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eStart sniffing mode\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eATM0\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eStop sniffing mode\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eExamples\u003c\/h3\u003e\n\u003cp data-mce-fragment=\"1\"\u003eTypical sniffing on 11-bit 500kbps CAN bus\u003c\/p\u003e\n\u003col data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATSP6\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATCF 700\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATCM FFFFFF00\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATM1\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003cp data-mce-fragment=\"1\"\u003eTypical sniffing on 29-bit 500kbps CAN bus\u003c\/p\u003e\n\u003col data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATSP7\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATCF 18DBF133\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATCM FF000000\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eATM1\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eArduino Library\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003ca data-mce-=\"\" href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\/tree\/master\/libraries\/OBD2UART\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\/tree\/master\/libraries\/OBD2UART\" target=\"_blank\"\u003eA dedicated Arduino library\u003c\/a\u003e is provided for easy access to all the features with any type of Arduino. Please note not all available AT commands are encapsulated into API.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eSome commonly used APIs are like following:\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cspan class=\"pl-en\" data-mce-fragment=\"1\"\u003esetBaudRate\u003c\/span\u003e – set adapter serial baudrate\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cspan class=\"pl-en\" data-mce-fragment=\"1\"\u003eread\u003c\/span\u003ePID – read specified OBD-II PID and return parsed value\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cspan class=\"pl-en\" data-mce-fragment=\"1\"\u003eclearDTC\u003c\/span\u003e – clear diagnostic trouble code\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cspan class=\"pl-en\" data-mce-fragment=\"1\"\u003egetVoltage\u003c\/span\u003e – measure car battery voltage\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cspan class=\"pl-en\" data-mce-fragment=\"1\"\u003egetVIN\u003c\/span\u003e – retrieve Vehicle Identification Number\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003egetTemperature – get device temperature\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ereadAccel – read accelerometer X\/Y\/Z values\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ememsInit – initialize motion sensor\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ememsRead – read motion sensor data\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ememsOrientation – retrieve computed orientation data\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003eHere is an example code of a simplest engine RPM indicator, which uses the pin 13 LED (built in every Arduino board) to indicate whether the engine is above 3000 rpm.\u003c\/p\u003e\n\u003cpre data-mce-fragment=\"1\"\u003e#include \u0026lt;OBD2UART.h\u0026gt;\n\nCOBD obd;\n\nvoid setup()\n{\n  \/\/ we'll use the debug LED as output\n  pinMode(13, OUTPUT);\n  \/\/ start serial communication\n  obd.begin();\n  \/\/ initiate OBD-II connection until success\n  while (!obd.init());\n}\n\nvoid loop()\n{\n  int value;\n  \/\/ save engine RPM in variable 'value', return true on success\n  if (obd.readPID(PID_RPM, value)) {\n    \/\/ light on LED on Arduino board when the RPM exceeds 3000\n    digitalWrite(13, value \u0026gt; 3000 ? HIGH : LOW);\n  }\n}\u003c\/pre\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMore example sketches are \u003ca data-mce-=\"\" href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\/tree\/master\/libraries\/OBD2UART\/examples\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/github.com\/stanleyhuangyc\/ArduinoOBD\/tree\/master\/libraries\/OBD2UART\/examples\" target=\"_blank\"\u003ehere\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eSome commonly used PIDs are defined in OBD library as following.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eEngine\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_RPM – Engine RPM (rpm)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ENGINE_LOAD – Calculated engine load (%)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_COOLANT_TEMP – Engine coolant temperature (°C)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ENGINE_LOAD – Calculated Engine load (%)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ABSOLUTE_ENGINE_LOAD – Absolute Engine load (%)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_TIMING_ADVANCE – Ignition timing advance (°)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ENGINE_OIL_TEMP – Engine oil temperature (°C)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ENGINE_TORQUE_PERCENTAGE – Engine torque percentage (%)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_ENGINE_REF_TORQUE – Engine reference torque (Nm)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eIntake\/Exhaust\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_INTAKE_TEMP – Intake temperature (°C)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_INTAKE_PRESSURE – Intake manifold absolute pressure (kPa)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_MAF_FLOW – MAF flow pressure (grams\/s)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_BAROMETRIC – Barometric pressure (kPa)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSpeed\/Time\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_SPEED – Vehicle speed (km\/h)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_RUNTIME – Engine running time (second)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_DISTANCE – Vehicle running distance (km)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDriver\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_THROTTLE – Throttle position (%)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_AMBIENT_TEMP – Ambient temperature (°C)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eElectric Systems\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_CONTROL_MODULE_VOLTAGE – vehicle control module voltage (V)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePID_HYBRID_BATTERY_PERCENTAGE – Hybrid battery pack remaining life (%)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAdditional defines can be added to access all \u003ca href=\"http:\/\/en.wikipedia.org\/wiki\/OBD-II_PIDs\" data-mce-fragment=\"1\" data-mce-href=\"http:\/\/en.wikipedia.org\/wiki\/OBD-II_PIDs\" target=\"_blank\"\u003eOBD-II PIDs\u003c\/a\u003e which the car’s ECU provides.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eComparison\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe following table lists the differences among all Freematics OBD-II adapter models.\u003c\/p\u003e\n\u003ctable style=\"text-align: center;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: center;\" width=\"100%\"\u003e\n\u003ctbody data-mce-fragment=\"1\"\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003cth data-mce-fragment=\"1\"\u003eFeatures \\ Models\u003c\/th\u003e\n\u003cth data-mce-fragment=\"1\"\u003eOBD-II UART Adapter V1\u003c\/th\u003e\n\u003cth data-mce-fragment=\"1\"\u003eOBD-II UART Adapter V2\u003c\/th\u003e\n\u003cth data-mce-fragment=\"1\"\u003eOBD-II UART Adapter V2.1\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eConnection Cable\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eFixed\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eFixed\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eUnpluggable\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eAdditional Interface\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eN\/A\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003emicro USB\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003emicro USB\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eMotion Sensor\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eN\/A\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e6-DOF MPU-6050\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e9-DOF MPU-9250\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eVoltmeter\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eYes\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eYes\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eYes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eMax. Output Power\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e2A\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e2.1A\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e2.1A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr data-mce-fragment=\"1\"\u003e\n\u003ctd data-mce-fragment=\"1\"\u003eStandby Mode Power\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e5mA\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e6mA\u003c\/td\u003e\n\u003ctd data-mce-fragment=\"1\"\u003e6mA\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e\n\u003ch1 data-mce-fragment=\"1\"\u003eFAQ\u003c\/h1\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: What is this product used for?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: The most straight-forward use of this product is for making Arduino possible to access vehicle data easily. The OBD-II data, together with other data from GPS or all kinds sensors, can be logged and stored on SD\/TF card with Arduino and that makes an open-source vehicle data logger (check out the \u003ca href=\"https:\/\/freematics.com\/products\/#kits\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/freematics.com\/products\/#kits\" target=\"_blank\"\u003edata logger kits\u003c\/a\u003e). More extensively, many interesting interaction applications requiring car data can be made.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: How is the adapter powered?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: The adapter gets power from the 12V DC output from the OBD-II port.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: Does my Arduino needs power from somewhere in the car?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: The adapter provides regulated 5V output for powering Arduino and other devices, so no extra power cord is needed.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: Do I need a CAN bus shield to use with the adapter?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: Definitely no. The adapter retrieves data from CAN bus, like a CAN bus shield does and convert the more complicated CAN bus interface to simple serial UART interface which Arduino and most embedded systems are easy to access. The data connection is provided by adapter’s data connector (Rx and Tx).\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: How do I connect the adapter with my Arduino?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: The adapter works with all models of Arduino with the dedicated Arduino library and is connected with Arduino by connecting adapter’s Tx to Arduino’s Rx (D0) and adapter’s Rx to Arduino’s Tx (D1). If you want to connect and disconnect the adapter with your Arduino effortlessly, it’s recommended to use a common I\/O breakout shield or use an Arduino board with breakout pins for Rx\/Tx\/VCC\/GND.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: Is the power provided by the adapter always available in car?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: This depends on whether the OBD-II port of your car still has power after ignition is off. Actually it is so with most cars.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: What’s the maximum frequency of data polling?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: The OBD-II PIDs are polled one after another. The time for a polling depends on the speed of car’s ECU computer and how busy the computer is in different status. With a typical modern car with CAN bus, the time can be as low as 10ms. In other word, up to 100 times of data polling can be done in one second.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: What if I have questions\/obstacles about Arduino programming?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: Sorry it is not our responsibility to provide any instructions on Arduino programming. There are abundant online guides and tutorials about Arduino programming for reference.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eQ: What's the difference between product version and firmware version?\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e A: Freematics OBD-II UART Adapter V2 uses a firmware versioned 1.1. Freematics OBD-II UART Adapter V1 uses a firmware versioned 1.0.\u003c\/p\u003e\n\u003c\/div\u003e","brand":"Freematics","offers":[{"title":"Default Title","offer_id":44024434065708,"sku":"OBD-U","price":86.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0684\/1879\/7868\/products\/OBD_UART_V2_1.jpg?v=1669505007","url":"https:\/\/shop.freematics.com\/products\/freematics-obd-ii-uart-adapter-v2-1-for-arduino","provider":"Freematics Store","version":"1.0","type":"link"}