Skip to content

Releases: rsmith4321/fpv-audio-recorder

Recorder firmware v2 (pre-release): USB drive, one file per flight

Choose a tag to compare

@rsmith4321 rsmith4321 released this 18 Oct 23:55

Recorder firmware v2 (pre-release)

Flight-tested 2026-10-22; download remains a pre-release. This published v2 build recorded 110.18 seconds of onboard audio in the V7 case, with zero missing encoded frames, a clean Betaflight disarm ending and a flight-controller timestamp. Flight sample and test report.

Known issue: USB sometimes needs a recorder reset before the drive appears. A local startup candidate was installed after the flight; it is not included in this release and has not been flown.

The recorder now stores audio in the XIAO ESP32S3's internal 8 MB flash instead of microSD, and shows up on a computer like a memory card:

  • A read-only USB drive named FPVAUDIO with one WAV per flight (16 kHz mono), FLIGHTS.CSV and README.TXT.
  • File names use the flight controller's clock (Betaflight MSP, read-only), e.g. FPV_20261018173825_P0005_F01.WAV, or _NOCLOCK without one. Each WAV carries a Broadcast WAV time reference.
  • About 30 minutes fit; the oldest audio is overwritten when it's full.
  • Format: plug into USB, wait 5 s, then hold the button marked B for about 10 s while steadying the plug. The LED blinks, blinks faster, then gives three long flashes. Letting go early cancels.
  • LED on while recording. A battery pull loses at most the last 0.5 s.

Assets

  • fpv-audio-recorder-fw-v2.bin: merged bootloader, partitions and app for the XIAO ESP32S3 Sense (8 MB, OPI PSRAM). Write at offset 0: esptool --chip esp32s3 write-flash 0x0 fpv-audio-recorder-fw-v2.bin. It stops before the recording partition, so stored audio isn't erased. The first flash from other firmware may need B held while plugging in.
  • fpv-audio-recorder-fw-v2-parts.zip: the separate images with their offsets (flash_args.txt).
  • fpv-audio-recorder-fw-v2-source-and-tools.zip: source, host tools (fetch_flash_recordings.py, audio_video_sync.py for lining up with DJI O4 Pro clips) and the Mac host test.
  • RELEASE-SHA256SUMS.txt (assets) and SHA256SUMS.json (every file in firmware/v2/).

Install steps, build commands and bench results: firmware/v2. Matching case: case-v7.

Remaining work: USB cold-start/reconnect repeatability, repeated-flight reliability, wind protection and measured in-flight temperature. Easy Eject does not recognise v2 yet, so firmware/latest.json remains on v0.1.0.

The downloadable October 18 packages and their checksums are unchanged; the current field-test documentation is linked above.

Recorder case V7 (pre-release): one-piece SD-free sleeve

Choose a tag to compare

@rsmith4321 rsmith4321 released this 18 Oct 23:55

Recorder case V7 (pre-release)

A one-piece slide-in TPU sleeve for the camera-free XIAO ESP32S3 Sense recorder running the SD-free firmware v2. No lid and no glue: the board stack slides in from the open back and clicks over a small floor detent.

Printed, fitted and flown with firmware v2 on 2026-10-22. The core DIY build and first real-flight milestone are complete. Flight sample and test report. Downloads remain pre-releases with the documented USB follow-up.

  • 23.76 × 20.68 × 11.18 mm, 2.15 g in TPU (V6.5: two parts, about 4.1 g).
  • No microSD access. The recorder now stores audio in internal flash and shows up as a USB drive.
  • USB window sized to the receptacle (9.44 × 3.71 mm) with a 12.4 mm overmold recess so cable plugs seat fully.
  • Mic grille (2 × 3 holes, 1.0 mm) and 2.2 mm poke holes for the B (BOOT) and R (RESET) buttons.
  • 1.2 mm side walls; the zip-tie tab from the first draft was removed.
  • STL, 3MF (opens standing in Bambu Studio), a socket-removed STL variant, editable OpenSCAD source, previews, photos, dimensions and print notes.

Print it standing, USB face down, as saved. Dry the TPU first to avoid stringing; my first print, laid flat with damp filament, came out stringy.

Remaining evaluation: repeated-flight retention, measured vibration, wind-noise protection and in-flight temperature.

I'm new to 3D printing, so there's probably a better way to design this case. If you come up with a different or improved design, please submit a pull request! Issues with ideas, photos, or printable files are welcome too.

Files: source, specifications and print notes. RELEASE-SHA256SUMS.txt covers the release assets; SHA256SUMS.json covers every file in the package.

Firmware for this case: fw-v2. Previous case: case-v6.5.

The downloadable October 18 packages and their checksums are unchanged; the current field-test documentation is linked above.

Recorder case V6.5 — wider USB and SD access

Choose a tag to compare

@rsmith4321 rsmith4321 released this 17 Oct 02:30

Recorder case V6.5

Two-piece TPU enclosure for the camera-free XIAO ESP32S3 Sense recorder, with a flush lid, internal locating lip, rear wire exit, microSD access, and a flat underside for mounting tape.

  • Body USB/card opening widened to 12.1 mm.
  • Lid SD opening widened to 12.9 mm, retaining 8 mm inward depth.
  • Both openings add 0.3 mm clearance per side compared with V6.4.
  • Fitted case pocket, 26.21 × 22.68 mm outside footprint, and flat mounting bottom retained.
  • Includes editable OpenSCAD source, both printable STLs, previews, dimensions, print/assembly instructions, and contribution notes.

The builder approved the previous printed fit apart from the openings and plans to trim that print. The final widened V6.5 openings are mesh-checked but have not been reprinted. This release covers the case only; it does not change or validate the recorder firmware, USB mass-storage access, wind-noise protection, or flight retention.

I'm new to 3D printing, so there's probably a better way to design this case. If you come up with a different or improved design, please submit a pull request! Issues with ideas, photos, or printable files are welcome too.

Print both matching parts at 100% scale: bottom flat base down, lid flat outer roof down with its locating lip up. Dry-fit electronics and confirm card/cable access before bonding.