Wrap-Up & Next Steps
What You Learned Today
The Mental Model
Create → Configure → Control — it works for every peripheral, every HAL, every driver crate.
| Step | What You Do | Where in the Docs |
|---|---|---|
| Create | Instantiate a driver | Struct page → new() or builder |
| Configure | Set behavior options | Config structs, enums |
| Control | Read/write/interact | Trait implementations, methods |
The Ecosystem Layers
BSP → Driver Crates → embedded-hal → HAL → PAC → Hardware
You've worked at every level. You know what each layer does and how to read its documentation.
The Workflow
Working example → Read the docs → Adapt → Extend
The example shows ONE way. The docs show ALL ways. Your job is to explore.
Where to Go From Here
Keep Learning with uFerris
Your uFerris board has more peripherals to explore:
- SPI — faster serial communication (displays, SD cards)
- ADC — read analog values (potentiometers, light sensors)
- PWM — control LED brightness, servo motors
- ESP-NOW — wireless communication between ESP32 devices
Same pattern: find the module in esp-hal docs, Create → Configure → Control.
Level Up with Async
Embassy is an async runtime for embedded Rust. Instead of interrupt handlers with mutexes, you write async/await code:
#![allow(unused)] fn main() { // Instead of interrupt handler + AtomicBool flag: let level = button.wait_for_falling_edge().await; led.toggle(); }
Check out embassy.dev and the embassy-executor crate.
Stay Connected
- The Embedded Rustacean — newsletter + blog
- Embedded Rust books by Omar Hiari
- esp-rs Matrix channel — community help for ESP32 Rust
- Rust Embedded Working Group — rust-embedded.github.io
Keep Your uFerris Board
The board is yours. Experiment, break things, build projects. The best way to learn is to have a problem you actually want to solve.
Thank you for attending. Now go build something.