Using SparkFun OBD‑II UART with ANCEL’s OBD‑II Guide – Any Tips?

Hello SparkFun community!

I recently read ANCEL’s blog post Car Diagnostics: Your Ultimate OBD II Guide (published Jan 30 2024). It gives a clear breakdown of OBD‑II basics.

I’m considering pairing that knowledge with the SparkFun OBD‑II UART. It uses the STN1110 chip (ELM327-compatible) to convert standard OBD‑II protocols (like CAN, ISO, J1850, etc.) into UART serial. It’s perfect for integrating with microcontrollers and reading live data via AT commands.
Has anyone used the SparkFun OBD‑II UART while following steps similar to ANCEL’s guide on locating the port, selecting the protocol, and interpreting codes?

TIA

I haven’t used the OBD-II UART board specifically, but I have used a CAN-BUS shield with an OBD-II to DB9 cable to communicate with the ECU in my car and truck. It took a little bit of programming to get the OBD-II protocol placed on top of CAN in my stack, but it wasn’t too difficult. I was then able to check DTCs, interpret the codes, and then clear the MIL (the check engine light). The neat part about this setup is that many modern vehicles (like my '19 F-150) use CAN outside of OBD-II for sending a lot of other data beyond diagnostics. Being able to sniff the CAN bus gives access to that data.

1 Like

Thanks for sharing your setup. I’m currently focused on Mode 01 PIDs (like RPM and coolant temp), but I’d love to explore broader CAN traffic like you mentioned eventually. Did you use a specific library or write your own stack to handle the OBD-II request/response layer over raw CAN?

I haven’t touched that project it a while, so I don’t remember all the details. As I do recall, though, for the OBD-II part, I wrote my own code and it wasn’t very sophisticated. I mostly hard coded the bytes to send in a CAN message and spit the data from the ECU to the serial monitor.

For the CAN side, I think the library I used was GitHub - sandeepmistry/arduino-CAN: An Arduino library for sending and receiving data using CAN bus.. This one had functions to set filters which I knew I needed to weed out the extra data and just look at what the ECU was sending. I seem to remember tweaking it a bit at one point, but I couldn’t tell you why now.