#![no_std]
#![no_main]

// https://docs.rs/ssd1306/0.9.0/ssd1306/index.html
// https://docs.esp-rs.org/esp-hal/esp-hal/0.23.1/esp32c3/esp_hal/i2c/master/index.html
use core::fmt::Write;
use esp_hal::clock::CpuClock;
use esp_hal::i2c::master::I2c;
use esp_hal::main;
use esp_hal::time::{Duration, Instant};
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
    loop {}
}

#[main]
fn main() -> ! {
    // cargo install esp-generate
    // esp-generate --chip=esp32c3
    // generator version: 0.3.1

    let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
    let _peripherals = esp_hal::init(config);

    let i2c = I2c::new(
        _peripherals.I2C0,
        esp_hal::i2c::master::Config::default(),
    )
    .unwrap()
    .with_sda(_peripherals.GPIO1)
    .with_scl(_peripherals.GPIO2);

    let interface = I2CDisplayInterface::new(i2c);
    let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
        .into_terminal_mode();
    display.init().unwrap();
    display.clear().unwrap();

    loop {
        let delay_start = Instant::now();
        while delay_start.elapsed() < Duration::from_millis(500) {}
        display.write_str(unsafe { core::str::from_utf8_unchecked(&[97]) });
    }
}
Loading
esp32-c3-devkitm-1