The widespread adoption of the CAN bus (and OBD-II) in automobiles was largely a way of standardizing the maintenance of increasingly complicated engines and their needs to meet modern emissions standards. While that might sound a little dry on the surface, the existence and standardization of this communications bus in essentially all passenger vehicles for three decades has led to some interesting side effects, like it’s usage in this project to display some extra information about an electric car’s battery.
There’s not a ton of information about it, but it’s a great proof-of-concept of some of the things CAN opens up in vehicles. The build is based on a Citroën C-Zero (which is essentially just a re-badged Mitsubishi i-MiEV) and uses the information on the CAN bus to display specific information about the state of charge of the battery that isn’t otherwise shown on the car’s displays. It also includes a build of a new secondary display specifically for this purpose, and the build is sleek enough that it looks like a standard part of the car.
While there are certainly other (perhaps simpler) ways of interfacing with a CAN bus, this one uses off-the-shelf electronics like Arduino-compatible microcontrollers, is permanently installed, and has a custom case that we really like. If you’re just starting to sniff around your own vehicle’s CAN bus, there are some excellent tools available to check out.
Thanks to [James] for the tip!
8 thoughts on “Probing CAN Bus For EV Battery Info”
The enclosure is delightfully retro. Especially with the orange graphics on the screen.
Absolutely love the enclosure!
I’m getting into enclosure design (using FreeCad) and I can now appreciate a good enclosure when I see one!
My enclosures are sadly still blocky and square but I think I will get better with time. Mechanical CAD is very different to something like electronics/PCB design and requires a different mindset
Has anyone used this sort of hack to replace deprecated wifi access to cars like older Nissan Leafs? I’d be very interested in reading up on that
There’s a guy in Switzerland that makes a replacement for the Fiat 500e cellular app (includes a new telematics device and cellular radio). Fiat never offered owners to renew it after the initial free 3 years. I’m sure someone could do the same for the leaf. I know there’s guys reverse engineering the CAN Bus for the Fiats on the forums also. So it’s definitely possible for the leaf I’d bet.
I experimented with 3D printing accessories for my car, it’s crazy the temperatures they have to withstand inside the habitacle. I ended up prototyping in PLA (easy and cheap) and getting my final prints laser sintered in Nylon.
(Shameless plug from a satisfied customer: I used JLCPCB’s new 3D printing service)
Nice build, but I want to know what is being sniffed and how it was coded. Pretty sure the data is somewhere on the buss
The code is linked: https://github.com/pierre-muth/c-zero_dashboard/blob/main/PlatformIO_CzeroDash/src/main.cpp
The specific can message IDs being used are compared against in the “onRecieve” interrupt handler.
The project writeup attributes message decomp/definitions to other open source projects (linked), e.g. OBDZero
Beautiful design. I’m converting at 1963 Corvair Rampside truck to electric and this would fit perfect.
Do you sell these?
Please be kind and respectful to help make the comments section excellent. (Comment Policy)