use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
/* Display and graphics */
use ili9341::{DisplaySize240x320, Ili9341, Orientation};
use display_interface_spi::SPIInterfaceNoCS;
use embedded_graphics::mono_font::MonoTextStyle;
use embedded_graphics::pixelcolor::*;
use embedded_graphics::prelude::*;
use embedded_graphics::primitives::*;
use embedded_graphics::text::*;
use embedded_graphics::image::Image;
use embedded_graphics::geometry::*;
use embedded_graphics::draw_target::DrawTarget;
use embedded_hal;
use profont::{PROFONT_24_POINT, PROFONT_18_POINT};
use esp_hal::{
clock::ClockControl,
gpio::*,
prelude::*,
spi,
timer::TimerGroup,
Rtc,
IO,
Delay,
};
fn main() {
esp_idf_sys::link_patches();
let peripherals = Peripherals::take().unwrap();
/* Some stuff for correct orientation and color on ILI9341 */
pub enum KalugaOrientation {
Portrait,
PortraitFlipped,
Landscape,
LandscapeVericallyFlipped,
LandscapeFlipped,
}
impl ili9341::Mode for KalugaOrientation {
fn mode(&self) -> u8 {
match self {
Self::Portrait => 0,
Self::LandscapeVericallyFlipped => 0x20,
Self::Landscape => 0x20 | 0x40,
Self::PortraitFlipped => 0x80 | 0x40,
Self::LandscapeFlipped => 0x80 | 0x20 | 0x08,
}
}
fn is_landscape(&self) -> bool {
matches!(self, Self::Landscape | Self::LandscapeFlipped | Self::LandscapeVericallyFlipped)
}
}
println!("About to initialize the SPI LED driver ILI9341");
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
/* Set corresponding pins */
let mosi = io.pins.gpio7;
let cs = io.pins.gpio2;
let rst = io.pins.gpio10;
let dc = io.pins.gpio3;
let sck = io.pins.gpio6;
let miso = io.pins.gpio8;
let backlight = io.pins.gpio4;
/* Then set backlight (set_low() - display lights up when signal is in 0, set_high() - opposite case(for example.)) */
let mut backlight = backlight.into_push_pull_output();
//backlight.set_low().unwrap();
/* Configure SPI */
let spi = spi::Spi::new(
peripherals.SPI2,
sck,
mosi,
miso,
cs,
400u32.MHz(),
spi::SpiMode::Mode0,
&mut system.peripheral_clock_control,
&mut clocks,
);
let di = SPIInterfaceNoCS::new(spi, dc.into_push_pull_output());
let reset = rst.into_push_pull_output();
let mut delay = Delay::new(&clocks);
let mut display = Ili9341::new(
di,
reset,
&mut delay,
KalugaOrientation::LandscapeFlipped,
DisplaySize240x320
).unwrap();
println!("Initialized");
display.clear(Rgb565::WHITE).unwrap();
println!("Hello, world!");
Text::new("Hello, world!",
display.bounding_box().center() - Size::new(display.bounding_box().size.width/2 - 10, 0),
MonoTextStyle::new(&PROFONT_24_POINT, Rgb565::BLACK))
.draw(&mut display)
.unwrap();
}