BLE on Photon 2 not accessible with Europe iPhone

Have a Photon 2 based system connected to a sensor and sending periodic telemetry to the cloud. The device also uses BLE to make sensor data available locally in real time. Using an app like nRFConnect or BLE Hero on iPhone or Android we see the Photon 2 advertising as a peripheral device, connect, and get the notify messages. Using latest DeviceOS 6.3.4. We’ve been beta testing for about a year and have no problems with WiFi telemetry or BLE communication and monitoring in the US.

Now we have our first devices in Europe (Germany) and have run into a problem where a user with a Europe issued iPhone doesn’t see the Photon 2 BLE. Our US phones in Europe continue to see the devices and are able to connect and monitor. The phone apps (nRFConnect or BLE Hero) start off with a screen showing all the BLE devices it “sees”. But the Europe iPhone doesn’t show our Photon 2 service being advertised - the US phone right beside does show our device in the list.

The Europe iPhone might show a list of 70+ devices and the US iPhone also shows 70+ devices but the lists are slightly different. The key difference of course being that our Photon 2 is on the US phone list but NOT the Europe phone list.

Are there some BLE frequency broadcast differences between continents? We’ve tried all manner of settings changes on iPhone and within the apps but can never get the Phonton 2 BLE to show up for our European testers.

Can you please specify which iPhone specifically is being used in Europe?

I have an iPhone 15 Pro from the US, and an iPhone 16 Pro from Europe and both pick up my Photon advertisements. BLE runs on the same frequency as WiFi, and it’s not a restricted band anywhere in the world.

The problem iPhone is a 15 Pro Max model number MU783ZD/A running iOS 26.2.1.

I also thought that BLE was at 2.4GHz and was the same everywhere in the world. I don’t see anything in DeviceOS BLE functions that could possibly cause us to be missed in a BLE scan. There are filters in both BLE tools on iPhone but we tried all filters off (the default state) and also various combinations of filters to no avail.

So we are at a loss to explain why BLE doesn’t work for this specific combination of Photon 2 and iPhone.

I'm certain you've already checked this, but it bites me sometimes: can you confirm that one phone is not automatically pairing with the device terminating the advertising routine?

It might be worth turning off the Bluetooth radio of all phones except one to ensure the device is not paired.

1 Like

Ah, that’s a good idea! I’ll have our German partner check for a broadcast now that I’m home in the US – there’s no other device around that has previously connected.

Curious though, after I connected to ensure the telemetry was periodically streamed through a notify characteristic - I purposefully disconnected so our partner could connect. Is there a BLE spec for how soon a device starts advertising after a connection is removed? Maybe these BLE tools don’t actually disconnect when you go back to the scan screen?

It's generally up to the device to re-advertise, which should happen automatically with Device OS. But, I'm not sure how quickly - within a second or two. If I remember correctly, nRF Connect will remain connected when returning back to the scan screen.

1 Like

So some bad news - now that I’m in the US, our German partner tries scanning for the Photon 2 device on his iPhone and it STILL doesn’t show up in a scan list. He tried using an iPad and his Mac with similar BLE tools and it doesn’t show up on any of these devices either. So the theory that my iPhone was holding on to the BLE connection is apparently incorrect.

One thing I noticed when I was there is that there are hundreds of BLE devices in the scan list. It is a fairly populous area but I have never seen that many devices at once. Of course that didn’t affect my ability to scan for and connect to the Photon 2.

At this point I think I have no alternative but to add to the Log messages info about BLE to see if it is in advertising state or not. Perhaps enabling the TRACE level would show some BLE log events that could be useful in determining our problem?

Can you use BLE Hero or nRF Connect to capture the raw advertisement data and post it here? You will need to use the Android version since iOS doesn’t have access to the raw advertisement data

Don’t have access to an Android device in Germany currently - and presumably couldn’t use one to capture the advertising data anyway since our Particle device does not show in a scan list (on any European Apple device anyway.)

I have added some diagnostics to our code to capture the raw advertising data on the Particle side though. Here in the US at startup when the BLE object is being built in setup(), I get this from the log handler:

0000001525 [app] INFO: SETUP:BLE name AQ1-d859688b8
0000001529 [app] INFO: SETUP:BLE advertising:(7) 02 01 06 03 03 1A 18

The second line being the raw advertising data shown as 7 bytes in hex. It should of course be exactly the same in Germany. On the nRF app here in the US this shows as device “AQ1-d859688b8” advertising the service “Environmental Sensing” (0x181a).

Then a short BLE connection with the nRF app here in the US shows this in the log handler:

0000030003 [app] INFO: LOOP:BLE diag: Connected 0, Advertising 1
0000039733 [wiring.ble] TRACE: Connected
0000040004 [app] INFO: LOOP:BLE diag: Connected 1, Advertising 0
0000050005 [app] INFO: LOOP:BLE diag: Connected 1, Advertising 0
0000060006 [app] INFO: LOOP:BLE diag: Connected 1, Advertising 0
0000070007 [app] INFO: LOOP:BLE diag: Connected 1, Advertising 0
0000080008 [app] INFO: LOOP:BLE diag: Connected 1, Advertising 0
0000084312 [wiring.ble] TRACE: Disconnected
0000090009 [app] INFO: LOOP:BLE diag: Connected 0, Advertising 1

All as expected. So still completely stumped as to why this doesn’t show up in Germany on Iphone, iPad or Mac. As seems to be the usual case, I suspect the problem eventually turns out to be something simple.

Can you send me your firmware and I’ll give it a go on my EU devices.

Not sure how to get a .bin file to you. It is the same code with only some extra Log.info() additions. Obviously I can’t send you the sources.

It runs on a bare Photon 2 but the log output will include errors reaching the sensors. It does the BLE advertising which is the key issue here. The BLE name will be AQ1-XXXXXXXX where XXXXXXXX is the ending digits of the Photon 2 id.