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 could be either Classic Bluetooth module Bluetooth BLE.

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 ST site.
A release is available:

The printed circuit board data are available separately:


Programming the Adapter with ST Visual Programmer

Download and install ST Visual Programmer. There adapter programming is performed with ST-LINK/V2 debugging interface connected to ICSP port.


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.