STM32 IOT01A example

This example application runs out of the box on the STM32 IOT01A development kits.

It uses the on board peripherals such as WiFi and the temperature sensor to send data to Drogue Cloud, and retrieve firmware updates if available.

There are multiple variants of this kit, so the example must be compiled and run using feature flags.



  • STM32 IOT01A development kit


  • To build the example, you need to have rustup.

  • To flash the example on the device, you need probe-run installed (cargo install probe-run).

  • A Drogue Cloud instance. See drogue-cloud for how to run that, or use the sandbox (requires TLS).


Credentials for your local WiFi network will come from these entries in ~/.drogue/config.toml:

wifi-ssid = "..."
wifi-password = "..."

HTTP authentication will come from these entries in ~/.drogue/config.toml:

username = "..."
password = "..."

For Drogue Cloud, the username/password is stored in this form: device_id@application.

The example config.toml file for connecting to public Drogue cloud sandbox application could look like this:

hostname = "" # Replace with your own Drogue Cloud instance if you are not using the sandbox
port = "443"
wifi-ssid = "..."                      # The WiFi network SSID
wifi-password = "..."                  # The WiFi network pre-shared key
username = "device1@wifi-workshop"
password = "mysecretpassword"

Just enter your wifi details and you should be ready to go.

If you have the B-L4S5I-IOT01A board, set the following environment variables:


If you have the B-475E-IOT01A board, use the following settings instead:

export CHIP=STM32L475VGTx CHIP_FEATURE=l475e


For this step, we need to flash a bootloader as well as the application. The example is configured to enable firmware updates using Drogue Cloud sandbox.

Flashing the bootloader

To flash the bootloader for a given chip:

cargo flash --manifest-path ../boot/Cargo.toml --release --features ${CHIP_FEATURE} --no-default-features --chip ${CHIP}

Running the application

To run the application using a given chip:

PROBE_RUN_CHIP=${CHIP} cargo run --release --features ${CHIP_FEATURE},debug --no-default-features

Once flashed, the device will reset and attempt to join the WiFi network as before, in addition to polling the Drogue Cloud for firmware update commands.


If you’re experiencing problems, try setting the VID:PID values to that of your probe (you can find that from lsusb once your board is powered).

<ENV> cargo run <ARGS> -- --probe <VID>:<PID>

Additionally, the B-L4S5I-IOT01A board can have issues with running probe multiple times, leading to errors like

Error: An error with the usage of the probe occured

Caused by:
    Operation timed out

If you experience that, the best way to restore the board is to reconnect it and use st-flash utility to write any binary to it, like

st-flash write ../target/thumbv7em-none-eabihf/release/iot01a-wifi.d 0x8000000

After reconnecting the board again, you should be able to use cargo run again.