ESPHome: Simplified LCD Menu Creation for Your Projects

Disclosure: This post contains affiliate links. If you click through and make a purchase, I will earn a commission, at no additional cost to you. Read my full disclosure here.

ESPHome has revolutionized DIY electronics, enabling enthusiasts without coding experience to create sophisticated projects. With the introduction of LCD menu creation in version 2022.11, ESPHome offers an intuitive way to interact with your nodes visually.


Commonality Among 3D Printers

If you have used a Prusa i3 or any Mendel-style 3D printer, you will be familiar with the type of LCD and menu this component uses. These character-based LCDs are ubiquitous in 3D printing and other DIY electronics projects due to their simplicity and affordability.

Photo of a Prusa i3 3D printer with a black and orange frame. The printer features dual spools of filament mounted on top, one orange and one black. It has an LCD screen with a rotary encoder knob on the lower front, used for navigating the printer's menu. The printing bed is positioned at the bottom, with the extruder assembly located above it, ready to print.

What Are Character-Based LCDs?

Character-based LCDs display alphanumeric characters and simple symbols. These screens are typically composed of a grid, such as 16×2 or 20×4, where each cell in the grid displays one character made up of a matrix of pixels. For instance, a standard character-based LCD might have a resolution of 8×5 pixels per character, which is sufficient to render basic text and symbols clearly.

Display Types and Features

  1. 16×2 LCDs:
    • Description: This type of display has two rows, each capable of showing 16 characters. It's one of the most common configurations used in various electronics projects.
    • Use Case: Ideal for simple readouts like temperature, humidity, or status messages.
    • Example: Displaying “Temperature: 25 °C” on the first row and “Humidity: 50%” on the second.
  2. 20×4 LCDs:
    • Description: This display has four rows, each accommodating 20 characters. It offers more space for information compared to the 16×2 displays.
    • Use Case: Suitable for more complex information displays, such as menus, multi-line messages, or detailed status updates.
    • Example: Displaying a menu with multiple options, like “1. Start Print”, “2. Preheat”, “3. Settings”, “4. About”.
Close-up view of a character-based LCD screen displaying a menu with four items: 'Speed: 100', 'Nozzle: 210', 'Bed: 60', and 'Fan speed: 255'. The screen background is blue with white characters, and an arrow points to the 'Fan speed' option, indicating it is currently selected.

Navigating these LCD menus typically requires an input device such as a rotary encoder or a five-button joystick controller.

  1. Rotary Encoders:
    • Function: Rotary encoders detect the rotation direction and speed, converting these into digital signals that can be processed by a microcontroller. Often, they include a push-button function when pressed.
    • Use Case: Used to scroll through menu items or adjust values like temperature settings.
    • Example: Rotating the knob scrolls through menu options, and pressing the knob selects an option.
  2. Five-Button Joystick Controllers:
    • Function: These controllers provide directional input (up, down, left, right) and a central select button.
    • Use Case: Suitable for navigating menus with multiple layers or adjusting multiple parameters.
    • Example: Moving the joystick up and down scrolls through the menu, left and right can change settings, and pressing the joystick selects an option.

Practical Implementation

In 3D printers, such as the Prusa i3, these character-based LCDs provide a simple and effective user interface. Users can start and stop prints, adjust settings, and monitor the printing process directly from the printer without needing a connected computer. The menus are straightforward, showing essential information and options that can be easily navigated using the rotary encoder or joystick.

For instance, when starting a print, the LCD menu might display options like “Select File”, “Preheat”, and “Start Print”. As the print progresses, it can show the remaining time, current layer, and temperature settings. This level of interactivity and information display is crucial for managing prints efficiently and ensuring high-quality results.

Advantages of Character-Based LCDs

The Significance of ESPHome's LCD Menu Component

While the LCD Menu component may initially seem like a niche feature, its potential is significant. Though controlling a smart home via a character-based display may not be appealing to everyone, this component is just a starting point. It's part of the broader Display Menu component, which hints at future expansions and capabilities.

Currently, character-based LCDs are supported through the LCD Menu integration. For now, users aiming to create information screens with devices like Waveshare's E-Paper displays need to use the Display Rendering Engine. As ESPHome evolves, we can expect more user-friendly integrations, making it easier to implement these components in various projects.

Lcd Menu Esphome 02

Supported Character-Based LCDs in ESPHome

ESPHome supports HD44780-compatible character-based LCDs, available in different sizes, typically with twenty columns and four rows or sixteen columns and two rows. These displays come in multiple versions, each with unique character support:

If the specific HD44780-compatible LCD version you need is unavailable, you can add up to eight custom characters. Tools like lcdchargen's Custom Character Generator make this process simple. Generate your custom characters and paste the output into your ESPHome YAML configuration.

Real-Life Example

Consider a smart home project where you want to control lighting and appliances through an LCD menu. With ESPHome, you can set up a menu to toggle lights or switches, view sensor readings, and more. This setup allows for a user-friendly interface, making your DIY project more accessible to users of all technical levels.


ESPHome’s LCD menu functionality opens up new possibilities for interactive DIY electronics projects. By supporting HD44780-compatible LCDs and providing easy integration, ESPHome makes it simpler to add visual interfaces to your projects. As the platform evolves, we can look forward to even more robust and versatile components.

For further reading, explore the official ESPHome documentation on the Display Menu component and start creating your custom LCD menus today.

A portrait photo oif Liam Alexander Colman, the author, creator, and owner of Home Assistant Guide wearing a suit.

About Liam Alexander Colman

is an experienced Home Assistant user who has been utilizing the platform for a variety of projects over an extended period. His journey began with a Raspberry Pi, which quickly grew to three Raspberry Pis and eventually a full-fledged server. Liam's current operating system of choice is Unraid, with Home Assistant comfortably running in a Docker container.
With a deep understanding of the intricacies of Home Assistant, Liam has an impressive setup, consisting of various Zigbee devices, and seamless integrations with existing products such as his Android TV box. For those interested in learning more about Liam's experience with Home Assistant, he shares his insights on how he first started using the platform and his subsequent journey.

Leave a comment

Share to...