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)
- 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.
-
Double-click
install.batin 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.
-
Use the bundled runtime first. The release package includes a tested CircuitPython
10.1.4.uf2inSoftware/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. -
Enter bootloader mode. Connect the board via USB-C. Hold
BOOT/BOOTSEL, press and releaseRESET, then releaseBOOT. TheRPI-RP2drive appears. -
Flash the runtime. Copy the .uf2 file to
RPI-RP2. The board reboots and reappears asCIRCUITPY.
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.
-
Back up anything you want to keep. If updating and you've customized
config.pyor replaced any files inAudio/, copy them offCIRCUITPYfirst so you can restore them after the wipe. -
Clear the drive. Select all files on
CIRCUITPYand delete them. Confirm permanent deletion if prompted. This guarantees that nothing from the previous version carries forward. -
Open the firmware folder. In the extracted release package, open
Software/whistling-birds-firmware/. -
Copy the new files. Copy everything inside
Software/whistling-birds-firmware/and paste it to the root ofCIRCUITPY. Files must end up at the root level, not inside a subfolder. -
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. - 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.pymust 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.
-
Choose dart and afterburner colors. Set
DART_TIP_COLORandAFTERBURNER_COLORto any color name listed inlib/neopixel_control.py. Colors can also be changed on the device using the configuration menu. -
Review
SALVO_SIZES. The default[0, 1, 4, 12]is just an example. Edit the list to any sequence of values from0–12, in any order, and repeat values if you want some salvo sizes to appear more than once while cycling. -
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.