Wiki / Emitters
Powered Up hub (Pybricks VLL)
Status: ✅ device-confirmed (Micro Scout · City Hub)
A LEGO Powered Up hub flashed with Pybricks programs a Micro Scout over VLL (device-confirmed, 2026). The VLL engine runs locally on the hub (wait(ms) precise timing) → no BLE jitter. It works with no extra hardware (the hub's own LED) or an 88005 Light, flashing the sensor in the VLL pattern.
What works (tested on a City Hub)
- 88005 Light (
Light(Port.A),lamp.on(100)/lamp.off()): rock-solid across scale ≈ 0.9–1.4, no repeat needed. Brighter, easy to aim. - Hub built-in status LED (
hub.light.on(Color.RED)/off): works with red, pressed close, dark room — confirmed down to scale 0.5. White does NOT work (sensor is red-biased). Nothing to plug in. - Color & Distance sensor LED: did not toggle/work — dropped.
- Hubs: City (88009) / Technic (88012) confirmed-class (same API; one line
CityHub()/TechnicHub()). SPIKE/Mindstorms also have a status LED. Move/BOOST hub can't run the remote (nousys/uselectstdin).
Control
- Standalone: flash a Pybricks program (
pybricks-flash-force-led.py), press the hub button to run it; it idles soft-green and emits VLL. - Remote: the Flash Force LED web page (
flash-force-led.html) connects over the Pybricks BLE protocol (servicec5f50001-…, charc5f50002-…; write[0x06, code]= write-stdin) and sends command bytes; the hub does the VLL. Press-and-hold drive = the hub repeats the motor frame (with a keep-alive safety timeout). ⚠️ Web Bluetooth = Chrome desktop/Android only (no iOS Safari).- Reached from Flash Force via the 🔦 Phone torch / 💡 Hub + LED mode switch at the top of the page. The LED page carries a one-time "Flash the hub" how-to with the full Pybricks firmware in a copy-to-clipboard code block.
Files (in the repo)
web/pybricks-flash-force-led.py (hub listener), web/flash-force-led.html (remote). Flash via code.pybricks.com (Python program; Chrome/Android — not iOS).
This is the simplest working path today. See the full matrix in VLL emitters — options & status.