Wavelens

Works anywhere in the world · follow your local laws

Free updates for life: how a Spotter and a Scanner stay current without a computer

3 Nov 2026 · 7 min read · Updates · Spotter · Scanner · ESP32 · Raspberry Pi · Companion

A radio that can't be updated is a radio with a shelf life. We sell hardware once and then keep improving the software for years, so the update path had to be something a person with no computer, no SSH and no patience could use from the passenger seat. Here is what shipped today, for both companions.

One version number

Everything in the companion folder — the Pi bridge, the ESP32 firmware, the region packs — carries one version: a date, like 2026.11.03. The Pi reports it, the Spotter reports it, and the app carries its own copy of the Spotter firmware with the same stamp. “Is this current?” is one comparison, and the Companion screen shows the number next to the radio's name.

Spotter: from the phone, over Bluetooth

The app has no network permission and we are not changing that. So the Spotter firmware rides inside the app itself: the Android build downloads the current image from the public repo's firmware release and bundles it. When the app connects to a Spotter that reports an older version, an Update firmware button appears on the Companion screen. Tap it and the app streams the image over Bluetooth, sixteen kilobytes at a time with the board acknowledging each window, about a minute for the 1.4 MB image. The Spotter verifies it, reboots into it, and reconnects by itself.

It is safe to interrupt. The ESP32 has two firmware slots; the new image is written to the spare one and the bootloader only switches when it verifies. Pull the plug half way and the old firmware is still what boots. If a new version ever fails to start, the bootloader falls back to the one that worked.

Two other ways, for people with a computer or a Scanner: a browser flasher (Chrome or Edge, USB cable, one click) — also how you put Wavelens on a blank ESP32 board, and how a Spotter built before today gets onto firmware that knows about Bluetooth updates — and the Scanner's admin page, which flashes a Spotter plugged into the Pi's USB port.

Scanner: it updates itself

The Pi has Wi-Fi, so it does its own fetching. A command on the Pi, wavelens-update, does the whole job: fetch the public repo, copy the current install aside, install the new bridge, the admin page, the region packs and the latest Spotter image, restart the bridge, and then check that it came up. If the bridge isn't advertising within twenty seconds, it puts the previous version back and tells you. Your settings, your RadioReference exports and the admin password are never touched.

You can run it four ways, and the first needs nothing but the app:

  • From the phone. The Pi says “update available” in its hello, so the Companion screen shows the new version and an Install update button. Check for updates and Roll back sit next to it.
  • From the admin page at http://wavelens.local:8080 → Update, with the live log, and a switch for automatic overnight updates.
  • By itself. A timer checks every night around 3 a.m. and ten minutes after each boot (a car Pi is rarely awake at 3 a.m.). It only installs if you turned the overnight switch on, and never while a phone is connected to it.
  • At the console: sudo wavelens-update check | apply | rollback | status. The old update.sh still works; it calls the same tool.

The one thing you have to do once is put the Pi on your home Wi-Fi, which is what the admin page's Wi-Fi tab is for.

If your radio predates all this

A Pi bridge older than today doesn't know the update command; the Companion screen says so and gives you the one line to run on it (cd ~/wavelens && companion/pi/update.sh). After that it's on the new tool. A Spotter on older firmware has no Bluetooth update path yet; flash it once from the browser page, and from then on the phone does it.

What it will never do

No companion reaches the network unless you ask it to update, and the phone never does. The only address a Pi talks to is the public repository on GitHub, over HTTPS, to fetch code you can read. There is no account, no telemetry, no “checking in”. The nightly timer is a fetch, not a report.

The full reference is companion/UPDATES.md in the public repo.

Order it today, drive with it this week

Every unit is flashed, set up for the area you give at checkout and tested before it ships. Free shipping in the US, $25 flat everywhere else, updates free for life. The Spotter ships cased; Full Spectrum is the whole car in one box.

Shop companion radios Join the free Android beta

Open firmware and bridge on GitHub · receive only · every command on this blog is copied from a Pi we run

Next: wavelens.local:8080 — the Scanner's admin page, for Wi-Fi, logs, settings and updates from your phone · all articles