#![no_std]
#![no_main]
// original source:
// https://esp32.implrust.com/lcd/index.html
use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use esp_hal::clock::CpuClock;
use esp_hal::timer::timg::TimerGroup;
use hd44780_driver::memory_map::MemoryMap1602;
use hd44780_driver::setup::DisplayOptionsI2C;
use hd44780_driver::HD44780;
#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
loop {}
}
#[esp_hal_embassy::main]
async fn main(spawner: Spawner) {
// generator version: 0.3.1
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
let peripherals = esp_hal::init(config);
let timer0 = TimerGroup::new(peripherals.TIMG1);
esp_hal_embassy::init(timer0.timer0);
// TODO: Spawn some tasks
let _ = spawner;
let i2c_bus =
esp_hal::i2c::master::I2c::new(peripherals.I2C0, esp_hal::i2c::master::Config::default())
.unwrap()
.with_scl(peripherals.GPIO18)
.with_sda(peripherals.GPIO23)
.into_async();
let i2c_address = 0x27;
let Ok(mut lcd) = HD44780::new(
DisplayOptionsI2C::new(MemoryMap1602::new()).with_i2c_bus(i2c_bus, i2c_address),
&mut embassy_time::Delay,
) else {
panic!("failed to initialize display");
};
// Unshift display and set cursor to 0
lcd.reset(&mut embassy_time::Delay).unwrap();
// Clear existing characters
lcd.clear(&mut embassy_time::Delay).unwrap();
// Display the following string
lcd.write_str("impl Rust", &mut embassy_time::Delay)
.unwrap();
// Move the cursor to the second line
lcd.set_cursor_xy((0, 1), &mut embassy_time::Delay).unwrap();
// Display the following string on the second line
lcd.write_str("Hello, Ferris!", &mut embassy_time::Delay)
.unwrap();
loop {
Timer::after(Duration::from_secs(1)).await;
}
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4