CAN bus reader for FT86/BRZ/86/FR-S with support for RaceChrono BLE protocol

Hey folks,
I've recently created a DIY device to get more info from the car than I could via OBD.
The whole build cost me ~$50, compared to hundreds of dollars I'd pay for a comparable off-the-shelf device.

Here's an overview of the project:
And here's everything I've learned about the CAN bus for FT86 platform that's useful for RaceChrone'ing:

Here's an example of data captured by that device at T6 at Laguna Seca:

And here it is used for virtual gauges in RaceChrono:

While working on this project, I also created an Arduino library with common utilities for communication with RaceChrono over BLE, and provided a few examples how to use it:

I also found a bunch of correctness and performance issues in the arduino-CAN library, and ended up creating my own fork where I've resolved most of them:

Hope you find these repos useful!


  • Thank you for sharing your works! and how about using OBDLINK devices? Does it still send one-time data only?
  • I haven't tried OBDLink with RC v7 yet. Should I expect any improvements there?

  • There's no updates in v7.0 to "CAN-Bus using OBDLink readers". It should work just fine in general, although the vehicles it's been tested on is fairly limited.
  • Trying my hand at this. but I can't seem to get it to work. checked my wiring 10 times over used a multimeter. using the connector behind the headunit with a toyota harness.

    racechrono is able to connect with bluetooth to the device but never receives any data. have confirmed can is working with an obdlink.

    what would be the best way to troubleshoot this?

    thank you for all the information
  • @ZN6Aura Add debug logging to see if your device receives any CAN-Bus packets. If not try with or without the terminator. Check your CAN-Bus board is getting correct voltage. Check the CAN-Bus hi and lo wiring order.
  • This is what the serial monitor is showing

  • Okay so I figured it out, I ordered a 3 pack of the mcp2515 following the link in this github.

    Two of the chips are labeled 17200TW. Both of those do not work. I tested the third chip when realizing it was labeled 20239RA. And it worked on its first try...

    So for anyone else trying this out avoid the chips with 17200TW. They look identical but only one works.

    I'm sure there are probably other variations of this as I now see small differences on amazon from different sellers.

  • edited March 2021
    Sorry this happened!

    For future readers: @aol is not a maintainer for my project on GitHub.
    To save his time to work on RaceChrono improvements, just file bugs on my GitHub and I'll do my best to help you there.

    @aol FYI my build already has some debug logging to Serial built in :)
  • @timurrrr Maybe I should deprecate the source code on my repo and point to yours, as I'm updating only the protocol specs currently...
  • I'm ok with that :)

    I tried my best to make the architecture of my implementation more clear, as I found your code a bit hard to understand at first. But we need someone else to confirm whether I succeeded at that 😅

    Just want to warn you that my implementation doesn't have support for GPS. Personally I find that using an off the shelf GPS is just more convenient, as I can put it at a different location, charge its battery, etc.; but I do see that a bunch of people do DIY RC devices specifically with GPS for whatever reason.

    If someone can add GPS support behind a #ifdef as a pull request, I'll be happy to review and merge it!

  • Timur thanks for the awesome project you put together!

    I'm in the process of adapting it to be used on Suzuki Swift Sport, year 2013. I'm using your recommended components and everything seems to be running smoothly but refresh rate stays around or below 50Hz.

    Tried reducing individual PID rates in config file and swapped MCP2515 crystal for 16Mhz one with no success. Is this the limit of nRF52840?
  • Yeah, it looks like nRF is more limited than ESP32. I've been playing around with a few ESP32 recently, but haven't gotten to the point that I'd trust the v2 hardware enough to replace the nRF board in my car yet.
    Adafruit has also recently started selling a CAN-based "sheild" that should be compatible with one of their ESP32 boards, that might be the match made in heaven for a casual DIYer who wants DIY data logging with RaceChrono.

    If you get around making it work before me, feel free to send me pull requests!
  • That being said, IMO 30-50 Hz updates is more than enough for most data channels for non-professional data analysis.
Sign In or Register to comment.