Build DePHY application on ESP32C3 with esp-idf
and Rust!
This boilderplate brings you:
- Storing
secp256k1
private key in eFuse - DePHY message creating/verifying
- Send DePHY messages via HTTP(S)
- Send/subscribe DePHY messages via MQTT
And also:
- Rust
std
support - 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
-
async
support 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.env
and 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 address
to 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-idf
SDK; - 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 mode
withSecurity 1 Scheme
, thepop
parameter 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 . |