Hello there, thanks for replying. When I read your reply, I tried the IOS app LightBlue based on your suggestion and it worked. Then I got busy with work and didn’t get a chance to work on this in Linux until last week. The problem is the same as on iOS/macOS — the standard Bluetooth settings panel (e.g., GNOME Bluetooth) only shows devices that provide OS-level services like keyboards and mice. It does not show generic BLE peripherals like the micro:bit. You need a BLE-specific scanner, the Linux equivalent of LightBlue on iOS.
Here’s everything I did step by step in case someone else runs into the same problem and finds this page:
Check if your Bluetooth adapter supports BLE
Run this command to see your adapter’s capabilities:
btmgmt info
Look at the “supported settings” line. You need “le” to be listed there. My adapter is HCI Version 4.2 (Qualcomm), which supports BLE.
Enable BLE on the adapter
In my case, “le” was in the supported settings but NOT in the “current settings”, meaning BLE was disabled. I enabled it with:
sudo btmgmt le on
The output confirmed it was enabled:
hci0 Set Low Energy complete, settings: powered connectable discoverable bondable ssp br/edr le secure-conn
You can verify by checking that “le” now appears in “current settings”:
btmgmt info | grep "current settings"
Set up a Python BLE scanner
I created a virtual environment and installed the “bleak” library
python3 -m venv .venv
.venv/bin/pip install bleak
Then I wrote this simple scanner script (ble_scanner.py):
import asyncio
from bleak import BleakScanner
async def scan():
print("Scanning for BLE devices (10 seconds)...")
devices = await BleakScanner.discover(timeout=10, return_adv=True)
for address, (device, adv_data) in devices.items():
name = device.name or "Unknown"
print(f"\n Name: {name}")
print(f" Address: {address}")
print(f" RSSI: {adv_data.rssi} dBm")
if adv_data.service_uuids:
print(f" Services: {adv_data.service_uuids}")
print(f"\nTotal: {len(devices)} device(s) found.")
asyncio.run(scan())
If you get the error “org.bluez.Error.InProgress - Operation already in progress”, it means something else is already running a Bluetooth scan (e.g., the GNOME Bluetooth panel). Close any Bluetooth settings windows, or restart the Bluetooth service:
sudo systemctl restart bluetooth
sudo btmgmt le on
(You need to re-enable LE after restarting the service.)
Then, run the scanner
.venv/bin/python ble_scanner.py
My micro:bit showed up immediately:
Name: BBC micro:bit [vovez]
Address: xx:xx:xx:xx:xx:xx
RSSI: -34 dBm
On the micro:bit side, I used “No Pairing Required” in Project Settings as before, and this same MakeCode Python code:
import bluetooth
import basic
basic.show_icon(IconNames.HEART)
basic.pause(1000)
bluetooth.set_transmit_power(7)
bluetooth.start_uart_service()
basic.show_icon(IconNames.HAPPY)
def on_forever_minimal():
basic.pause(500)
basic.forever(on_forever_minimal)
Cheers!