Windows下QT5蓝牙通信开发编程相关问题

蓝牙透传模块芯片有如下两种BLE和SPP协议子集

BLE蓝牙是蓝牙2.0以上的蓝牙模块,属于低功耗蓝牙部分。spp经典蓝牙是蓝牙2.0以下的蓝牙。

spp蓝牙型号有HC-02/HC-04/HC-05/HC-06/HC-07,默认配对密码1234。spp蓝牙协议的模块可以与手机直接配对。
ble蓝牙协议的模块需要通过ble协议的app或小程序进行连接,BLE蓝牙型号有HC-04/HC-08/HC-09/HC-42。

因此在使用QT编程时,spp蓝牙与ble蓝牙有两种不同的通信方式,所需要的配置各不相同.

首先我们来讲解spp经典蓝牙通信方式的一些经典问题:

首先,QT版本开发环境尽量为5.14.2以上,否则编译时会报错qt.bluetooth: Dummy backend running. Qt Bluetooth module is non-functional.

spp经典蓝牙使用socket编程进行客户端与服务器之间的通信(与网络socket相似),可使用MinGW编译器。

若要在Qt中使用蓝牙库需要在.pro文件添加一下一句话

QT       += bluetooth

然后我们来讲解一下ble低功耗蓝牙通信方式的一些经典问题:

BLE蓝牙则无法使用socket进行通信。BLE蓝牙下有服务、特征值,所谓的BLE蓝牙通信其实就是对特征值的一个读写操作。QT编译器必须选用MSVC编译器,否则无法扫描出低功耗蓝牙。搜索API中参数需要添加为下列形式:

Discovery->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);
void MainWindow::addBlueToothDevicesToList(QBluetoothDeviceInfo Info)
{
    if(Info.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
    {
        QString showStr = QString(Info.name()) + QString("(") + QString(Info.address().toString()) + QString (")");
        ui->listWidget->addItem(showStr);
        deviceList.append(Info);
    }
}

具体例程源码,后续会上传到资源。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要在Qt中实现Android蓝牙通信,需要使用Qt的Android Extras模块。下面是一些基本步骤: 1. 在.pro文件中添加以下行: ``` QT += androidextras ``` 2. 在代码中,包含QtAndroidExtras头文件: ``` #include <QtAndroidExtras> ``` 3. 在应用程序启动时,检查设备是否支持蓝牙: ``` bool hasBluetooth = false; if (QtAndroid::androidSdkVersion() >= 18) { QAndroidJniObject bluetoothAdapter = QAndroidJniObject::callStaticObjectMethod("android/bluetooth/BluetoothAdapter", "getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;"); if (bluetoothAdapter.isValid()) { hasBluetooth = true; } } ``` 4. 如果设备支持蓝牙,可以使用QBluetoothDeviceDiscoveryAgent类搜索蓝牙设备: ``` QBluetoothDeviceDiscoveryAgent discoveryAgent; connect(&discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo))); discoveryAgent.start(); ``` 5. 在deviceDiscovered()槽函数中,可以获取到搜索到的蓝牙设备信息: ``` void MyClass::deviceDiscovered(const QBluetoothDeviceInfo &info) { qDebug() << "Discovered device:" << info.name() << info.address().toString(); } ``` 6. 如果要连接蓝牙设备并发送数据,可以使用QBluetoothSocket类: ``` QBluetoothSocket socket(QBluetoothServiceInfo::RfcommProtocol); socket.connectToService(QBluetoothAddress(address), QBluetoothUuid(serviceUuid)); if (socket.error() == QBluetoothSocket::NoSocketError) { socket.write(data); } ``` 注意,上述代码需要替换address和serviceUuid为实际的蓝牙设备地址和服务UUID。 以上是基本的步骤,具体实现可能会涉及到更多的细节,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lisan_离散

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值