#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_println::println;
use hal::{clock::ClockControl, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc, Delay, spi, IO};
use display_interface_spi::SPIInterfaceNoCS;
use embedded_graphics::{
mono_font::{ascii::FONT_8X13, MonoTextStyle},
prelude::{Point, RgbColor},
text::Text,
Drawable,
};
#[entry]
fn main() -> ! {
let peripherals = Peripherals::take();
let mut system = peripherals.SYSTEM.split();
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
// Disable the RTC and TIMG watchdog timers
let mut rtc = Rtc::new(peripherals.RTC_CNTL);
let timer_group0 = TimerGroup::new(
peripherals.TIMG0,
&clocks,
&mut system.peripheral_clock_control,
);
let mut wdt0 = timer_group0.wdt;
let timer_group1 = TimerGroup::new(
peripherals.TIMG1,
&clocks,
&mut system.peripheral_clock_control,
);
let mut wdt1 = timer_group1.wdt;
rtc.rwdt.disable();
wdt0.disable();
wdt1.disable();
println!("starting!");
let mut delay = Delay::new(&clocks);
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
let spi = spi::Spi::new_no_cs_no_miso(
// BUG: Only SPI2 for ESP32-S3 works in Wokwi, SPI3 won't display anything
peripherals.SPI2,
io.pins.gpio7,
io.pins.gpio6,
60u32.MHz(),
spi::SpiMode::Mode0,
&mut system.peripheral_clock_control,
&clocks,
);
let di = SPIInterfaceNoCS::new(spi, io.pins.gpio4.into_push_pull_output());
delay.delay_ms(500u32);
let mut display = match mipidsi::Builder::ili9342c_rgb565(di)
.with_display_size(320, 240)
.with_orientation(mipidsi::Orientation::PortraitInverted(false))
.with_color_order(mipidsi::ColorOrder::Bgr)
.init(&mut delay, Some(io.pins.gpio48.into_push_pull_output())) {
Ok(display) => display,
Err(e) => {
// Handle the error and possibly exit the application
panic!("Display initialization failed");
}
};
Text::new(
"Hello from Rust",
Point::new(80, 110),
MonoTextStyle::new(&FONT_8X13, RgbColor::GREEN),
)
.draw(&mut display)
.unwrap();
loop {}
}