To download NI software, including the products shown below, visit ni.com/downloads.
This example demonstrate on how to use the windows 10 BLE native library to communicate with BLE devices (Smart watch, bulb or any device which support BLE). Developed the DLL to interact with windows 10 BLE library in C# platform and integrated the dll into LabVIEW by using .Net constructor node.
Here demonstrates usage of the Bluetooth Generic Attribute (GATT) Client APIs for Universal Windows Platform (UWP), along with sample code for common GATT client tasks:
Description-Separate-2
Following are the methods available in BLE library:
Methods:
When setting the debug logs to true, C# library created the BLE log files under C drive
Development Environment:
LabVIEW 2020 32 Bit
OS: Win 10 64 bit
Added the Example code in HLD where user has to change the BLE address before run. The BLE address can be get after running the watcher.
Additional-Separate-2Example code from the Example Code Exchange in the NI Community is licensed with the MIT license.
Screen shot of BLE device communication using windows UWP library. I have used my smart watch to communicate by using LabVIEW and C# library
Great!
I was waiting for this.
I was able to capture my heart rate monitor with this example.
Thank you Bharathi-CLD.😆
Hi, I´m trying to use the write function using:
0000fff2-0000-1000-8000-00805f9b34fb as UUID.
Converting the command string (F0;) to byte array, but I don´t know how to extract the response.
hi, suddenly I started to get "Object reference not set to an instance of an object." error. even using simple code:
and now it works again, can it be antivirus?
in order to receive the data stream from the BLE device using Notify you have to remove for loop and wait from BLE_Notify_Listener.vi and control it from your app. Also it's good to remove key from the Gatt_Characteristic_NotifyValue after read so you don't read same value over and over.
example: config notify using BLE_Notify.vi, get Gatt_Characteristic_NotifyValue, check if it contains key - new packet of data, if no write "NO DATA/FAILURE" if yes read data and remove it from Gatt_Characteristic_NotifyValue so it's not read multiple times
I got "Object reference not set to an instance of an object." error agian
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P8XnSAK&l=en-CH
Hello,
Pls. let me know are you still getting Object reference not set to an instance of an object error. And let me know if you need any inputs on the driver.
Thanks
Bharathi T
the issue appeared again and tips from the link above do not work...
just tried on LV2021 SP1 32 and 64 bit
Could you please share source code of the library too?
debug info:
Log : 28.01.2021 20:29:12 ,ConnectBLE method called with address:123456789
Log : 28.01.2021 20:29:12 ,Waiting for BLE to connect with address:123456789
Log : 28.01.2021 20:29:12 ,Exception in ConnectBLE method:Object reference not set to an instance of an object.
vs debug without error:
Log : 26.01.2021 13:49:56 ,BLE_LIB method called
Log : 26.01.2021 13:49:56 ,ConnectBLE method called with address:123456789
Log : 26.01.2021 13:49:56 ,Waiting for BLE to connect with address:123456789
Log : 26.01.2021 13:49:56 ,Received the BLE Reference
Log : 26.01.2021 13:49:56 ,Connected with address:123456789
Log : 26.01.2021 13:50:04 ,ConnectBLE method pairstatus:Device unreachable
Hi,
I am using the library and am able to pair with my device and get the available UUIDs. I can read the values for the 'standard' UUIDs like device name, serial number, manufacturer. But when I try to read the custom UUIDs I get ProtocolError. Any idea how to correct this?
"in order to receive the data stream from the BLE device using Notify you have to remove for loop and wait from BLE_Notify_Listener.vi and control it from your app. Also it's good to remove key from the Gatt_Characteristic_NotifyValue after read so you don't read same value over and over.
example: config notify using BLE_Notify.vi, get Gatt_Characteristic_NotifyValue, check if it contains key - new packet of data, if no write "NO DATA/FAILURE" if yes read data and remove it from Gatt_Characteristic_NotifyValue so it's not read multiple times"
Still not working.
First i´m using write function sending the command "J;", than your notify process with UUID selected, is that correct?
Hi,
Can this library be used in tandem with the BLE toolkit using the BLED112 dongle? I have an application built around the BLE Toolkit, but now need a way to connect to a device and set some values in the attribute table.
Thanks,
George
BLED112 has its own LabVIEW library APIs to perform read / write.
Hi
Program is very good. I use this program connected bluefruit32. Bluefruit32 https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le
As far as I know Notify is data. And bluefruit32 send data every 1000ms.
The program always doesn't read Notify.
And I use BLE_Notify_Listener.vi. But data is empty.
Try BLE_Notify_Listener.vi add 'remove key' but same result.
Please help me.
Thanks.
regards.
Hi,
We need to register for notification using 'NotifyCharacteristicUUIDValue (BLE_Notify.vi)'. Once you register for this notification, then the new value gets retrived using BLE_Notify_Listener.vi. We have option to see the notification value in the BLE log as well. You may need to add logic to check whether the values are notified for every 1000msec.
I have a customer that has created a beacon using the Silicone Labs BLE Blue Gecko. The beacon is non-connectable - undirected. The devices show up under the watcher scan, but since the devices are not connectable I cannot pair with them to retrieve data. If I use a sniffer, I can see the raw data string with GAP data types 0x09 and 0x16. Is there a way to access the raw data from a beacon using UWP?
How to monitor connection status?
We are developing a Sensor, that has to send quite some data to the LabView GUI which I am currently developing. In order not to handle too many "packets", the Characteristics is larger than the "standard" max 20 byte payload. But I cannot get more than 20 bytes out via the API, the rest is just ignored apparently. Can I do something to set-up this functionality?
Hi, thanks for the library.
I am using it to connect to an Arduino MKR Wifi 1010 and I noticed that disconnecting does nothing, in fact the arduino detects the disconnection 3 seconds after the program closed. Using the disconnection methods DisConnect_BLE_ByAddress and DisConnect_BLE changes nothing.
Is there a proper way to disconnect the devices ?
Thanks.
Hi,
this library is very nice to use. Thanks for that.
But not all bytes are coming during data read. It seems also to me that 20bytes is the limit.
Can you change that or share the code for the dll here or on github?
Best regards
Hi, I´m trying to use the write function using:
0000fff2-0000-1000-8000-00805f9b34fb as UUID.
Converting the command string (F0;) to byte array, but I don´t know how to extract the response.
Hello you all,
the photo attached of the invoke node belongs to the Notify_listener.vi. As the key I tried connecting either one of the UUIDs that have "notify" as a property. However "ContainsKey" is false for both cases. I am somwhat lost on what to do/try next. Is there any way to view what keys are acceptet for the "ContainsKey" function? Any advice would be welcome.
Hi,
Thank you for providing such a wonderful library.
Is it possible to use indicate instead of notify in this library? Or is it possible to write directly to CCCD?
Best regards.
Hi you all,
Thanks and congratulations to the developer for this very usefull library !
My problem is that I need to obtain the adittional data on 2nd advertising from a peripheral in my application.
Is there any way to send a Scan Request and then receive the Scan Response ?
thank in advanced !!
Best Regards.
Hello,
I have a critical issue. I need to pair a cluster that displays a pair key to connect with it. The pass key has to be entered in the Labview. I am using BLE_Notify _Listener.vi to send it to the cluster. Is there any specific format to send the key along with UUID?
Any leads would be appreciated.
Regards,
Vijey.
hello,
We are control a ble device, that has to send some command. But I cannot get more than 20 bytes out via the API, the rest is just ignored apparently. Can I do something to set-up this functionality?
Thanks!