"Hello, Rust!" in LCD Display
In this program, we will just print "Hello, Rust!" text in the LCD display.
HD44780 Drivers
During my research, I came across many Rust crates for controll the LCD Display, but these two stood out as working well. In this program, we will start by using the hd44780-driver
crate.
Project from template
To set up the project, run:
cargo generate --git https://github.com/ImplFerris/pico2-template.git
When prompted, give your project a name, like "lcd-hello" and select RP-HAL
as the HAL.
Then, navigate into the project folder:
cd PROJECT_NAME
# For example, if you named your project "lcd-hello":
# cd lcd-hello
Additional Crates required
Update your Cargo.toml to add these additional crate along with the existing dependencies.
#![allow(unused)] fn main() { hd44780-driver = "0.4.0" }
Additional imports
#![allow(unused)] fn main() { use hd44780_driver::HD44780; }
Mapping Pico and LCD Pins
We connect GPIO16 to the RS pin, GPIO17 to the Enable (E) pin, and GPIO18-21 to the D4-D7 data pins of the LCD. We're using only 4 data pins since we will be working on 4-bit mode.
#![allow(unused)] fn main() { // Read Select Pin let rs = pins.gpio16.into_push_pull_output(); // Enable Pin let en = pins.gpio17.into_push_pull_output(); // Data Pins let d4 = pins.gpio18.into_push_pull_output(); let d5 = pins.gpio19.into_push_pull_output(); let d6 = pins.gpio20.into_push_pull_output(); let d7 = pins.gpio21.into_push_pull_output(); }
Write Text to the LCD
Here, we initialize the LCD module, clear the screen, and then write the text "Hello, Rust!".
#![allow(unused)] fn main() { // LCD Init let mut lcd = HD44780::new_4bit(rs, en, d4, d5, d6, d7, &mut timer).unwrap(); // Clear the screen lcd.reset(&mut timer).unwrap(); lcd.clear(&mut timer).unwrap(); // Write to the top line lcd.write_str("Hello, Rust!", &mut timer).unwrap(); }
Clone the existing project
You can clone (or refer) project I created and navigate to the lcd-hello
folder.
git clone https://github.com/ImplFerris/pico2-rp-projects
cd pico2-projects/lcd-hello/