Arduino nano 33BLE EDDYSTONE UID

Hi,

I have developed an Android app to advertise EDDYSTONE UID.

On the Nano BLE I can get the service UID but not the namespace ID and Instance ID.
How can I get that?
Thanks
J

@johanromuald, your topic has been moved to a more suitable location on the forum. See About the Installation & Troubleshooting category for the 'why' :wink:

Welcome to the forum.

Eddystone has been discontinued by Google for a couple of years now. May I ask why you want to use this?
Additionally, with beacons phones were intended to be the scanner not the beacon. Your smartphone does a lot of work to avoid tracking. Your app will make all that useless.

If you could provide some more information about your project, maybe we can recommend an alternative way to achieve your goal.

Hi,

Thanks for getting back.
I have developed an android app that runs on a phone or tablet as a foreground service. Users can configure this app to listen to particular nano's BLE mac address. There are three buttons on the nano. When each button closed momentarily, nano will advertise different Manufacture data for a set duration. Android devices will do the needful depending on the manufacturing data is received. This part all working.
I decided to change the above slightly. I do not want to make any Bluetooth connection between the nano and Android devices, but I want to send the acknowledgement back to the nano. I have achieved this by making Android devices to advertise part of nano's mack address as a serviceID which is picked by the nano as confirmation that Android device did receive nano's button pressed advertisement. It is working fine, but I want to send the full mac address as acknowledgement. I am using the Altbeacon library to make the advertisement from an Android device.
Thank you.

May I ask whether you know how GATT works and why you do not want to use that?

Using the MAC address is a generally bad idea. You are locking your software to a device instead of using service and characteristics UUIDs. Wen your device breaks you need to adapt your app to look for a new MAC address instead of just looking for the service UUID.
In case you want to use the MAC for security that not a good idea ether because the MAC address can be changed by people who really want to. e.g., your phone does that on a random basis to avoid tracking.

So, you want to make a connection but not the way BLE was designed to do it. You want to use your own pseudo connection protocol. May I ask, why?

Hi Klaus,

Thank you for your prompt reply.
I have not worked with GATT. Further, I did not use it for simplicity. Users will not have to configure the Nano out of the box. It will have three inputs and two LEDs indicate status. There will be a label on the nano unit with its mac address. The user has to enter mac address provided into the settings activity of the app, and from this point, the app will listen to any advertisement from that Nano. The mac address is not hardcoded to the app. If the nanodevice fails, the user can easily configure another nanodevice with its mac address.
If GATT can get acknowledgement from the Android app without doing any configuration on the Nano, I can look into it.
Thank you.

I do not understand that part. What do you mean with configure? No sketch? When the Arduino Nano 33 BLE does not have a sketch the BLE module will not advertise.

With the Generic Attribute Profile (GATT) BLE allows the exchange of data between a peripheral and a central device. GATT uses characteristics and services (collection of characteristics).
Each characteristic and service is identified by a UUID. This allows apps to know what the data in the characteristic is supposed to represent.

There are multiple generic BLE apps (e.g., BLE Scanner, nRF Connect) on iOS and Android that allow you to read and write to the characteristics. Your app could do the same but specific to your use case and prettier.

Hi Klaus,

You are correct, it appears it easy implement GATT. I made the Nano advertise when a event happens and wait for the central.
BLEDevice central = BLE.central(); // Wait for a BLE central to connect
if (central) {
Serial.print("Connected to central MAC: ");
Serial.println(central.address()); // Central's BT address:
while (central.connected()) {
stopblecom();
}

    Serial.print("Disconnected from central MAC: ");
    Serial.println(central.address());
}

I used the LightBlue Android app to test it. Now I am trying to find a sample code do the connection from my Android app.

Thanks.

How do you write your Android app?

Android Studio - Java

Thanks

Hi Klaus,

Thank you for your advice. It really helped. I manage to get app done following the code in the links below;
Connect to a GATT server | Android Developers
GitHub - android/connectivity-samples: Multiple samples showing the best practices in connectivity on Android.
Thank you once again.
Best regards :grinning:

1 Like