Qt for Android 使用BLE串口蓝牙发送数据

最近搞毕设,买了个串口BLE蓝牙想配合Qt for Android做一个自制的遥控器,参考了很多qt蓝牙的文章,最后弄成apk发现连接不了我的蓝牙,折腾了好久发现Qt官方的蓝牙套接字只适用于SPP传输的蓝牙,而BLE蓝牙则有专门实现代码,说实话比蓝牙套接字复杂了好几百倍,而且官方的示例工程是一些有特殊功能的蓝牙,不太能移植到单单发送数据的串口蓝牙。由于我对蓝牙研究也不是很深,参考了很多大佬的博客,发现了一个比较好,功能相近的项目,下面是链接

Qt for Androidble蓝牙串口助手

但是进去后界面排版有点不好看,也没有源码可以提供,并且我只是要一个发送数据的功能,所以经过改造,实现了可以发送数据的功能了,下面贴下关键步骤的代码

下面是构造函数执行的操作,首先是建立一个搜索设备的服务类,设置好各种信号槽连接,然后开始搜索设备。

    //搜索设备
    m_deviceDiscoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
    m_deviceDiscoveryAgent->setLowEnergyDiscoveryTimeout(20000);	//设置超时时间
    connect(m_deviceDiscoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this,
            SLOT(addDevice(QBluetoothDeviceInfo)));//搜索到设备操作
    connect(m_deviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished()));//搜索结束
    connect(this, SIGNAL(returnAddress(QBluetoothDeviceInfo)), this, SLOT(createCtl(QBluetoothDeviceInfo)));				//开始连接目标设备
    connect(ui->bluemsg,SIGNAL(cursorPositionChanged()),this,SLOT(autoScroll()));	//信息一直在最下面显示

    m_deviceDiscoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);	//开始进行搜索
    ui->blue_search->setEnabled(false);

当搜索到设备后会进入下列槽函数,这里对目标设备进行了过滤,去除了非BLE的设备,然后添加进ListWidget的列表中

void MainWindow::addDevice(const QBluetoothDeviceInfo &info)
{
    if (info.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
    {//判断是否是BLE设备
        QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());//按顺序显示地址和设备名称
        QList<QListWidgetItem *> items = ui->bluelist->findItems(label, Qt::MatchExactly);//检查设备是否已存在,避免重复添加
        if (items.empty())
        {//不存在则添加至设备列表
            QListWidgetItem *item = new QList
  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
要在Qt中实现Android蓝牙通信,需要使用QtAndroid 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。 以上是基本的步骤,具体实现可能会涉及到更多的细节,需要根据具体情况进行调整。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值