Implementation of Conway's Game of Life Rust Bare Metal.
The implementation is based on Rust no_std, using mipidsi crate.
cd esp32-s3-box-3-minimal cargo run --release Rust Bare Metal no_std with Bevy ECS no_std on 1.47 inch ESP32-C6 LCD Waheshare with DMA and framebuffer - Conway's Game of Life:
2025-03-bevy-no_std.mp4
The implementation is based on Rust no_std and Bevy ECS no_std, plus mipidsi crate.
cd waveshare-esp32-c6-lcd-1_28 cargo run --release Rust Bare Metal no_std with Bevy ECS no_std on Waheshare ESP32-S3 LCD Touch 1.28 inch with DMA and framebuffer:
The implementation is based on Rust no_std and Bevy ECS no_std, plus mipidsi crate.
cd waveshare-esp32-s3-touch-lcd-1_28 cargo run --release Rust Bare Metal no_std with Bevy ECS no_std on Waveshare ESP32-S3 Touch AMOLED 1.8 inch with DMA and framebuffer:
The implementation is based on Rust no_std and Bevy ECS no_std, featuring a high-density 368Γ448 pixel AMOLED display with enhanced font visibility.
cd waveshare-esp32-s3-touch-amoled-1_8 cargo run --release Controls: Press button under display to reset the game state (GPIO 41).
The implementation is based on Rust no_std, using mipidsi crate and Bevy ECS. It requires es-rs toolchain for ESP32-S3 version at least 1.85, because of edition 2024.
Installation of the toolchain:
cargo install espup espup install --toolchain-version 1.85.0.0 source ~/export-esp.sh Build:
cd m5stack-atom-s3 cargo run --release Controls: Press the button under display to reset the game state.
Note: Press Boot button and reset to enter download mode.
The implementation is based on Rust no_std, using mipidsi crate and Bevy ECS.
Installation of the toolchain:
espup install --toolchain-version 1.85.0.0 source ~/export-esp.sh Build:
cd m5stack-cores3 cargo run --release The implementation is based on Rust no_std, using mipidsi crate and Bevy ECS. It requires es-rs toolchain for ESP32-S3 version at least 1.85, because of edition 2024.
Installation of the toolchain:
cargo install espup espup install --toolchain-version 1.85.0.0 source ~/export-esp.sh Build:
cd esp32-s3-box-3 cargo run --release ESP32-S3-LCD-Ev-Board is more complex when it comes to the display. Initialization sequence for the display is:
- initialize I2C
- tunnel SPI commands via I2C bus
- configure 16 GPIOs to transfer data
- all data must be transferred in one transaction (requires PSRAM)
The timing of the display must be precise, otherwise incorrect data will be displayed.
Working configuration of timing:
// Configure the RGB display let config = Config::default() .with_clock_mode(ClockMode { polarity: Polarity::IdleLow, phase: Phase::ShiftLow, }) .with_frequency(Rate::from_mhz(10)) .with_format(Format { enable_2byte_mode: true, ..Default::default() }) .with_timing(FrameTiming { // active region horizontal_active_width: 480, vertical_active_height: 480, // extend total timings for larger porch intervals horizontal_total_width: 600, // allow long back/front porch horizontal_blank_front_porch: 80, vertical_total_height: 600, // allow longer vertical blank vertical_blank_front_porch: 80, // maintain sync widths hsync_width: 10, vsync_width: 4, // place HSYNC pulse well before active data hsync_position: 10, }) .with_vsync_idle_level(Level::High) .with_hsync_idle_level(Level::High) .with_de_idle_level(Level::Low) .with_disable_black_region(false);This is only bare metal implementation, does not contain Bevy ECS in this version.
cargo install espup espup install --toolchain-version 1.85.0.0 source ~/export-esp.sh Build:
cd esp32-s3-lcd-ev-board cargo run --release Controls: Press button rotary button to reset the game state (GPIO 9).
cd esp32-c3-lcdkit cargo run --release Board: SDL_C_W_S3 Display: RGB Schukat Smartwin display-concept
The implementation is based on Embassy Async Rust no_std with RGB interface. Both cores of ESP32-S3 are used. One core is handling DMA transfers to the display, while the other core is running the game logic.
RGB displays are very time-sensitive, so the timing of the display must be precise, that's also why one core is dedicated to the display.
The display configuration is stored in EEPROM for this specific display type.
Run:
cd esope-sld-c-w-s3 cargo r -r The board requires connection using ESP-Prog. You need to switch the board into boot mode. Press and hold the BOOT button, then press the RESET button, then release the BOOT button. Press the RESET button again to start the program.
This is experimental implementation for WASM.
cd wasm cargo run Then navigate to http://localhost:8000/ in your browser.
This board is no longer in production, yet it's still used by many developers.
The implementation is based on Rust no_std, using mipidsi crate and Bevy ECS. It requires es-rs toolchain for ESP32-S3 version at least 1.88, because of edition 2024.
Installation of the toolchain:
cargo install espup espup install --toolchain-version 1.88.0.0 source ~/export-esp.sh Build:
cd esp32-wrover-kit cargo run --release This repository includes a comprehensive Rust-based maintenance tool that replaces shell scripts for managing multiple ESP32 embedded projects.
-
Clone the repository:
git clone <repository-url> cd esp32-conways-game-of-life-rs
-
Install dependencies:
# Install cargo-edit for dependency updates cargo install cargo-edit # Build the xtask tool cargo build
-
Set up ESP-IDF environment (required for building):
source ~/projects/esp-idf/export.sh
-
Fix workspace issues (one-time setup):
cargo xtask fix-workspace
cargo xtask listShows all discovered ESP32 projects and their status.
# Build all projects (stops on first failure) cargo xtask build # Build all projects (continue even if some fail) cargo xtask build --keep-going # Build with verbose output cargo xtask build --verbose# Preview available updates cargo xtask update --dry-run # Update to compatible versions only cargo xtask update # Include potentially breaking updates cargo xtask update --incompatible # Preview breaking changes cargo xtask update --dry-run --incompatible# Format all projects using cargo fmt cargo xtask format # Format with verbose output cargo xtask format --verbose# Run: format β update (compatible) β build cargo xtask all # Run all tasks, continue on failures cargo xtask all --keep-going# Add empty [workspace] sections to prevent conflicts cargo xtask fix-workspace# Preview what changes would be made cargo xtask update-bootloader --dry-run --verbose # Update ESP-IDF bootloader support and Bevy ECS to latest version cargo xtask update-bootloaderAutomatically adds ESP-IDF bootloader support with correct chip-specific features and updates Bevy ECS to the latest version across all projects.
The tool is designed for easy extension. To add new commands:
- Add command to
Commandsenum inxtask/src/main.rs - Implement the command handler function
- Add the match arm in
main()









