Build DePHY application on ESP32C3 with esp-idf and Rust!
This boilderplate brings you:
- Storing
secp256k1private key in eFuse - DePHY message creating/verifying
- Send DePHY messages via HTTP(S)
- Send/subscribe DePHY messages via MQTT
And also:
- Rust
stdsupport - Cargo-based toolchain (which means no CMake needed in your project)
- Basic logging
- Basic Wi-Fi/BLE connection
- Wi-Fi provisioning with BLE
- GPIO example
- I2C example with Mysentech M117B temperature sensor
- HTTP/HTTPS access example
- protobuf usage example
-
asyncsupport withtokio
- Install Rust following the official document.
- Install dependencies and tools:
# macOS
brew install libuv
# Debian/Ubuntu/etc.
apt-get install libuv-dev
# Fedora
dnf install systemd-devel
rustup toolchain install nightly --component rust-src
rustup target add riscv32imc-unknown-none-elf
cargo install ldproxy
cargo install espup
cargo install espflash
cargo install cargo-espflash- Create a
build.envand apply some configurations on it:
cp example.build.env build.env
# or just create the file
touch build.env- Build and flash:
cargo run
# equals to
cargo espflash flash --monitor --partition-table huge_app.csv-
The firmware checks if keys are burnt in eFuse, if no, it enters
Key Inspect Mode:- it checks if keys are burnt in eFuse, if yes, jump to
v.; - it starts Wi-Fi and BLE modem for collecting entropy for hardware RNG;
- it waits for about 1 hour before generate the key, during this, the 2 LEDs will blink alternately;
- it generates a random private key from the hardware RNG and writes it to eFuse;
- it prints
device name with MAC address,public key, and the correspondingethereum addressto the serial console every 10 seconds, during this, the 2 LEDs will blink simultaneously.
- it checks if keys are burnt in eFuse, if yes, jump to
-
The firmware checks if the Wi-Fi should be provisioned, if no, it enters
Wi-Fi Provisioning Mode:- it uses the Unified Provisioning protocol provided by the
esp-idfSDK; - official provisioning app provided by Espressif are available for iOS(App Store, Source) and Android(Google Play, APK, Source).
- the firmware will start the provisioning session in
BLE modewithSecurity 1 Scheme, thepopparameter is set toabcd1234(default value in official provisioning Apps) for convenient testing; - the 2 LEDs will blink alternately and rapidly during the provisioning session.
- it uses the Unified Provisioning protocol provided by the
-
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 to2.); - press the button for more than 12 seconds, the firmware enters
Key Inspect Mode(referring to1.); - if there had been no input for 12 seconds, the firmware starts the app.
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. |