ESP32-C3 Rust Tutorials
Various embedded Rust tutorials
using the ESP32-C3. We'll work towards making a remote data logger
by first implementing peripherals we will need to build the larger project.
Each tutorial below has a YouTube video
link where I will start with a blank project and implement a peripherals using the latest esp-idf-hal version.
Repo organization
- Tutorials: Source code for the YouTube tutorials
- WIP: Half-baked crates that may have some useful code in the future
- docs: Various datasheets, books, and technical manuals
- submodules: All of the submodules for this repository.
- Data-Logger-PCB: KiCAD hardware designs for ESP32-C3 data logger PCB
Part 0: Remote Data Logger MVP
Minimum viable product project where we'll implement all the peripherals and features we need for the data logger
- 4 ADC's
- 16 Digital I/O
- DHT11
- SD card logging
- UART CLI Shell
Peripheral Tutorials
Application Tutorials
- [p8-cli-shell](): Create a simple CLI shell to interact with the ESP32-C3 over UART
- [p9-adc-stream](): Configure ADC's to continuously read and make that data available to other parts of the application through a mutex
- [p10-log-values](): Log all the values read from the ADC's
- [p11-digital-stream](): Continuously read the SX1509 inputs and log to SD card
Part 1:
For the next part of the project we will add in features listed below:
- Debugging
- Logging
- FSM/HSM
- Wifi
- MQTT
- OTA
- Pub/sub
- Crash dumps & diagnostics
Other features I'd like to add but don't have a clear example for yet:
Development environment setup
1. [Install Rust](https://esp-rs.github.io/book/installation/installation.html) and associated build tools
2. Start a project using the [esp-idf-template](https://github.com/esp-rs/esp-idf-template) from the private repo home `dir`. I chose all the default options
```
# STD Project
cargo generate https://github.com/esp-rs/esp-idf-template cargo
# NO-STD (Bare-metal) Project
cargo generate https://github.com/esp-rs/esp-template
```
3. Build the `Hello World` program by running `cargo build` in the new project dir. This will take a while to build the first time:
```
cd esp32-rust
cargo build
...
Finished dev [optimized + debuginfo] target(s) in 6m 40s
```
4. Flash the ESP32 with the build artifact:
```
espflash /dev/ttyACM0 target/riscv32imc-esp-espidf/debug/project
```
5. Connect to ESP32 and monitor
```
espmonitor /dev/ttyACM0
```
Misc
[Singletons in Embedded Rust](https://docs.rust-embedded.org/book/peripherals/singletons.html)
Pull in code for submodules with:
```
git submodule update --init --recursive
```
Links
- [150+ ESP32 project](https://microcontrollerslab.com/esp32-tutorials-projects/)
- [Wokwi ESP32 Rust](https://wokwi.com/rust)
- [ESP32 Tutorials](https://embeddedexplorer.com/esp32/)
- [160+ ESP32 Projects, Tutorials, and Guides](https://randomnerdtutorials.com/projects-esp32/)