Skip to content

Display Interaction

This section explains how the FreeDiLCD software on the mainboard interacts with the display. Understanding this relationship is crucial for avoiding errors and issues.

The Klipper firmware is installed on the Armbian operating system.

My custom software, called FreeDiLCD (X3seriesLCD before v1.20), runs on this system and communicates with Klipper via the official Moonraker API.

Through this connection, it receives real-time information about the printer's status, subsystems (e.g., the toolhead), and various components (like the nozzle temperature, fan speed, etc.).

It can also control these components, such as adjusting temperatures etc..

This information is then exchanged with the display.

Despite what you might think, the screen is not merely a passive display. In fact, it's an independent device with its own processor and a display.
You can think of it as a little tablet that is connected to the mainboard. It can not receive visuals from the mainboard. Only UART data is transmitted between the two.
This means that every graphic you see on the screen has to be stored in the display's firmware. Thumbnails are the exception and have been tricky to implement. The lightning-fast result speaks for itself 🚀


The communication scructure:

flowchart LR
    A[Klipper] <--> B[Moonraker]
    B -->|Data| C[FreeDiLCD Software]
    C[FreeDiLCD Software] <--> D[Screen]
    D -->|Feedback| E[User]
    E -->|Input| D
    C -->|Commands| B

What does that mean?

Unlike HDMI, where visual signals are transmitted to the display, only information about the components is exchanged via a UART serial interface. The display processes this information and presents it through a user interface on its screen. For this reason, the display's firmware had to be rewritten from scratch.

Once you understand the relationship between the FreeDiLCD software (on the mainboard with Klipper) and the display firmware, it becomes clear why new functions in the software may not be supported by the display. This happens because those functions did not exist previously and are not (yet) backed into the the firmware -> the software is now sending unknown information to the display.

The display simply doesnt know how to handle it.

It is therefore important that the software version of FreeDiLCD always matches the firmware of the display to ensure smooth communication between the two. Luckily, the software always ensures that the display firmware is compatible and performs a firmware update if necessary to match the current version.
Making your life easier!

In case you want to have a direct look anyway:
I always publish the new FreeDi LCD software files in the FreeDiLCD directory, and the new FreeDi LCD screen firmwares in the screen_firmwares directory.