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
Forum Updated to NodeBB v4.3 + New Features

Qt BLE Discovery Can't Find Some Devices On Windows

Scheduled Pinned Locked Moved Unsolved Installation and Deployment
3 Posts 1 Posters 789 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