sky-ili9341 0.1.1

A high-performance, async-ready ILI9341 TFT display driver for embedded Rust
Documentation

sky-ili9341

Async-ready ILI9341 TFT display driver for embedded Rust.

Crates.io Documentation License

Features

  • Blocking and async SPI interfaces (embedded-hal 1.0 / embedded-hal-async)
  • Builder pattern for flexible configuration (orientation, color order, inversion, offsets)
  • Correct MADCTL implementation per ILI9341 datasheet — no hardcoded BGR
  • Optimized drawing with 512-byte buffered SPI writes and fast rectangle fills
  • embedded-graphics-core DrawTarget support (optional graphics feature)
  • defmt logging support (optional defmt feature)
  • Board presets Made for SkyRizz E32
  • no_std — works on any embedded target (ESP32, nRF52, STM32, RP2040, etc.)

Cargo Features

Feature Default Description
graphics Enables embedded-graphics-core DrawTarget implementation
async Enables async interface, builder, and display types via embedded-hal-async
defmt Enables defmt::Format derives for error and option types

Quick Start

use sky_ili9341::{Builder, SpiInterface, Orientation, ColorOrder};

let di = SpiInterface::new(spi, dc);
let mut display = Builder::new(di)
    .orientation(Orientation::Landscape)
    .color_order(ColorOrder::Bgr)
    .init(&mut reset_pin, &mut delay)
    .unwrap();

display.clear_screen(0x0000).unwrap(); // Black

Board Presets

Skip manual configuration for popular boards:

use sky_ili9341::{Builder, SpiInterface, presets};

// SkyRizz E32 Board (primary reference board)
let di = SpiInterface::new(spi, dc);
let mut display = Builder::with_options(di, presets::skyrizz_e32())
    .init(&mut reset, &mut delay)
    .unwrap();

Available presets:

  • skyrizz_e32()SkyRizz E32 Board 2.4" 240×320 (primary reference board)
  • esp_wrover_kit() — ESP-WROVER-KIT v4.1
  • esp32_2432s028r() — "Cheap Yellow Display" (CYD) 2.8"
  • m5stack() — M5Stack Core
  • m5stack_core2() — M5Stack Core2
  • esp32_s2_kaluga() — ESP32-S2-Kaluga-1
  • generic_240x320() — Generic ILI9341 with default settings

Async (Embassy)

Enable the async feature for non-blocking SPI transfers — ideal for ESP32 with embassy where DMA runs in the background:

use sky_ili9341::{AsyncBuilder, AsyncSpiInterface, Orientation};

let di = AsyncSpiInterface::new(spi, dc);
let mut display = AsyncBuilder::new(di)
    .orientation(Orientation::Landscape)
    .init(&mut reset_pin, &mut delay)
    .await
    .unwrap();

display.clear_screen(0xF800).await.unwrap(); // Red

Using with embedded-graphics

The graphics feature (on by default) implements DrawTarget:

use embedded_graphics_core::prelude::*;
use embedded_graphics_core::pixelcolor::Rgb565;

display.clear(Rgb565::BLACK).unwrap();

Supported Targets

Any chip with embedded-hal 1.0 SPI support:

  • ESP32 family (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6) via esp-hal
  • nRF52 family (nRF52840, nRF52832) via nrf-hal or embassy-nrf
  • STM32 family via stm32-hal or embassy-stm32
  • RP2040/RP2350 via rp-hal or embassy-rp

License

Licensed under MIT License.