Awesome
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.
- <b>referecnce projects</b>: A huge collection of embedded Rust projects that I copy code from
- 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
- p0-output: Make the "Hellow World" of embedded systems: a
Blinky application
to periodically turn an LED on and off - p1-input: Add a button to turn the blinking logic on and off
- p2-threads: Move the button logic and LED logic to their own thread and pass messages between threads with crossbeams channel
- p3-adc: Read an analog-to-digital converter channel and print out the value
- p4-dht11: Read a DHT11 for temperature and humidity data
- p5-i2c: Configure and use a SX1509 GPIO Expander through I2C
- p6-spi: Write a string to a uSD card over SPI using embedded-sdmmc crate
- p7-uart: Receiver characters from the UART and send them back when we detect a carriage return
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:
- DMA
- Timer usage
- Install Rust and associated build tools
- Start a project using the 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
- Build the
Hello World
program by runningcargo 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
- Flash the ESP32 with the build artifact:
espflash /dev/ttyACM0 target/riscv32imc-esp-espidf/debug/project
- Connect to ESP32 and monitor
espmonitor /dev/ttyACM0
</details>
<details>
<summary>Misc</summary>
Pull in code for submodules with:
git submodule update --init --recursive
</details>
<details>
<summary>Links</summary>