Hi there,
Ok Good,
So iOS Bluetooth Settings is not a general BLE scanner. That tutorial works because it uses an Apple-recognized BLE profile (HID) and advertises in a way iOS chooses to surface in Settings. Android and nRF Connect will show “normal” BLE devices all day long; iOS Settings often won’t.
The sketch is BLE-only, but iOS Settings mostly shows “classic-ish” / Apple-recognized stuff
iOS Settings will reliably show:
- Classic Bluetooth devices
- BLE HID devices (keyboard/media controller), when advertised correctly
- A few Apple-friendly categories (audio accessories, etc.)
If your code is just a custom BLE service, it will show in nRF Connect but not in Settings. That’s expected.
- ESP32 BLE Arduino (Bluedroid) + an HID wrapper library (often what Adafruit tutorials assume)
For a Media Controller visible to iOS Settings, you typically want an ESP32 HID library that emits proper BLE HID descriptors + appearance + flags.
Even if the device is a real HID service, iOS can ignore it in Settings if the advertising payload is “wrong-ish”.
Key bits that help:
- Include HID service UUID (0x1812) in advertising (not only in scan response)
- Set Appearance to HID (keyboard/remote control)
- Set flags properly (
LE General Discoverable,BR/EDR not supported) - Don’t hide the name in scan response only (some iOS behavior differs)
To appear in Settings, you must advertise as an Apple-recognized profile, typically BLE HID (0x1812), and your advertising must include the HID UUID and correct appearance/flags. the XIAO port probably changed BLE library/stack and lost HID-correct advertising.
Action plan (fastest path)
- Confirm the sketch is truly BLE HID (not just “media control over BLE UART”).
- Switch to a known-good ESP32 HID library/example:
- Look for an ESP32-S3 BLE HID Consumer Control example (play/pause/next/prev).
- Many people use
ESP32-BLE-Keyboard/BleKeyboardstyle libs, but for media keys you need Consumer Control support, not just keyboard.
- Ensure the advertising includes 0x1812 and device name in the primary ADV packet.
Post up the code YOU are trying, Use the code tags above" </> " We can look and be certain.
HTH
GL
PJ ![]()
FYI,
NimBleLib works well I see and I have used it with great success for multiple BLE concurrent connections. works very well with Xiao ESP32S3 There is a demo with code on here also.