Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Installation and Deployment
  4. Qt BLE Discovery Can't Find Some Devices On Windows
Qt 6.11 is out! See what's new in the release blog

Qt BLE Discovery Can't Find Some Devices On Windows

Scheduled Pinned Locked Moved Unsolved Installation and Deployment
3 Posts 1 Posters 1.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    Gokhan Bektas
    wrote on last edited by
    #1

    Qt 5.12.5
    MSVC2017 32-bit, 64-bit
    MSVC2015 32-bit, 64-bit
    Windows 10 x64 OS

    I have been working on a Windows widgets project with BLE connectivity option. I noticed that Qt Bluetooth examples can't find the particular BLE device that I want to work with.

    I tried these examples:

    Bluetooth Low Energy Discovery Example
    QML Bluetooth Discovery Example
    Bluetooth Low Energy Heart Rate Game

    These are finding some other BLE devices around but not my device.

    I tried to increase the discovery timeout from 5sec to 15sec but it didn't help.
    m_deviceDiscoveryAgent->setLowEnergyDiscoveryTimeout(15000);

    Microsoft Bluetooth LE Explorer application can discover my device successfully on the same PC.

    I tried the Qt and compiler versions listed above on two computers, they both couldn't find my device.

    Strangely, I have used Qt for my BLE device last year after some struggle but eventually I had managed to get it to work flawlessly. I don't remember my Qt version at the time.

    Currently I am downloading Qt 5.12.2 kit, hoping to fix the issue.

    Any ideas?

    thanks

    1 Reply Last reply
    0
    • G Offline
      G Offline
      Gokhan Bektas
      wrote on last edited by
      #2

      Switching to Qt 5.15.2 made a difference.
      Now BLE discovery examples and my previous project can find my custom device.

      Unfortunately now I can't connect to the device since QLowEnergyState does not become QLowEnergyService::ServiceDiscovered.

      stateChanged signal is emitted but
      QLowEnergyService::ServiceState is ending up QLowEnergyService::DiscoveryRequired state. I don't know why but the same code was working on an unknown Qt version as-is.

      I am calling discoverDetails when service scan is done.
      I can see that my serviceUuid is found and listed by the way.

      void myBLE::serviceScanDone()
      {
      
              qDebug()<<"Service Scan Finished";
      
              static const QString serviceUuid( myUuid );
      
              m_service = m_control->createServiceObject(QBluetoothUuid(serviceUuid), this);
      
              connect( m_service , SIGNAL( characteristicChanged(QLowEnergyCharacteristic,QByteArray)),
                       this      , SLOT  ( updateData(QLowEnergyCharacteristic,QByteArray           )) );
      
              connect( m_service , SIGNAL( stateChanged(QLowEnergyService::ServiceState             )),
                       this      , SLOT  ( serviceStateChanged(QLowEnergyService::ServiceState      )) );
      
              connect( m_service , SIGNAL( descriptorRead(QLowEnergyDescriptor,QByteArray)),
                       this      , SLOT  ( descriptorRead(QLowEnergyDescriptor,QByteArray)));
      
              qDebug()<<"Calling discoverDetails()";
              m_service->discoverDetails();
      
              if ( m_service ) {
      
                    qDebug()<< "DiscoverDetails Service Name : " << m_service->serviceName();
                    qDebug()<< "DiscoverDetails Service UUID : " << m_service->serviceUuid();
      
              }
              else
                    qDebug() << "m_service is null";
      
      }
      
      1 Reply Last reply
      0
      • G Offline
        G Offline
        Gokhan Bektas
        wrote on last edited by
        #3

        Here is my debug low; I know it doesn't say much without the entire code.
        But it show which functions are called and which signals are fired by BLE Controller.

        Service Scan Finished. (QLowEnergyController::discoveryFinished)
        
        Available Services List :  ("{**00001523-1212-efde-1523-785feabcd123**}", "{00001800-0000-1000-8000-00805f9b34fb}", "{00001801-0000-1000-8000-00805f9b34fb}", "{0000180d-0000-1000-8000-00805f9b34fb}")
        
        QLowEnergyService Service Name :  "Unknown Service"
        QLowEnergyService Service UUID :  "{**00001523-1212-efde-1523-785feabcd123**}"
        
        Calling discoverDetails()
        
        ServiceState Changed : DiscoveringServices
        ServiceState Changed : DiscoveryRequired
        

        ServiceState does not become ServiceDiscovered for some reason.
        00001523-1212-efde-1523-785feabcd123 is the service that I want to use by the way.

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved