Qt windows端的蓝牙串口服务

环境

系统

只测试过自己电脑,系统版本如下:
在这里插入图片描述
查看方式按win+R,然后输入winver确定即可:
在这里插入图片描述
查看设备管理器,确定自己电脑是否支持蓝牙模块:
在这里插入图片描述

Qt

需要选择MSVC版本编译,MinGW不支持Windows下的蓝牙模块,这也就限制了Qt的版本(早期有些版本没有MSVC编译器),本文使用的是Qt 5.12.6 MSVC2017 64bit

蓝牙模块

电脑端作为主机,蓝牙模块作为从机,测试用的是在某宝买的蓝牙模块:
在这里插入图片描述

使用步骤

蓝牙模块参数获取

使用USB转串口模块和蓝牙模块按如下连接:
在这里插入图片描述
电脑端打开串口助手,连接USB转串口模块的端口,默认波特率是9600:
在这里插入图片描述

AT+BAUD7
(网络截图)

配对

双击电脑的右下角的蓝牙图标:
在这里插入图片描述

如果右下角没有,如下也可以找到:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在本文的上面一点有提到如何修改蓝牙名字,和PIN码,配对时就需要用到PIN码:
在这里插入图片描述
输入后点击连接即可配对成功:
在这里插入图片描述

扫描、连接、数据收发

新建工程,在.pro加入bluetooth
在这里插入图片描述

扫描

头文件主要代码:

#include <QBluetoothDeviceInfo>
#include <qbluetoothdevicediscoveryagent.h>

private slots:
    void discoverBlueTooth(QBluetoothDeviceInfo info);
    void scanFinished();
    
private:
	QBluetoothLocalDevice *localDevice;

cpp文件主要代码:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QBluetoothDeviceDiscoveryAgent *discoveryAgent;
    discoveryAgent = new QBluetoothDeviceDiscoveryAgent;
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(discoverBlueTooth(QBluetoothDeviceInfo)));
    connect(discoveryAgent, SIGNAL(finished()), this, SLOT(discoveryFinished()));
    discoveryAgent->start();
}
void MainWindow::discoveryFinished()
{
    qDebug()<<"discoveryFinished";
}

void MainWindow::discoverBlueTooth(QBluetoothDeviceInfo info)
{
    QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());
    qDebug()<<label;
}

运行起来后就可以看到搜索到的蓝牙列表:
在这里插入图片描述

连接

头文件主要代码:

#include <QBluetoothSocket>
#include <QBluetoothUuid>
#include <QBluetoothAddress>
#include <QIODevice>

private slots:
    void readBluetoothDataEvent();
    void bluetoothConnectedEvent();
    
private:
	QString BTaddress;		// 记录MAC地址
    QBluetoothSocket *socket;	

cpp文件主要代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QBluetoothDeviceDiscoveryAgent *discoveryAgent;
    discoveryAgent = new QBluetoothDeviceDiscoveryAgent;
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(discoverBlueTooth(QBluetoothDeviceInfo)));
    connect(discoveryAgent, SIGNAL(finished()), this, SLOT(discoveryFinished()));
    discoveryAgent->start();
}
void MainWindow::discoveryFinished()
{
    qDebug()<<"discoveryFinished";

    static QString serviceUuid("00001101-0000-1000-8000-00805F9B34FB");
    socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
    socket->connectToService(QBluetoothAddress(BTaddress), QBluetoothUuid(serviceUuid),QIODevice::ReadWrite);
    connect(socket,SIGNAL(readyRead()), this, SLOT(readBluetoothDataEvent()));
    connect(socket,SIGNAL(connected()), this, SLOT(bluetoothConnectedEvent()));
}

void MainWindow::discoverBlueTooth(QBluetoothDeviceInfo info)
{
    QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());
    if(info.name()=="HC-06")
    {
        BTaddress = info.address().toString();
    }
    qDebug()<<label;
}


void MainWindow::readBluetoothDataEvent()
{
   char data[100];
   qint64 len = socket->read((char *)data, 100);

   QByteArray qa2((char*)data,len);
   QString qstr(qa2.toHex());//
   qDebug()<<"----"<<qstr.toUpper();
}
void MainWindow::bluetoothConnectedEvent()
{
    qDebug()<<"bluetoothConnectedEvent";
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行后就可以看到连接成功:
在这里插入图片描述

代码中有一行:

static QString serviceUuid("00001101-0000-1000-8000-00805F9B34FB");

蓝牙不仅仅有串口服务,还具有比如蓝牙耳机的音频服务,文件传输服务等,就是通过这个UUID来区分,不同的UUID有不同的含义,点击这里可以看到网友列出来的相关UUID:

数据收发

数据接收在上面的槽函数readBluetoothDataEvent()里面:

void MainWindow::readBluetoothDataEvent()
{
   char data[100];
   qint64 len = socket->read((char *)data, 100);

   QByteArray qa2((char*)data,len);
   QString qstr(qa2.toHex());//
   qDebug()<<"----"<<qstr.toUpper();
}

数据发送可以用连接的socket来实现:

void MainWindow::bluetoothDataSend(QString str)
{
    QByteArray arrayData;
    arrayData = str.toUtf8();
    socket->write(arrayData);
}

// 连接成功的事件中添加一行发送数据:
void MainWindow::bluetoothConnectedEvent()
{
    qDebug()<<"bluetoothConnectedEvent";

    bluetoothDataSend("hellow bluetooth");
}

即可实现蓝牙的串口交互(这里的波特率是根据上面的修改方式改过,如果没改默认是9600):
在这里插入图片描述
本文的demo工程

  • 13
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
Qt是一种跨平台的应用程序开发框架,它支持多种编程语言,如C++和Python。在Qt中,我们可以使用QtBluetooth模块来编写BLE蓝牙通信应用程序。 首先,我们需要确保我们的系统中已经安装了Qt,并且已经为我们选择的编程语言设置了相应的插件。 然后,我们可以创建一个新的Qt项目,并在项目代码中包含QtBluetooth模块的头文件。在代码中,我们可以使用QtBluetooth的类和函数来进行BLE蓝牙通信的操作。 首先,我们需要创建一个QBluetoothDeviceDiscoveryAgent对象来扫描周围的BLE设备。我们可以使用QBluetoothDeviceDiscoveryAgent的start()函数来开始扫描,并使用setLowEnergyDiscoveryTimeout()函数来设置扫描的超时时间。我们还可以通过连接QBluetoothDeviceDiscoveryAgent的deviceDiscovered()信号来获取扫描到的设备信息。 然后,我们可以使用QBluetoothSocket对象来建立与BLE设备的连接。我们可以使用QBluetoothSocket的connectToService()函数来建立连接,并连接到BLE设备的特定服务。在连接建立后,我们可以使用QBluetoothSocket的write()函数发送数据,并使用readyRead()信号来读取接收到的数据。 最后,当我们不再需要连接时,我们可以使用QBluetoothSocket的disconnectFromService()函数断开与BLE设备的连接。我们还可以使用QBluetoothDeviceDiscoveryAgent的stop()函数停止设备扫描。 总之,使用Qt编写BLE蓝牙通信应用程序可以方便地利用QtBluetooth模块的功能。通过使用Qt的类和函数,我们可以实现BLE设备的搜索、连接和通信操作,为我们的应用程序提供了蓝牙通信的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xflySnail

码字不易,鼓励鼓励...

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

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

打赏作者

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

抵扣说明:

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

余额充值