Whistling Birds Gauntlet Darts guide

Software and configuration

Install, update, and configure the Whistling Birds firmware.

This page covers the firmware and configuration file on the CIRCUITPY drive. Come here when a new version is released, when you want to change settings, or when you need to reflash after a problem.

This page covers installing or updating the Whistling Birds firmware and configuring the settings on the CIRCUITPY drive. Come here when a new version is released, when you want to change settings, or when you need to reflash after a problem.

Update Firmware

The prop runs CircuitPython on the Adafruit RP2040 Prop-Maker Feather. The release package includes a one-click installer that handles the entire flow — flashing the bundled CircuitPython runtime and copying the firmware files to your board. By default the installer wipes the board clean before each install so leftover files from a previous version don't carry forward; if you want to keep your local config.py and Audio/ changes across an update, pass -Preserve.

One-click install (Windows)

  1. Plug your board in with a data USB-C cable (a charge-only cable will not work). The board can be brand new, already running the firmware, or in any other state — the installer detects which.
  2. Double-click install.bat in the extracted release folder. A console window opens and walks through the install: verify bundled UF2 hash → reset the board into bootloader (over USB serial, no buttons needed) → flash CircuitPython → wipe and copy the firmware → verify → safely eject. Press any key to close when it's done.

Manual install (Mac, Linux, or advanced)

If you are not on Windows, or you prefer to run the steps by hand, the same outcome can be reached manually.

  1. Use the bundled runtime first. The release package includes a tested CircuitPython 10.1.4 .uf2 in Software/circuitpython-runtime/. If you only have the source repository and not the packaged release ZIP, download the board-specific runtime from circuitpython.org/board/adafruit_feather_rp2040_prop_maker.
  2. Enter bootloader mode. Connect the board via USB-C. Hold BOOT/BOOTSEL, press and release RESET, then release BOOT. The RPI-RP2 drive appears.
  3. Flash the runtime. Copy the .uf2 file to RPI-RP2. The board reboots and reappears as CIRCUITPY.

Manually copy project files

Whether this is a fresh install or an update, the project files go to the root of the CIRCUITPY drive.

In the release package, open Software/whistling-birds-firmware/ and copy that folder's contents to CIRCUITPY.

  1. Back up anything you want to keep. If updating and you've customized config.py or replaced any files in Audio/, copy them off CIRCUITPY first so you can restore them after the wipe.
  2. Clear the drive. Select all files on CIRCUITPY and delete them. Confirm permanent deletion if prompted. This guarantees that nothing from the previous version carries forward.
  3. Open the firmware folder. In the extracted release package, open Software/whistling-birds-firmware/.
  4. Copy the new files. Copy everything inside Software/whistling-birds-firmware/ and paste it to the root of CIRCUITPY. Files must end up at the root level, not inside a subfolder.
  5. Restore your customizations. If you backed up config.py, compare it with the new version and carry your settings forward. New releases may add settings — always start from the new template and copy your values in.
  6. Wait for the transfer to finish. CircuitPython drives write slowly. Do not eject or unplug until the copy is complete.
Troubleshooting file copy issues
  • Drive disappears mid-copy: The board rebooted during the transfer. Re-enter bootloader, reflash CircuitPython, then retry.
  • Copied the folder instead of its contents: Open Software/whistling-birds-firmware/ and move the files inside it to the drive root. code.py must be at the top level or the firmware will not start.

Configure Settings

Open config.py at the root of the CIRCUITPY drive in any text editor. Changes take effect on the next power cycle. The full reference of config.py settings (defaults, ranges, and what each one controls) is documented in the Operation guide's config.py settings table. Many of these settings can also be changed on-device via the Configuration Mode menu.

  1. Choose dart and afterburner colors. Set DART_TIP_COLOR and AFTERBURNER_COLOR to any color name listed in lib/neopixel_control.py. Colors can also be changed on the device using the configuration menu.
  2. Review SALVO_SIZES. The default [0, 1, 4, 12] is just an example. Edit the list to any sequence of values from 012, in any order, and repeat values if you want some salvo sizes to appear more than once while cycling.
  3. Save and verify. Save config.py. The board restarts automatically after a few seconds. A blue startup flash confirms the updated configuration loaded.

Verify Boot

After copying files or saving a config change, the board reboots and runs the firmware automatically. Watch the LED on the center of the microcontroller.