How to Display a Message on LCD Using MicroPython for ESP32 and ESP8266

In this project, you’ll learn How to Display a Message on LCD Using MicroPython for ESP32 and ESP8266. We’ll guide you through displaying a simple message like “Hello World” on an LCD screen using the I2C protocol. This project is perfect for absolute beginners and will help you understand string declaration and printing in MicroPython.

What is String Declaration in MicroPython for ESP32 and ESP8266?

String declaration in MicroPython for ESP32 and ESP8266 is a way of storing and manipulating text. You’ll learn how to declare a string and display it on an LCD screen. This simple concept is the foundation for many projects involving text or messages in embedded systems.

Why Display a Message on an LCD Using MicroPython for ESP32 and ESP8266?

This project will help you:

  • Understand how to interface an LCD screen with ESP32 or ESP8266 using MicroPython.
  • Learn to declare and print strings in MicroPython, an essential skill for any project involving text.
  • Get comfortable using I2C communication to control hardware devices.
  • Display messages or data, which is useful for many IoT or embedded projects.

MicroPython Syntax for Displaying a Message on LCD:

Operation Syntax Example
Import necessary libraries import lcd (depends on library used) import i2c_lcd
Initialize I2C communication i2c = I2C(…) i2c = machine.I2C(…)
Set cursor position lcd.move_to(column, row) lcd.move_to(0, 0)
Display a message lcd.putstr(“your message”) lcd.putstr(“Hello World”)

Components Required for Displaying Message on LCD Using MicroPython for ESP32 and ESP8266:

  • ESP32 or ESP8266
  • 16×2 I2C LCD Display
  • I2C Module (if using I2C LCD)
  • Jumper Wires
  • Breadboard

Circuit Diagram:

For I2C LCD:

   LCD I2C Module        ESP32/ESP8266

    ————–        ————–

    VCC   ————->  3.3V

    GND   ————->  GND

    SDA   ————->  GPIO21 (SDA)

    SCL   ————->  GPIO22 (SCL)

 

Circuit Connection Table for ESP32 and ESP8266 with I2C LCD:

Component LCD Pin ESP32/ESP8266 Pin Explanation
LCD VCC VCC 3.3V Powers the LCD
LCD GND GND GND Ground connection
LCD SDA SDA GPIO21 Data line for I2C communication
LCD SCL SCL GPIO22 Clock line for I2C communication

Warnings:

  • Make sure the LCD’s I2C address is correct (common addresses are 0x27 or 0x3F).
  • Incorrect wiring of SDA and SCL pins can prevent communication between the microcontroller and the LCD.

Circuit Analysis:

This project uses the I2C protocol to communicate between the ESP32 or ESP8266 and the 16×2 LCD. The SDA and SCL pins on the LCD module are connected to the corresponding pins on the ESP32 or ESP8266, enabling text to be displayed on the screen.

Installing MicroPython and Necessary Libraries:

Install MicroPython on your ESP32 or ESP8266 using Thonny or esptool:
esptool.py –chip esp32 erase_flash

esptool.py –chip esp32 write_flash -z 0x1000 esp32-20210902-v1.17.bin

  1. Libraries Needed: For this project, you’ll need the lcd_api.py and i2c_lcd.py libraries. Upload them to your ESP32 or ESP8266 using your MicroPython IDE.

Writing the MicroPython Code to Display a Message on LCD:

import machine

import time

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

 

# Initialize I2C communication

i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))

 

# LCD settings (common address for I2C LCD is 0x27 or 0x3F)

lcd_addr = 0x27

lcd_cols = 16

lcd_rows = 2

 

# Initialize the LCD

lcd = I2cLcd(i2c, lcd_addr, lcd_rows, lcd_cols)

 

# Clear the LCD

lcd.clear()

 

# Display the “Hello World” message

lcd.putstr(“Hello World”)

 

# Optional delay to hold the message

time.sleep(10)

 

Running the Code and Checking the Output:

  1. Upload the code to your ESP32 or ESP8266 using Thonny or another MicroPython IDE.
  2. Observe the LCD screen: You should see the message “Hello World” displayed.
  3. Modify the message: Change the string inside lcd.putstr() to display custom messages.

Explanation of the Code:

  1. I2C Initialization: We initialize the I2C communication on GPIO21 (SDA) and GPIO22 (SCL) for the ESP32.
  2. LCD Setup: The LCD is configured with its I2C address and dimensions (16 columns, 2 rows).
  3. Displaying the Message: The lcd.putstr() function is used to display the message “Hello World” on the LCD screen.
  4. Optional Delay: You can add a delay using time.sleep() to keep the message on the screen longer.

Expanding the Project:

  • Scrolling Text: Add functionality to scroll longer text messages across the screen.
  • Real-Time Data Display: Use sensors (e.g., temperature sensors) to show real-time data on the LCD.
  • Multi-Line Display: Modify the code to display messages on both lines of the LCD.

Common Problems and Solutions:

  1. Problem: The LCD screen does not display the message.
    • Solution: Ensure that the correct I2C address is used for the LCD. Use i2c.scan() to verify the address.
  2. Problem: The LCD text is garbled or cut off.
    • Solution: Ensure that the number of columns and rows in your code matches the LCD specifications.
  3. Problem: The code throws an error related to the LCD libraries.
    • Solution: Make sure you’ve uploaded the correct lcd_api.py and i2c_lcd.py libraries to your ESP32 or ESP8266.

FAQ:

Q: Can I use a non-I2C LCD for this project?
A: Yes, but you will need to use more GPIO pins and adapt the code to support non-I2C LCDs.

Q: Can I use a larger LCD, like a 20×4 display?
A: Yes, you can use a larger LCD. Just make sure to update the lcd_cols and lcd_rows variables in the code to match your display dimensions.

Q: How do I find the I2C address of my LCD?
A: You can use the i2c.scan() function in MicroPython to scan for devices connected via I2C. The address will be printed in the console. Common I2C addresses are 0x27 or 0x3F.

Conclusion:

In this project, you successfully displayed a message on an LCD screen using MicroPython for ESP32 and ESP8266. You learned how to declare and print strings, how to interface with an I2C LCD, and how to use I2C communication to display messages. This foundational project is perfect for building more complex applications that display real-time data or information on LCD screens. From here, you can expand your knowledge by incorporating sensors or creating dynamic messages.