megasquirt digital dashboard display
Additional or MegaSquirt3 ECU (
Engine control unit). It\'s 5-inch high-
The brightness LCD panel and LED display make it quick and easy to view important car/engine information.
The firmware currently has only the option to display three different screens.
A demo screen and two screens show some real-time information from Megasquirt.
The screen is flipped by touching the LCD screen (
Capacitive touch screen).
This is not a simple project, but the result is well worth the effort!
These parts are relatively cheap and you end up with a fully customizable digital dashboard display that competes with a $1000 business unit.
Since this display is based on the can bus, it can also be programmed to handle from Haltech, Link, EMS, FuelTech, ECUMaster, Motec, Syvecs, Emtron, and more.
It can also be programmed through the OBDII CANbus interface to support later model factory cars.
In my case, I have a 1990 Toyota Celica GT4 (aka Alltrac)
Used as a weekend club/racing car.
It has been running the MegaSquirt3 MS3X ECU for about 6 years.
Previously, I used Android tablets/phones and RaspberryPi Linux devices to view ECU information, but it turns out that these devices are slow to boot and unreliable, no matter how much they are modified, it is usually not suitable for use in harsh automotive environments.
I am employed by Crystalfontz and have been working for over 10 years now.
However, this project was developed for myself.
I need a better Celica digital dashboard display and the new Crystalfontz highlight acceleration display is perfect for this use.
Chips are great for this project for a few reasons: so far, the Wifi/BLE feature of ESP32 is not used in this project.
Special Crystal fontz LCD panel (CFAF800480E0-050SC-A1-1)
This is perfect because: The graphics acceleration is provided by the FTDI/Bridgetek EVE2 FT813 chip on the LCD panel.
Most of the embedded graphics firmware I \'ve written in person in the past needs to render graphics in a microcomputer
The processor displays the buffer and then rolls out a full screen to the LCD panel each time.
This requires a fairly powerful processor, a lot of graphics rendering code, and careful timing.
The EVE2 graphics accelerator does a lot for us. We (Using ESP32)
Give a list of graphic objects to display (
Text, lines, circles, bitmap, etc)
Then we present EVE2 on the LCD.
Its theory of relativity is easy to use, but very powerful.
It also handles the capacitive touch screen interface for us (
Has not been used in this project so far).
CANbus is very flexible, simple, fast and robust.
Although this project can support the Megasquirt serial interface (
May do so in the future)
, It makes more sense to use the CANbus interface here.
When using CANbus, there is less programming required to get data from MegaSquirt.
MegaSquirt ECU is set up to send data blindly through can bus;
We just sucked it out and showed it.
Supporting other aftermarket ECUs that can be configured to send data via CANbus is also very simple.
There are 5 main operating parts of the project: NodeMCU-
32 years old is the brain of this project.
It has an ESP32 system. on-chip (micro-
Processor, ram, flash memory, etc)
It runs the firmware we uploaded to it via a USB connector.
We use ESP32 to get the Megasquirt information from CANbus, decode it, and then create a display-list (
We send it through the SPI interface to the EVE2 acceleration LCD panel.
The ESP32 also has a hair color/WS2812b LED light through PWM brightness data (pulse-Width adjustment)interface.
ESP32 contains CANbus interfaces, but additional interfaces are required between it and the actual CANbus wires that will lead to MegaSquirt.
The MCP2551 can Bus Transceiver Chip/module does this for us.
Two resistors (
1k Ohm and 2k ohm)
Used as voltage-divider.
Since the MCP2551 outputs a 5v signal, but the ESP32 can only process 3, this is required. 3V.
The voltage divider reduces 5v to about 3.
3 V so we won\'t damage the input pin on esp32.
In this project, most circuits require a 5 v power supply, so we need a voltage regulator to withstand normal 9v to 16v (
The car battery is 12 V, but it is about 14 V when the car is running properly), down to 5V.
It needs to provide up to 2 amps (
LCD backlight and WS2812b can use considerable power).
The CFA10098 breakout board needs 3 pieces. 3 volt supply. The NodeMCU-
32s has its own 3. 3V regulator on-
So we also use it to provide the cfa10098.
This is not the fastest or simplest project, it is actually the opposite.
It takes quite a bit of an electronic experience to build a monitor, and some C programming experience to customize the display.
Depending on the components used and how they are laid out, each build will be slightly different.
However, most of the cabling should remain the same.
I can definitely improve my first build, which is the basis of this guide.
I will update this guide in any future improvements.
Note: I built this project and it started working before I started recording and taking pictures for this Instructable, so why is there no blank photo of the unwelded strip
32s not installed, etc.
The tools I use are as follows, but you can do the same with other tools: cut the PCB strip first-
Board that matches the exact width of the LCD.
Use Dremel with a cut-out-
It is best to choose the off wheel, but you can also use a hacksaw or similar tool.
And cut that one.
Board that matches the LCD height, if the WS2812b LED strip is used, the height of the WS2812b LED strip is added (
For more information on this, please read Step 7 now).
This will provide you with space to install the led facing you at the top of the LCD module. Put the tape.
Circuit board on the back of the LCD module (
Make sure the extra height is hung on the top of the LCD)
, And mark the position of the 6 mounting bolt holes.
The bare side of the band-board (
Not a site with copper rails)
Should be outward.
Drill 6 holes with 3mm drill bit.
Once drilled, make sure you can unscrew the strap
Board to the back of the LCD module.
The CFA10098 must be modified a little to work for us.
First, carefully design the green speaker wire connector from the CFA10098 PCB.
Since we need to install the CFA10098 on tape, it has to be removed
The board is facing down and it will get in the way.
This is ROHS welding, so you need to get it hot, absorb all the welding using good flux and good welding Wick, pop the connector off the PCB.
The PCB is set to supply 3.
3v for LCD panel backlight, we need to change it to 5 v.
Very fine jumpers/links need to be cut.
You need to look very carefully at the bare pads next to \"BL = 3.
3V \"tab to see the link between pads that need to be cut.
Position of CFA10098 on strip-
It is very important to use the board correctly, because the flexible cable between the LCD and the CFA10098 must be straight and stress-free.
First, get the male pin head ready.
14 needles in a single row and 2 needles in a single row.
Insert one end of the flexible cable into the LCD panel.
Loose board on the back of the LCD module.
Insert the other end of the flexible cable into the cfa10098.
Now pack the CFA10098 on the back of the strap-
Plate, keep the flexible cable aligned.
Mark at the top of the strap
Need to weld the joint pin belt to connect the plate between the CFA10098 and the belt-board.
Unscrew the strap
The circuit board of the LCD module, and welding 14-pin headlines and 2-pin headlines in the marking position.
Now you can put the CFA10098 on these pins and weld it in place (
Welding only 2-a good idea
The first is 3 pins and all components are laid out at the same time to prevent errors and need to be removed).
Note that in order to match the holes on the cfa10098, the 2 pin head pins may need to be slightly bent.
Bring the 32s module-
Board on the right side of the CFA10098 module (leave 3-
With 4 columns-
Plate holes between them).
Weld a few pins near each corner to stay in place while laying out the rest of the components.
Place the MCP2551 module on the NodeMCU-
32 s on the bar-
Leave some of the rooms around them again.
In subsequent steps, you need to have enough space to place 2 or 3 resistors, as well as some pin heads next to the MCP2551.
Weld a few pins near each corner to stay in place while laying out the rest of the components.
Note: I don\'t have the MCP2551 module on hand, but there is a bare IC.
So in my photo you will see the IC stuck to the top of the strap
A plate with wires welded from the IC pin to the male pin.
You will also see additional resistors for slope control, as well as chip capacitors with copper side-board.
If the 5v regulator you are using is compact enough, you can also install it on the stripboard.
I suggest it be installed at the top-
To the left of this street
Board, leaving a decent gap between the power regulator and the MCP2551 module for some power source pins and 100uF power smoothing capacitors.
Depending on the size of the LED light strip you are using, this step requires some adjustment (if any)
, And how it needs to be installed.
Some need to be welded in place, some are screwed in place, and some are glued in place.
There is also no reason why this LED light strip needs to be installed next to the LCD panel.
It can be installed on top of the collisionpad, or A-
The pillars or anywhere else can be seen clearly.
It only needs 3 wires to connect to the belt-board.
In my case, the purpose is to have the LED strip mounted above the LCD panel so that it can be easily hidden behind the mounting board/border with holes to see the LED.
I used two LED strips of 8 x so first I welded the two plates togetheron-
Make a single 16 LED light strip.
Then I put the tape on.
Mount the LCD module, place the LED strip on the top edge of the LCD and keep it horizontal with the LCD glass, and weld it in place using some male pin to make up for the gap, and for connection of 5 v, ground and data
In connection with strip-board.
First, quickly introduce the use of strip-board (
Also known as Vero Board)
For those who have not used it before. Strip-
The plate consists of a row of copper tracks on one side, passing through
Drill holes at standard 0. 1 inch (2. 54mm)spacing.
By using the drill bit, the track can be divided into smaller parts.
With your fingers (
Not an electric drill! )
, Twist a 3 to 5mm bit into the copper track you want to break.
All you need to do is drill enough to remove the copper and break the track and there is no need to go all the way through the board.
Make sure there are no small pieces of loose copper around the edge of the hole and brush off any other copper and fiber debris from the plate.
You don\'t want loose copper to be shorter
A short intro video can be found here: Due to space constraints, we will use a flying lead connection on the back of the board to connect the project.
In some ways, this eliminates the prototype advantage of using a strip
But it does make the construction of the project faster and requires less planning.
However, it does make the build less robust.
If you have a better construction method, go ahead!
Please see the wiring diagram below.
I would recommend that you provide 5v and GND power supplies for all components using two-line rails.
Therefore, first select the adjacent two tracks that the module pins do not use.
To use the enameled copper wire for component connection: check the wiring connection carefully against the wiring diagram.
It is especially important to make sure that the 5v and GND connections are correct, as errors here can damage one or more modules or LCD panels!
LCD panel disconnected (
There is no cable between the CFA10098 and the LCD module)
, Apply 12v at the input of the 5v power regulator.
Red led on NodeMCU-
32s should illuminate to show that it has power.
It is a good idea to use a multimeter to check the voltage of the regulator 5v output, 5v supply pins on each module, and 3.
3v pins on CFA10098 to ensure proper power supply anywhere.
Remove the power supply from the regulator.
LCD flat panel connection
Flexible cables for CFA10098 and LCD modules. Flip the strip-
Board the back of the LCD module and screw to the appropriate position.
Here are the instructions for using the PlatformIO IoT integration development environment (IDE).
PlatformIO is Microsoft\'s VSCode IDE or open-SOURCE Atomic IDE.
You can modify the project source code to build in the Arduino IDE if needed (
I leave this to you).
After installing VSCode/Atom and PlatformIO, you need to set PlatformIO for ESP32: Download project source-
Code in Github project: extract source code-
Write code in PlatformIO and add the project directory.
Find and set up the ESP32 COM port in the following ways: if you are using a led greater than or less than 16 x WS2812b: build the project and upload it to NodeMCU-32s.
If PlatformIO is stuck while \"connecting. . . .
, Press and hold the \"IO0\" button on NodeMCU-
32 s when it tries to connect.
NodeMCU after upload-
32s should run the firmware and start showing the demo screen on the LCD and LED bar.
If the two external LEDs are white and the rest are off, the LCD panel initialization fails.
Check your line carefully and try to reduce the SPI data rate if everything is OK (
In \"proj _ conf. h\")by half.
The quality and length of the CS/SCK/MISO/MOSI cabling can affect the maximum SPI data rate.
If you continue to have problems, some start
Output up debug information to the virtual COM port (
When the firmware starts.
You can display this using \"serial monitor\" in PlatformIO (
Select the same COM port with a baud rate of 115200).
Connecting the can bus from the dashboard display to the Megasquirt requires the use of a pair of twisted wires and a ground wire.
Since CANbus is two balanced wires that need to be twisted
Wired: because CANbus is a high
In order to minimize the signal reflection at the end of the wire, the speed Balance Network, terminal resistance is required.
Megasquirt ECU usually has a terminal resistor built into it.
Check if it\'s in place, add a 120 ohm resistor if not (
See the Megasquirt file).
If the dashboard display is the only other device on the can bus network, then it also needs a terminal resistor.
The terminal resistor is a single 120 ohm resistor connected between CAN-H and CAN-L wires (
Display in project wiring diagram).
If you have more devices on the can bus network than the Megasquirt ECU and dash display, you need to read elsewhere how to connect a multi-node can bus system.
Very simple, there are a few simple rules to follow.
Next is MegaSquirt2-
Additional or MegaSquirt3 needs to be set up to broadcast CANbus packets.
The steps here are for grand gasqui 3, but Grand gasqui 2-
The additional configuration is very similar.
Set the minimum data rate required for broadcast type information.
Setting up too many items too fast can saturate the can bus network and cause problems.
For example, it is important to quickly view the RPM update, so set the item to 20Hz or 50Hz.
For data with slow changes such as pressure and temperature, a lower rate, such as 5Hz, is used.
Note: Currently the LCD display is updated about 20 times per second, so it is useless to broadcast data faster than this. See the screen-
Capture the settings that need to be changed in TunerStudio for MegaSquirt3 and Megasquirt2-Extra.
Please note that MegaSquirt2-
Extra does not support a wide range of information provided by MegaSquirt3.
Burn the new settings to MegaSquirt, then power off the MegaSquirt and re-power on the MegaSquirt and dashboard displays.
If everything is OK, you should now be able to touch the screen twice, switch to the data list screen and display UpT, voltage and other information correctly.
If everything is 0, you will have a can bus communication problem.
I will let you figure out how you want to install the monitor in the car;
Whether it\'s on a tablet or in a 3D print case, etc.
Although for the clearest viewing, I do suggest it shade in direct sunlight and stay away from the summer heat (
If this is a problem in your area).
I have designed a 3D printable case, but it has not been tested so far.
You can find the design here, download the STEP file and so on: onform-
The MegaSquirt dashboard display housing display should be fused from a separate (5A)
Ignition power circuit.
Later, some simpler screen configuration methods may be added, but it\'s hard-
Code in firmware.
Unfortunately, this makes the configuration of people who are not very familiar with working with data in C quite complicated.
In addition, there is a need to know how to package data into CAN packets.
For information on how to get data from the CAN packet and configure the screen, see the comments in the source code.