Welcome to the Windows Bluetooth Core Team blog!

Bluetooth is powering new innovations in wireless connectivity across computers, smart devices, and the Internet-of-Things. Besides being the input of choice for the new Surface accessories such as mice, keyboards, Surface Pen, and Surface Dial, it's become the preferred protocol for wearables and health monitoring systems like Fitbit and Garmin. Because of Bluetooth, a Jabra Sport Pulse headphone can stream music to power your workout, while simultaneously transferring your heart rate data to your smartphone. Bluetooth also makes it easy to track products on a shop floor. Finally, Bluetooth flagship applications, audio and automotive, are two key areas where it continues to innovate: from truly wireless earbuds with great battery life, to using Cortana's voice for map navigation, Bluetooth cannot be beat!

Hi, I'm Aruna, a new PM on the Bluetooth team, helping our dev community enable great Bluetooth experiences on Windows!

Check out our January blog post about our much anticipated release of new Bluetooth features in our Windows 10 Creators Update! Not only did we make improvements to our GATT server, and LE device connectivity, we also improved Bluetooth audio functionality. Now, your Skype audio will sound much better over Bluetooth!

As a part of that, we're excited to present our three-part video series* for Microsoft Build 2017. Our videos dive deep into:

* The BTVS sniffer tool, shown in the videos, is still work in progress. We'll keep you updated on its release timeline.

Other Microsoft Build 2017 sessions are available on Channel 9.

To learn more about our work in Bluetooth BR/EDR and LE, check out these links:

**Source-code for the LE Explorer app will be released at a later time.

If you have any questions, or would like us to discuss more about any of the topics in this post, please let us know in the comments below!

Comments (18)

  1. Andre Marschalek says:

    i miss the link to source code of Bluetooth LE Explorer ?

    1. Aruna [MSFT] says:

      Hi Andre,
      We're making some improvements to the LE Explorer app. We'll keep you posted on its release timeline.

      1. Cory Kroll says:

        Any new updates on this? I can connect successfully to my device with the app, and the app source would be extremely useful. I'd even take a code drop of whatever you've got right now, even if it isn't the final source you intend to publish. Thank you!

        1. Aruna [MSFT] says:

          Hi Cory,
          We are still on our way to open sourcing the LE Explorer app. In the meanwhile, please take a look at the BluetoothLEHelper module which is a part of the newly released open-sourced UWP toolkit version 1.5. This module is made from the core engine of the Bluetooth LE Explorer app. Here is more information: https://blogs.msdn.microsoft.com/btblog/2017/07/07/introducing-bluetoothlehelper/

  2. Joben says:

    I'm having problems with responding to read requests with an UWP application that acts as Bluetooth LE peripheral.

    I couldn't see in the videos how you did to respond to the read request.

    A working sample source code, like the Bluetooth LE Explorer app would have been nice as there isn't much documentation for the new features.

      1. Looking at the Stack Overflow question, it looks like your code snippet is based on an outdated, incorrect snippet that was online. We've since updated it -- sorry for the confusion.

        You need to make sure you take the deferral for the request. This is due to the Async operation that happens in the callback.

        var deferral = args.GetDeferral();
        var request = args.GetRequestAsync(); // In a foreground app, this should be called on the UX thread if the request is from a paired device and it's the first time it's been used.

        1. Joben says:

          Thanks a lot for the reply, now I got it working!

          But the documentation where I got the snippet from still has the old code.

        2. Greg says:

          I have created a sample UWP to run on a pi3. I followed Aruna's document link and examples shown in the channel 9 part 3 video, but I cannot get the read handler to return anything to the LE Exporer except Exception! A sample server code app would be awesome if someone could publish one.

          1. Greg says:

            Nevermind, I have been staring at it too long, just need to return a writer.WriteBytes() rather that a writer.WriteInt16().

  3. Jack says:

    I didn't hear an explanation from the Built videos that what enables the "Virtual Peripheral" feature in the LE explorer app? specific bluetooth devices in the host?

    1. Aruna [MSFT] says:

      Hi Jack,
      The virtual peripheral option would be automatically enabled in the app if the Bluetooth chipset in the device supports BLE peripheral role.
      Developers can discover which device radio can support this feature through the BluetoothAdapter.IsPeripheralRoleSupported API at runtime.

  4. Amanda says:

    i miss the link to source code of connect to an unpaired Bluetooth peripheral ?

    1. Aruna [MSFT] says:

      Hi Amanda,
      We shall be open-sourcing our LE Explorer app code soon. In the meanwhile, please take a look at the BluetoothLEHelper module, which is a part of the newly released open-sourced UWP toolkit version 1.5. This module uses the core engine from the LEExplorer app. Here is more information: https://blogs.msdn.microsoft.com/btblog/2017/07/07/introducing-bluetoothlehelper/

  5. Cory Kroll says:


    I've downloaded and run the UWP Toolkit. It worked well, but my issue is something not covered in the module. Maybe you could help me?

    I'm trying to listen for changed values in a characteristic that has a Notify Property.
    I can successfully get the characteristic (_rcCharacteristic) and I'm trying to receive events:

    // Set up an event listener
    _rxCharacteristic.ValueChanged += _rxCharacteristic_ValueChanged;

    // Subscribe to notifications of data changes from the GATT characteristic
    Task gattCommunicationStatusTask = _rxCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify).AsTask();
    if (gattCommunicationStatusTask.Wait(CONNECT_READSYNC_TIMEOUT) == false) return;
    GattCommunicationStatus gattCommunicationStatus = gattCommunicationStatusTask.Result;
    if (gattCommunicationStatus != GattCommunicationStatus.Success) return;

    This all works, and gattCommunicationStatus == GattCommunicationStatus.Success, yet the event never fires.
    In the BluetoothLE Explorer, I can switch on the Notify switch and data flows through just fine.
    Additionally, if I loop the following code, I do get different data coming, so I know it is changing:

    // Read latest value
    Task gattReadResultTask = _rxCharacteristic.ReadValueAsync(BluetoothCacheMode.Uncached).AsTask();
    if (gattReadResultTask.Wait(READSYNC_TIMEOUT) == false) return;
    GattReadResult gattReadResult = gattReadResultTask.Result;

    Any help you could give me would be greatly appreciated. Thank you!

    1. Hi,
      What are you using for your server and are you sure it's sending out notifications?

      1. Cory Kroll says:

        I'm pretty sure it is sending out notifications, based on what I am seeing with the Bluetooth LE Explorer app. Here is what I am doing:
        - Open Bluetooth LE Explorer app
        - Click the Start button
        - Click the hardware device that is found (it's in a blue tile)
        - Service Names and Characteristics for the device are shown. I click the characteristic I'd like from the list.
        - I am presented with a Characteristics page. Read Value has a value in it. It has a gray background. It is not changing. A Notify On/Off toggle is shown with an Off setting
        - I toggle the Notify property to On
        - The Read Value begins to change, and keeps changing

        I am assuming that this Read Value is being updated by a ValueChanged trigger based on this characteristic.
        But I can't get the same behavior to occur based on the code I've supplied, so I'm assuming what I'm doing is different than the source code behind how this app is working. I'm trying to understand the difference.

        Thanks so much for your replies and help so far. I'm hoping this is just some really simple adjustment to make this all work.

        1. That should work. Without debugging the code further I don't see what's wrong by just looking at some code snippets. Sorry.

          You could try looking at our UWP samples (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BluetoothLEClient) and see if that works. If it does, then you can debug your code to see what's missing.

          I hope that helps.

Skip to main content