I have an old BMW E91 car with manual shifter and only radio inside. Often I realize that there are several features missing I knew from my previous car like parking distance sensors visualization, cruise control data, current gear, actual lights state if the switch is in "auto" position, digital speed view. So the idea was born to build a small board computer to show missing information.
My prototype was based on the great "RejsaCAN-ESP32" module (v3.x version) developed by Magnus Thomé which was working on K-CAN bus of the vehicle quite good, but it was a wild LCD wiring. At that point I noticed that Magnus already published schematics for the next version v6.x which was based on ESP32-C6 and had two CAN bus interfaces. So I tried to make my own simplified two-layer version of it for LCD connection. I planed to use the second CAN bus interface for the D-CAN bus (diagnostic), but when I opened the OBD2 socket there was only a singe K-Line wire. So PT-CAN might be the next candidate for the second connector. For now only K-CAN bus is used.
Magnus designed his boards with a cool voltage monitor which turns the module on if the vehicle voltage goes above 13,7V and turns it off after dropping below 13,0V (range depends on the used resistor value - so can be changed). So I used that part of the circuit too, to activate the module only if the engine is running and the generator makes the voltage go high. "A_ON" pads on the board allow the "always on" mode - e.g. if the 12V input is from a ignition-switched line.
Additional I2C connector is for connecting additional sensors - intended to detect manual gear shifter position, because the can bus does not provide that information for manual transmission.
For UI I used roo_display - feature rich and fast library for ESP32. Lack of PSRAM for EPS32C6 required memory optimization when working with images and the eco-system around roo_display provides all necessary tools for it.
As LCD I took a red 2.8 inch SPI board from which I removed the SD card reader to place the module there together with an adapter PCB for LCD connection.

SD card socket and resistors were removed, plastic from the LCD pins as well. A piece of duck tape was used as "isolation layer" between LCD board and RCAN-LCD module.

LCD adapter board goes over the "naked" LCD pins, There is currently no nice way to fix the RCAN-LCD module on the board - I used some glue on the outer side to fix it.

The adapter board has backlight selection pads. One option is to control it by MCU pin, another to connect it to VCC so it's always on with power available. I choose MCU pin control to be able to dim the light if necessary. Wire bridges between RCAN-LCD module and adapter board are "hacky" and I also thought about castellated holes, but it unnecessarily increases the PCB costs - so "hacky" is good enough for me. I'm already happy that with the adapter board I could get rid of wild cable wiring...
To save space I intentionally left out the BOOT button. Because it's actually needed only for first time programming. All binaries uploaded after usually contain some code allowing esp-upload tool to switch the device in bootloader mode automatically. So for the first programming the pins need to be shorten before uploading the code.

The case was designed with OpenSCAD - source files together with STL exports for printing can be found in the repository.

I used ABS for printing the enclosure, because first prototype made of PLA got a deformation by the high temperatures when the car parked under direct sun. I didn't want to destroy the dashboard to mount the display so the best idea came into my mind was using neodymium magnets. First attempt was using 8 of 18x3mm neodymium magnets, but the dashboard wand seems to be too thick for that combination. Display was slightly moving around and didn't stay at chosen position. Next try was to use more powerful magnets - 20x5mm and some grinding of the mounting...
Read more »
gamadril.dev
rob
Joe Mendia
Julien