The DFRobot Bluno Boards are the Arduino-compatible Bluetooth LE boards made by
the DFRobot company.
The boards are fully compatible with Arduino Nano, Arduino UNO, Arduino Mega 1280,
and Arduino Mega 2560 and with the TI CC2540 Bluetooth 4.0 LE chip on board.
DFRobot provides a mobile SDK for their boards so you can easily use it with Android and iOS devices.
But there is no Windows SDK, which makes it almost impossible to use the boards with the standard Windows
Bluetooth API. The Bluetooth Framework solves this problem and
allows you to communicate with any GATT-enabled Bluno board on the Windows platform with any
Bluetooth drivers or with the BLED112 Bluetooth module.
OnBoard GATT implementation
The board provides GATT characteristics for serial communication so your onboard code can send and receive data over a Bluetooth LE GATT connection. A client application can write to the characteristic and read data from it. Also, the characteristic has the notification enabled, but, however, the characteristic does not implement the Client Configuration Descriptor, the important thing for the GATT characteristic value changes notifications. The lack of this descriptor makes it impossible to receive notifications on Windows 10 and above when the standard Microsoft Bluetooth API is used. The Bluetooth Framework makes it possible to receive the notifications from the boards.
Connecting to the boards
To connect to the DFRobot Bluno board, use the wclGattClient class. The class has the ForceNotifications property, which must be set to "True" to enable receiving the characteristic change notifications from the Bluno boards (or from any other GATT-enabled device that does not have the client configuration descriptor). The board will be paired during connection establishing, so your application should handle the OnPinRequest event of the wclBluetoothManager class. The default PIN is "0000".
When the connection is established, your application can start receiving notifications by simply calling the Subscribe method of the wclGattClient class. Your application must not call the WriteClientConfiguration in this case because the boards do not have the client configuration descriptor configured for the characteristic.
You can find more detailed information about GATT communication in this article.