A cheap smart bulb is two things in one enclosure that have no reason to talk to each other: a Wi-Fi radio, there so an app can reach it, and a set of LEDs, there to make light. The radio’s only job is to receive commands about the light.
Etherbulb, by Peter Holzhauser, collapses that into a single device by making the radio’s observations the light’s content. The bulb listens, classifies, and colours the room by what is in the air. Its one-line description is the whole idea: “The lamp that shows you the air.”
What it actually does
The firmware uses the ESP32-C3’s own Wi-Fi radio as a software-defined receiver, tuning 2.13–2.73 GHz. That span covers Wi-Fi, Bluetooth, Zigbee and Thread, analogue FPV video, and LTE/5G bands 1, 7 and 38.
It classifies signals by shape, position, width, channel grid and duration, and — the detail that says someone actually used this — learns to hide the chip’s own spurious emissions. An SDR built out of a Wi-Fi front end sees itself constantly; a receiver that does not suppress its own spurs is a receiver that mostly reports on itself.
Output is colour by signal type: blue for Bluetooth, green for Wi-Fi, and a colour of your choosing for whatever else you want to watch. Signal strength maps to brightness. It ships 26 presets and 412 mobile-network blocks covering 39 European countries, the latter taken from the ESPsoup app.
The bulb also serves its own dashboard over Wi-Fi — a live waterfall display, a log, light and dark themes — while continuing to work as a Wi-Fi client. And it has a rescue mode that automatically boots the previous firmware after three consecutive crashes, which is the single most important feature in any firmware you flash onto a device screwed into a ceiling.
Named hardware, and the hardware that won’t work
This is where the project is better documented than most:
- Athom / IoTorero LB01-12W-E27, an RGBCW E27 bulb with an ESP32-C3. Flashed over Wi-Fi.
- BTF-Lighting SP530E, a 5–24 V LED strip controller, also ESP32-C3. First flash over UART, then over Wi-Fi.
And explicitly not: the LB03 and the 7 W / 15 W bulbs use an ESP8285 and cannot run this firmware. Saying which near-identical SKUs are the wrong ones is worth more than another page of features.
The interlock
Running an RGBCW bulb’s colour channels and white channels simultaneously draws more current than the driver is specified for. Etherbulb enforces a lockout — BRETT_SPERRE in the source — with a hardware check on the PWM duty cycles, and the README states that no setting can override it. The SP530E strip controller has no such limit, and the README says so.
There is also the warning that matters more than any of the above: “Never open a bulb that is screwed in or plugged in: the electronics sit at mains voltage.” An E27 bulb is a mains device. The ESP32-C3 inside it is sitting downstream of an AC-DC converter in a sealed plastic shell, and the reason this project flashes over Wi-Fi rather than over UART is that opening the bulb is the dangerous part.
The README also notes that the website never asks for your Wi-Fi password — an unusual thing to need to say, and a reasonable thing to say in a category full of firmware that does.
Build requirements, and the honest state of the repo
Building needs a specific ESP-IDF commit — 25fe69f946311abdaf9ad56591f25fedbc20ac98, on v6.2-dev — and Python 3.12. Pinning to a development-branch commit is a maintenance liability, but it is at least pinned, which is more than many ESP-IDF projects manage.
Everything is GPL-3.0-or-later, copyright 2026 Peter Holzhauser. The receiver path builds on esp-sdr from the ESPARGOS project by Florian Euchner, Zoltan Doczi and contributors, also GPL-3.0-or-later, with some files used unchanged — credited clearly, which is how GPL reuse should look.
Two things to know before you judge the project by its stars. The repository has zero stars, zero forks and a single commit on main, with one open issue. And the “Where to buy” section carries affiliate links to Amazon, eBay and AliExpress, which the README is upfront about: they “cost you nothing extra and help pay for the test lamps.”
A charming artefact of its provenance: the JSON API is in German. GET /api/status, GET|POST /api/konfig, GET /api/lauschbild for what the bulb is hearing, GET /api/probe?s=…&mhz=…, GET /api/wlans, GET /api/log, GET /api/roh for one raw snapshot, POST /api/ota, POST /api/neustart. Lauschbild — listening-picture — is a better name than anything the English documentation of a spectrum display would have produced.
What it is not
The README is careful, and so are we: the bulb “never decodes content and never transmits on the bands it watches.” It is a receive-only classifier that tells you a Bluetooth-shaped thing is nearby and strong. It is an ambient display of radio occupancy, not a monitoring tool, and the thing it is good for is the thing ambient displays are good for — making an invisible layer of the room continuously, peripherally legible.
Sources
- etherbulb on GitHub
- etherbulb: the bulb that shows you the RF spectrum — Adafruit Blog
- ESPARGOS esp-sdr
- Espressif ESP32-C3