zeroclaw/firmware/zeroclaw-esp32-ui/README.md

2.5 KiB

ZeroClaw ESP32 UI Firmware

Slint-based graphical UI firmware scaffold for ZeroClaw edge scenarios on ESP32.

Scope of This Crate

This crate intentionally provides a minimal, bootable UI scaffold:

  • Initializes ESP-IDF logging/runtime patches
  • Compiles and runs a small Slint UI (MainWindow)
  • Keeps display and touch feature flags available for incremental driver integration

What this crate does not do yet:

  • No full chat runtime integration
  • No production display/touch driver wiring in src/main.rs
  • No Wi-Fi/BLE transport logic

Features

  • Slint UI scaffold suitable for MCU-oriented iteration
  • Display feature flags for ST7789, ILI9341, SSD1306
  • Touch feature flags for XPT2046 and FT6X36 integration planning
  • ESP-IDF baseline for embedded target builds

Project Structure

firmware/zeroclaw-esp32-ui/
├── Cargo.toml          # Rust package and feature flags
├── build.rs            # Slint compilation hook
├── .cargo/
│   └── config.toml     # Cross-compilation defaults
├── ui/
│   └── main.slint      # Slint UI definition
└── src/
    └── main.rs         # Firmware entry point

Prerequisites

  1. ESP Rust toolchain

    cargo install espup
    espup install
    source ~/export-esp.sh
    
  2. Flashing tools

    cargo install espflash cargo-espflash
    

Build and Flash

Default target (ESP32-C3, from .cargo/config.toml)

cd firmware/zeroclaw-esp32-ui
cargo build --release
cargo espflash flash --release --monitor

Build for ESP32-S3 (override target)

cargo build --release --target xtensa-esp32s3-espidf

Feature Flags

# Switch display profile
cargo build --release --features display-ili9341

# Enable planned touch profile
cargo build --release --features touch-ft6x36

UI Layout

The current ui/main.slint defines:

  • StatusBar
  • MessageList
  • InputBar
  • MainWindow

These components are placeholders to keep future hardware integration incremental and low-risk.

Next Integration Steps

  1. Wire real display driver initialization in src/main.rs
  2. Attach touch input events to Slint callbacks
  3. Connect UI state with ZeroClaw edge/runtime messaging
  4. Add board-specific pin maps with explicit target profiles

License

MIT - See root LICENSE

References