feat(esp32-ui): add ESP32 UI firmware base structure

- Add Slint-based ESP32 UI firmware project
- Support ESP32-S3 and ESP32-C3 targets
- Include ST7789 display driver support
- Add touch controller support (XPT2046, FT6X36)
- Include pin configuration and hardware requirements
- Add build scripts and cargo configuration

Co-authored-by: ZeroClaw Agent <zeroclaw_agent@zeroclaw.local>
This commit is contained in:
Zhang Liqiang 2026-02-17 19:02:32 +08:00 committed by Chummy
parent 6f36dca481
commit ffbb1d9087
4 changed files with 295 additions and 0 deletions

View file

@ -0,0 +1,75 @@
[package]
name = "zeroclaw-esp32-ui"
version = "0.1.0"
edition = "2021"
license = "MIT"
description = "ZeroClaw ESP32 UI firmware with Slint - Graphical interface for AI assistant"
authors = ["ZeroClaw Team"]
[dependencies]
# ESP-IDF framework
esp-idf-svc = "0.48"
log = { version = "0.4", default-features = false }
anyhow = "1.0"
# Slint UI - MCU optimized
slint = { version = "1.10", default-features = false, features = [
"compat-1-2",
"libm",
"renderer-software",
] }
# Display drivers
mipidsi = { version = "0.9", features = ["batch"] }
display-interface-spi = "0.5"
embedded-graphics = "0.8"
# Serialization for communication
serde = { version = "1.0", default-features = false, features = ["derive"] }
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
# Async support
embassy-sync = { version = "0.6", features = ["defmt"] }
embassy-futures = "0.1"
embassy-time = { version = "0.1", features = ["tick-hz-100", "defmt"] }
# WiFi networking
embedded-svc = "0.28"
# Capacitive touch driver (FT6X36)
ft6x36 = "0.2"
# I2C for touch controller
esp-idf-hal = "0.43"
# Utilities
heapless = "0.8"
nb = "1.1"
[build-dependencies]
embuild = { version = "0.31", features = ["elf"] }
slint-build = "1.10"
[features]
default = ["std", "display-st7789"]
std = ["esp-idf-svc/std", "serde/std", "serde_json/std"]
# Display selection (choose one)
display-st7789 = [] # 320x240 or 135x240
display-ili9341 = [] # 320x240
display-ssd1306 = [] # 128x64 OLED
# Input
touch-xpt2046 = [] # Resistive touch
touch-ft6x36 = [] # Capacitive touch
[profile.release]
opt-level = "s"
lto = true
codegen-units = 1
strip = true
panic = "abort"
[profile.dev]
opt-level = "s"