Qt部分
QtOnAndroid.pro文件配置
首先在.pro文件中加入
QT += bluetooth
如下图所示:
mainwindow.ui
在写逻辑之前,我们应该先把界面设计好,如下图所示:
上图中有三个按钮,分别是btn_bluetooth,btn_update,pushbutton(未用到)
一个QListWidget ,name为 listWidget。
mainwindow.h
下面我们需要添加qt关于蓝牙部分的头文件
#include <QBluetoothAddress>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QBluetoothDeviceInfo>
#include <QBluetoothLocalDevice>
#include <QBluetoothSocket>
现在为整个蓝牙部分的运行添加一些槽函数
private slots:
void on_btn_bluetooth_clicked();//开启蓝牙
void findFinish();//搜索蓝牙设备结束
void connectOK();//连接成功
void connectNot();//连接失败
void connectBLE(QListWidgetItem *);//连接指定蓝牙设备
void addBlueToothDevicesToList(QBluetoothDeviceInfo info);//添加搜索到的蓝牙设备
void on_btn_update_clicked();//搜索周围蓝牙设备
上面这些函数的作用看名字基本也就明白是什么意思了。
再添加一些成员
QBluetoothDeviceDiscoveryAgent *discoveryAgent;
QBluetoothLocalDevice *localDevice;
QBluetoothSocket *socket;
这样,mainwindow.h中配置也就完成了。
mainwindow.cpp
在界面初始化函数中,我们先初始化好需要的类,并设置好信号与槽的关联。
//初始化蓝牙搜索类
discoveryAgent = new QBluetoothDeviceDiscoveryAgent();
//为本地蓝牙创建描述类
localDevice = new QBluetoothLocalDevice();
// 给socket分配内存,限定套接字协议
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
//判断蓝牙是否开启,若开启则不可被选中并扫描周围蓝牙设备
if (localDevice->hostMode() == QBluetoothLocalDevice::HostPoweredOff) {
ui->btn_bluetooth->setEnabled(true);
ui->btn_update->setEnabled(false);
// 开始扫描蓝牙设备
discoveryAgent->start();
} else {
ui->btn_bluetooth->setEnabled(false);
ui->btn_update->setEnabled(true);
}
// 发现设备时会触发deviceDiscovered信号,转到槽显示蓝牙设备
connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this,
SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));
connect(discoveryAgent, SIGNAL(finished()), this, SLOT(findFinish()));
//双击listwidget的项目,触发连接蓝牙的槽
connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this,
SLOT(connectBLE(QListWidgetItem *)));
connect(socket, SIGNAL(connected()), this, SLOT(connectOK()));
connect(socket, SIGNAL(disconnected()), this, SLOT(connectNot()));
槽函数实现如下:
void MainWindow::on_btn_bluetooth_clicked() {
localDevice->powerOn();
ui->btn_bluetooth->setEnabled(false);
ui->btn_update->setEnabled(true);
/* 开始扫描蓝牙设备 */
discoveryAgent->start();
}
void MainWindow::findFinish() { ui->btn_update->setEnabled(true); }
void MainWindow::connectOK() {
discoveryAgent->stop(); //停止搜索设备
QMessageBox::information(this, tr("成功"), tr("连接成功!"));
}
void MainWindow::connectNot() {
QMessageBox::information(this, tr("错误"), tr("连接失败!"));
}
void MainWindow::addBlueToothDevicesToList(QBluetoothDeviceInfo info) {
QString label =
QString("%1 %2").arg(info.address().toString()).arg(info.name());
QList<QListWidgetItem *> items =
ui->listWidget->findItems(label, Qt::MatchExactly);
if (items.empty()) {
QListWidgetItem *item = new QListWidgetItem(label);
QBluetoothLocalDevice::Pairing pairingStatus =
localDevice->pairingStatus(info.address());
/* 蓝牙状态pairingStatus,Pairing枚举类型 0:Unpaired没配对
* 1:Paired配对但没授权 2:AuthorizedPaired配对且授权 */
if (pairingStatus == QBluetoothLocalDevice::Paired ||
pairingStatus == QBluetoothLocalDevice::AuthorizedPaired) {
item->setForeground(QColor(Qt::green));
} else {
item->setForeground(QColor(Qt::black));
}
ui->listWidget->addItem(item);
}
}
void MainWindow::connectBLE(QListWidgetItem *item) {
static const QLatin1String serviceUuid(
"00001101-0000-1000-8000-00805F9B34FB");//百度来的手机连接单片机用的uuid
QString text = item->text();
int index = text.indexOf(' ');
if (index == -1)
return;
QBluetoothAddress address(text.left(index));
QString name(text.mid(index + 1));
QMessageBox::information(this, tr("信息"), tr("蓝牙正在连接中,请稍后..."));
socket->connectToService(address, QBluetoothUuid(serviceUuid),
QIODevice::ReadWrite);
}
void MainWindow::on_btn_update_clicked() {
ui->listWidget->clear();
discoveryAgent->start();
ui->btn_update->setEnabled(false);
}
至此,mainwindow.cpp编写完成。
运行结果
Arduino开发板
编写代码
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
while (Serial.available())
{
char c = Serial.read();
Serial.println(c);
}
}
上述代码就是在连接蓝牙后,我发什么数据,开发板返回什么数据
初始化时:
测试:
来源:CSDN
作者:ICyshtola
链接:https://blog.csdn.net/qq_36256697/article/details/103491587