Open-source ELM329 OBD Bluetooth adapter


In the most cases when you have to use an On-Board Diagnostics the communication protocol is limited to the ISO 15765-4 CAN standard since the year 2008 all the other protocols being phased out. Basically, Elm Electronics ELM329 is CAN-only version of ELM327. Here is my version of ELM329-compatible adapter.




The schematic is shown here. It's based on Cortex-M0 STM32F042 chip in TSSOP-20 package. The Bluetooth module can be either Classic Bluetooth or BLE. Even though the design deploys Bluetooth it is still can be used as development board, the ICSP connector is available and it can be connected to the serial port instead of Bluetooth.

The Highlights

  • ST STM32F042K6T6 ARM Cortex M0 48Mhz processor
  • 32kB Flash, 6kB RAM
  • Low power consumption


Adapter Enclosure

The adapter layout in Eagle format is here, so that all fits in the de-facto standard enclose for OBD Connector available on AliExpress from many vendors.

Bluetooth Modules

There are two Bluetooth module tested with the hardware, SPP-CA Bluetooth v3.0 module based on Beken BK3231 chip and Huamao Bluetooth BLE HM-10/HM16. Both modules are the same size and mechanically identical, but HM-10/HM-16 devices use Bluetooth BLE when SPP-CA is the Classic one.


iPhone App

Here is the Car Scanner iPhone application output connecting to adapter with HM-10 BLE Module.


The Source Code

The project is written in C++ with MDK-ARM uVision IDE. The free product activation key for STM32F0 processor is available on Keil web site.

The firmware:

The printed circuit board data available separately:



Programming the Adapter with ST Visual Programmer

The adapter programming is performed with ST-LINK/V2 debugging interface connected to SWD port. Get the ST-LINK/V2 and download and install ST Visual Programmer.

One option is to use ST-LINK/V2 debug inteface as part of STM32F Discovery board. Any one will do, like 32F0308DISCOVERY for instance. Or you can buy ST-LINK/V2 clone from AliExpress for $3.

Here is the link to the original one for the refrence.


SAE J2411 Single-Wire CAN Adapter

The specification is for CAN network applications with low requirements regarding bit rate and bus length. The communication takes place via just one bus line with a nominal data rate of 33,3 kbit/s (83,3 kbit/s in high-speed mode for diagnostics). Currently it is implemented in GM vehicles. The schematic is slightly changed with the deployment of SW-CAN transceiver IC NCV7356.