Curie BLE only able to see Battery Service

I don’t know if it’s a bug, a feature or just something I’ve corrupted but the only Characteristic my Genuino 101 advertises is the Battery Level one (2A19) no matter what is defined in the sketch.

For example,t he Heart rate example from the Arduino website correctly defines the heart rate service and characteristic and service but the written value appears as the battery level.

I’ve tried all the example sketches and they all exhibit the same behaviour.

The attached file is a basic test based on the standard health thermometer service and also exhibits the same behaviour.

Does anyone know if this is a limitation of the library or have I possibly corrupted something?

Flashing the device firmware (V1.0.7) makes no difference.

BLE_Test.ino (1.54 KB)

OK. Problem solved.

Well... sort of.

I was using the Lightblue app on my iPhone to test my sketch but the phone was caching some (but not all) of the GATT profile. The caching was based on the MAC address of the Arduino so changing is name made no difference.

Rebooting the phone cleared the cache and everything appeared as expected.

Hi @mdunsford,

This is an known issue, the following Github issue is open to track it: iOS doesn't see changes to Bluetooth services and characteristics between sketches · Issue #96 · arduino/ArduinoCore-arc32 · GitHub

You can also, toggle Bluetooth off and on on the iOS device to work around it. I would also suggest you make a comment on the Github link above to let the 101 core maintainers know you are facing the same issue.

The MacOS version LightBlue does not cache like the phone app but it does not know about the names of the Standard Services and Characteristics like the phone version, so you have to deal with the UID values instead

If you can use an Android phone, there are many apps that you could use and the manufacturer of the BLE chip Nordic has an app called nrfController and it has more features than LightBlue.

The most easiest way to fix this issue is to using different address during brooding casting. I am pretty sure the nrf which inside 101 support this.

I once created an application which need to change service according to user configuration. I am stuck with lightblue for quite sometime.

Finally I succeed in doing this by a re-broadcasting with a different address