Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dephy-io/dephy-esp32c3-rust-boilerplate
https://github.com/dephy-io/dephy-esp32c3-rust-boilerplate
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/dephy-io/dephy-esp32c3-rust-boilerplate
- Owner: dephy-io
- Created: 2023-10-25T17:36:02.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-25T18:25:46.000Z (about 1 year ago)
- Last Synced: 2024-08-02T20:44:21.591Z (4 months ago)
- Language: Rust
- Size: 20.5 KB
- Stars: 8
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-esp-rust - dephy-esp32c3-rust-boilerplate - A `std` ESP32-C3 application boilerplate on production with `tokio` for `async` support and examples for IO, Wi-Fi provisioning, eFuse, GPIO, I2C, HTTP, BLE advertising, etc. (Projects / `std`)
README
dephy-esp32c3-rust-boilerplate
---
Build DePHY application on ESP32C3 with `esp-idf` and Rust!This boilderplate brings you:
- [x] Storing `secp256k1` private key in eFuse
- [x] DePHY message creating/verifying
- [x] Send DePHY messages via HTTP(S)
- [ ] Send/subscribe DePHY messages via MQTTAnd also:
- [x] Rust `std` support
- [x] Cargo-based toolchain (which means no CMake needed in your project)
- [x] Basic logging
- [x] Basic Wi-Fi/BLE connection
- [x] Wi-Fi provisioning with BLE
- [x] GPIO example
- [x] I2C example with Mysentech M117B temperature sensor
- [x] HTTP/HTTPS access example
- [x] protobuf usage example
- [x] `async` support with `tokio`### How to build
1. [Install Rust following the official document](https://doc.rust-lang.org/book/ch01-01-installation.html).
2. Install dependencies and tools:
```shell
# macOS
brew install libuv
# Debian/Ubuntu/etc.
apt-get install libuv-dev
# Fedora
dnf install systemd-develrustup toolchain install nightly --component rust-src
rustup target add riscv32imc-unknown-none-elfcargo install ldproxy
cargo install espup
cargo install espflash
cargo install cargo-espflash
```
3. Create a `build.env` and apply some configurations on it:
```shell
cp example.build.env build.env# or just create the file
touch build.env
```
4. Build and flash:
```bash
cargo run# equals to
cargo espflash flash --monitor --partition-table huge_app.csv
```### Booting Behavior
1. The firmware checks if keys are burnt in eFuse, if no, it enters `Key Inspect Mode`:
1. it checks if keys are burnt in eFuse, if yes, jump to `v.`;
2. it starts Wi-Fi and BLE modem for collecting entropy for hardware RNG;
3. it waits for about 1 hour before generate the key, during this, the 2 LEDs will blink alternately;
4. it generates a random private key from the hardware RNG and writes it to eFuse;
5. it prints `device name with MAC address`, `public key`, and the corresponding `ethereum address` to the serial console every 10 seconds, during this, the 2 LEDs will blink simultaneously.
3. The firmware checks if the Wi-Fi should be provisioned, if no, it enters `Wi-Fi Provisioning Mode`:
- it uses the [Unified Provisioning](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/provisioning/provisioning.html) protocol provided by the `esp-idf` SDK;
- official provisioning app provided by Espressif are available for iOS([App Store](https://apps.apple.com/in/app/esp-ble-provisioning/id1473590141), [Source](https://github.com/espressif/esp-idf-provisioning-ios)) and Android([Google Play](https://play.google.com/store/apps/details?id=com.espressif.provble), [APK](https://github.com/espressif/esp-idf-provisioning-android/releases), [Source](https://github.com/espressif/esp-idf-provisioning-android)).
- the firmware will start the provisioning session in `BLE mode` with `Security 1 Scheme`, the `pop` parameter is set to `abcd1234`(default value in official provisioning Apps) for convenient testing;
- the 2 LEDs will blink alternately and rapidly during the provisioning session.3. If keys and Wi-Fi are well provisioned, the firmware waits for button input for boot modes:
- during waiting, the 2 LEDs will blink simultaneously and rapidly;
- press the button for 2-6 seconds then release it, the firmware enters `Wi-Fi Provisioning Mode`(referring to `2.`);
- press the button for more than 12 seconds, the firmware enters `Key Inspect Mode`(referring to `1.`);
- if there had been no input for 12 seconds, the firmware starts the app.### Build Configurations
Build configurations are stored in `build.env` and only being read on building.| Key | Rust Type | Comment |
|----------------------------|-----------|-------------------------------------------------------------------------------------------------------------|
| `BUILD_PRINT_EXPANDED_ENV` | `bool` | Weather to print generated codes in `cargo run`. Default to be `false`. |
| `DEPHY_ENDPOINT_HTTP` | `&str` | The endpoint to publish DePHY messages. Default to be `https://send.testnet.dephy.io/dephy/signed_message`. |
| `APP_SEND_LOOP_DURATION` | `u64` | Time duration of one cycle in the send loop in seconds. Default to be `10`. |