Skip to content

Firmware with standard library support for ESP32-based controller boards

Notifications You must be signed in to change notification settings

LEDswarm/firmware

Repository files navigation

banner

What's this?

firmware is an executable Rust binary for microcontrollers, which enables swarm controllers to drive LEDs, read sensor data and interact with their environment.

esp-idf provides the base of the firmware with standard library support for controller boards. On top of that, the remote control module (RMT) found on ESP32 boards is used as an efficient way to drive the seven-pixel array of RGBW LEDs while an accelerometer and a small OLED display provide sensor data and visual feedback.

Furthermore, esp-idf-svc will be used in the near future to implement a WebSocket connection to the server so that it's possible to configure and reset controller values in real-time in a graphical interface on various platforms.

Troubleshooting

If you happen to have an error like the following, make sure you have no additional version of Rust installed via Homebrew or any other package manager. Only a rustup version must be present.

error: the option `Z` is only accepted on the nightly compiler

ledswarm_firmware_esp32c3

Dev Containers

This repository offers Dev Containers supports for:

Note

In order to use GitHub Codespaces the project needs to be published in a GitHub repository and the user needs to be part of the Codespaces beta or have the project under an organization.

If using VS Code or GitHub Codespaces, you can pull the image instead of building it from the Dockerfile by selecting the image property instead of build in .devcontainer/devcontainer.json. Further customization of the Dev Container can be achived, see .devcontainer.json reference.

When using Dev Containers, some tooling to facilitate building, flashing and simulating in Wokwi is also added.

Build

  • Terminal approach:

    scripts/build.sh  [debug | release]
    

    If no argument is passed, release will be used as default

  • UI approach:

    The default build task is already set to build the project, and it can be used in VS Code and GitHub Codespaces:

    • From the Command Palette (Ctrl-Shift-P or Cmd-Shift-P) run the Tasks: Run Build Task command.
    • Terminal-> Run Build Task in the menu.
    • With Ctrl-Shift-B or Cmd-Shift-B.
    • From the Command Palette (Ctrl-Shift-P or Cmd-Shift-P) run the Tasks: Run Task command and select Build.
    • From UI: Press Build on the left side of the Status Bar.

Flash

Note

When using GitHub Codespaces, we need to make the ports public, see instructions.

  • Terminal approach:

    • Using flash.sh script:

      scripts/flash.sh [debug | release]
      

      If no argument is passed, release will be used as default

  • UI approach:

    • From the Command Palette (Ctrl-Shift-P or Cmd-Shift-P) run the Tasks: Run Task command and select Build & Flash.
    • From UI: Press Build & Flash on the left side of the Status Bar.
  • Any alternative flashing method from host machine.

Wokwi Simulation

VS Code Dev Containers and GitHub Codespaces

The Dev Container includes the Wokwi Vs Code installed, hence you can simulate your built projects doing the following:

  1. Press F1
  2. Run Wokwi: Start Simulator

Note

We assume that the project is built in debug mode, if you want to simulate projects in release, please update the elf and firmware proprieties in wokwi.toml.

For more information and details on how to use the Wokwi extension, see Getting Started and Debugging your code Chapter of the Wokwi documentation.