BLE advertising only in listening mode

We have updated our Argon’s to OS 1.3.0, along with the bootloader and the NCP firmware. I have tried the UART peripheral example and the advertising battery readings example (https://blog.particle.io/2019/06/26/get-started-with-ble-and-nfc/).

On a Samsung S8 I’ve been using Bluefruit, nRF Connect and nRF Toolbox apps to try to communicate. I see the Argon advertise momentarily on startup, but then not again.

When I put the Argon in listening mode I can see the Argons advertising and make a connection. When I add WiFi.listen() to the code in loop or setup, the Argon does NOT advertise.

I’ve claimed the device with the Particle app and given it wifi credentials to see if when connected to the cloud it would work… nope
So then I tried in Manual mode… nope

I was able to successfully change the advertising name on it once. When I’ve tried to change it again, it remains with the old name.

What am I missing? Why do the simple examples not work for me?

I had issues also.

I can confirm that the Argon will keep advertising data as long you don't stop it.
The only thing is that most apps don't keep updating the data.
However, with nRF Connect and increasing the periode how long it will keep scanning I can see the dynamic data being updated as long the app keeps scanning.

IMO that's also an issue with the used apps. They seem to be cashing the names even when the device changes its name.

This is the code I used and believe me: It does work. If it doesn't for you it's probably something with your mobile device and/or the used app (settings).

I can confirm that the nRF app on iOS on a iPad does not update or keep scanning for the BLE Broadcast from a Gen3 device. It did work on Android version of the nRF app.

I've cleared the apps cache and changed between three different ones, on an Android and an iPhone. If I try to connect to the device when I catch it on startup, the connection fails.

What mode is your Argon running in? Do you have credentials saved? Is it connected to the cloud?

Thanks, I'll try this one out today.

The code in the link above answers that. Since that code doesn't set a non-AUTOMATIC mode nor uses SYSTEM_THREAD(ENABLED) the device must be cloud connected.

The code won't run until the cloud connection is established.
If you want to run immediately, you should opt for a non-AUTOMATIC mode and/or use SYSTEM_THREAD(ENABLED).

Ok, I didn’t want to assume.

So I grabbed a new Argon and flashed the linked code without any additions. The Argon advertises but can’t establish a connection (since the code isn’t running). After I add the wifi credentials and get it connected, I can see it in the Bluefruit app and the system scanner but not in nRF Connect, even after clearing the cache.
When I use an iPhone none of the apps can see it advertising.

Any idea why this is inconsistent?

1 Like

After one unit just started working I investigated to see what it took to take an out of the box unit to work.

I flashed the unit first with the OS (1.3.0) and the firmware. Setting the setup done bit and giving it credentials were not enough.

I flashed the bootloader 1.3.0 and it started working as you two described.

So the lesson learned, a brand new unit needs the setup done bit set and the new bootloader flashed before BLE advertising will work.

One other nuance, if it doesn’t work at first startup after flashing, then put it into listening mode, then reset the unit.

Is this in the docs anywhere yet? It is new and confusing for beginners at the moment.

No, not that I’ve seen. Just what I observed multiple times in a row.

The BLE broadcast is nice because it can be received by multiple devices at the same time but accessing that data via the pre built apps that are avaliable to us is a real pain to work with which leaves us needing to build custom apps to work with it in a better format.

To me the Chrome Web BLE pages are the best way to view this data without the need to build custom apps. I just need more examples because the Chrome Web BLE is not my area of expertise but I’m pretty sure I could modify a example that had the basics already up and running.