In this project I am playing with ESP32 C3 RISC-V based board, with the std
library (another option would be using the no-std
- bare-metal -, but I discarded it because I want to be as close to higher level application development as possible).
I started my journey from the official Rust on ESP Book.
In case you want to go fast without going through the book, try following the next howto steps, which will let you run this project in your ESP32 C3 RISC-V based board.
- Rust installation via
rustup
, and required dependencies viaespup
:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install ldproxy
rustup toolchain install nightly --component rust-src # since we are targetting RISC-V based boards
cargo install espup
espup install # IMPORTANT to add to your shell profile the following line: . $HOME/export-esp.sh
cargo install cargo-espflash
cargo install espflash
cargo install cargo-espmonitor
cargo install espmonitor
NOTE: as already mentioned, and if any issue, please follow the book mentioned above 🫰
- Check that the board is connected and ready to be used. In the new generated repo path, run:
cargo espflash board-info
- Setup the IDE extensions:
Since I am using VSCode I installed the following extensions for Rust.
And, the CodeLLDB
extension is recommended.
Once the base setup is done, make sure to create the cfg.toml
from the cfg.toml.template
template file, accordingly. Then:
With or without IDE, one can start developing by building and flashing in debug mode to the selected serial-connected device, and monitor the output on that serial:
cargo run
Here, thanks to using Rust, errors are pretty clear and helpful, if any. Have fun! 🦀
Once the development is ready, one can release an optimized binary and flash it with the following command:
cargo espflash --release
If requiring to also check the serial monitor, run instead:
cargo espflash --release --monitor
In any case, I recommend reading the book, since this list of steps above is merely meant as a documentation recap for this repo's context.
After setting up the development environment, I did also generate this base repo via cargo generate
with the official esp-idf-template
template:
cargo install cargo-generate
cargo generate --git https://github.com/esp-rs/esp-idf-template cargo
NOTE: you will need to give it a project
name, select the MCU esp32c3
, set true
for STD support, set false
for DevContainers, and select ESP-IDF
native build version (I did select v4.4, which was the current stable back then).
And, once I got the base setup, then I continued over Writing std applications.
I also based my learnings on the following repositories:
This setup is great because you keep using the same main tools Rust provides, and all cross-compiled! 🚀