Skip to content

dephy-io/dephy-esp32c3-rust-boilerplate

Repository files navigation

dephy-esp32c3-rust-boilerplate

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 with tokio

How to build

  1. Install Rust following the official document.
  2. 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
  1. Create a build.env and apply some configurations on it:
cp example.build.env build.env

# or just create the file
touch build.env
  1. Build and flash:
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.
  2. 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 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published