Qt on android 蓝牙开发(控制小车)
因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助
首先在项目文件里添加
QT += bluetooth
这样就可以用QT关于蓝牙的一系列类了,接下来在添加头文件
#include <QtBluetooth/qbluetoothglobal.h> #include <QtBluetooth/qbluetoothlocaldevice.h> #include <qbluetoothaddress.h> #include <qbluetoothdevicediscoveryagent.h> #include <qbluetoothlocaldevice.h> #include <qbluetoothsocket.h>
添加要用的私有成员变量
private:Ui::BLE *ui;QBluetoothDeviceDiscoveryAgent *discoveryAgent;QBluetoothLocalDevice *localDevice;QBluetoothSocket *socket;
构造函数
discoveryAgent = new QBluetoothDeviceDiscoveryAgent();localDevice = new QBluetoothLocalDevice();/* 给socket分配内存,限定套接字协议 */socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);/* 判断蓝牙是否开启,若开启则不可被选中并扫描周围蓝牙设备 */if( localDevice->hostMode() == QBluetoothLocalDevice::HostPoweredOff ){ui->pushButton_openBLE->setEnabled(true);ui->pushButton_upDateBLE->setEnabled(false);/* 开始扫描蓝牙设备 */discoveryAgent->start();}else{ui->pushButton_openBLE->setEnabled(false);ui->pushButton_upDateBLE->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 BLE::on_pushButton_openBLE_clicked() {localDevice->powerOn();ui->pushButton_openBLE->setEnabled(false);ui->pushButton_upDateBLE->setEnabled(true);/* 开始扫描蓝牙设备 */discoveryAgent->start(); } /* 刷新 重新查找蓝牙设备 */ void BLE::on_pushButton_upDateBLE_clicked() {discoveryAgent->start();ui->pushButton_upDateBLE->setEnabled(false); } /* 返回控制页面 */ void BLE::on_pushButton_return_clicked() {this->hide();Control *c = new Control();c->show(); } /* 在ListWidget上显示查找到的蓝牙设备 */ void BLE::addBlueToothDevicesToList(const 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->setTextColor(QColor(Qt::green));elseitem->setTextColor(QColor(Qt::black));ui->listWidget->addItem(item);} } /* 刷新完成 */ void BLE::findFinish() {ui->pushButton_upDateBLE->setEnabled(true); } /* 蓝牙连接 */ void BLE::connectBLE(QListWidgetItem *item) {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("Info"),tr("The device is connecting..."));socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite); } /* 连接成功 */ void BLE::connectOK() {discoveryAgent->stop(); //停止搜索设备QMessageBox::information(this, tr("成功"), tr("连接成功!")); } /* 连接失败 */ void BLE::connectNot() {QMessageBox::information(this, tr("错误"), tr("连接失败!")); }
不要忘记设置蓝牙的uuid码
static const QLatin1String serviceUuid("00001101-0000-1000-8000-00805F9B34FB");
蓝牙的发送、读取数据和服务器客户端发送读取数据一样,发送数据用write() 读取数据先接收到readyRead()信号然后用readAll()读取
现在构造函数中添加信号和槽连接
connect(socket, SIGNAL(readyRead()), this, SLOT(readBluetoothDataEvent()));
槽函数
void BLE::readBluetoothDataEvent() {QByteArray line = socket->readAll();QString strData = line.toHex();comStr.append(strData);qDebug() <<"rec data is: "<< comStr;qDebug() <<"The comStr length is: " << comStr.length();if(comStr.length() >= 30) {ui->textBrowser_info->append(comStr + "\n");comStr.clear();}}
OK啦
下面附一个我的蓝牙控制小车的源码
链接:https://pan.baidu.com/s/15JjHSm-KQIsbN-zHOFW6IQ 密码:nxc0
转载于:https://www.cnblogs.com/xiaolanchong/p/9079522.html
Qt on android 蓝牙开发(控制小车)相关推荐
- android蓝牙开发代码,Android蓝牙开发(示例代码)
Android蓝牙开发 近期做蓝牙小车,须要Android端来控制小车的运动.以此文记录开发过程. 使用HC-06无线蓝牙串口透传模块.对于其它的蓝牙设备本文相同适用. 蓝牙开发的流程: 获取本地蓝牙 ...
- Android蓝牙开发 — 经典蓝牙BLE蓝牙
一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...
- Android蓝牙开发(一)蓝牙模块及核心API
本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API. 关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现. 蓝牙模块 从蓝牙4.0开始包含两 ...
- Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频
Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...
- Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱
本文是蓝牙音频相关的第3篇文章,查阅其他内容,请点击<Android蓝牙开发系列文章-策划篇>. 目前a2dp相关的内容有: <Android蓝牙开发系列文章-AudioTrack播 ...
- Android 蓝牙开发,申请打开蓝牙
申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH" ...
- android蓝牙聊天设备,Android蓝牙开发——实现蓝牙聊天
最近课上刚好需要做一个课程设计关于蓝牙的就挑选了个蓝牙聊天室,其实关键还是在于对蓝牙API的了解 一.蓝牙API 与蓝牙开发主要的相关类是以下四个 BluetoothAdapter 字面上则理解为蓝牙 ...
- Android蓝牙开发系列文章-蓝牙设备类型知多少?
在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...
- Android蓝牙开发(一)之打开蓝牙和设备搜索
Android蓝牙开发系列目录: https://blog.csdn.net/huangliniqng/article/details/82185635 一.判断是否系统是否支持蓝牙 在使用蓝牙之前, ...
最新文章
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第九节)
- java machine 报错_Eclipse启动时报错:No java virtual machine
- 命令行编译xcodebuild
- ClearTextBox.Text
- java开发门禁指纹,指纹门禁
- 前端学习(3231):React中的受控组件
- Linux、Windows、RHEL操作系统镜像
- 信息学奥赛一本通 1153:绝对素数
- ListView控件 1130
- python编程-Python3 网络编程
- DWR入门教程(http://www.cnblogs.com/cyjch/archive/2012/02/16/2353758.html)
- python函数完整语法和分类
- C++ windows网络编程系列1—各种通信模型对比
- openGL编程指南第一章
- novatel计算odom--GPS坐标与UTM坐标转换
- excel 数组函数入门讲座
- 2020年全国大学生数学建模竞赛优秀论文
- HTML-jQuery入门
- 社区圆桌分享:代码学习无止境,程序员如何规划自己的职业生涯发展?
- C++贪心算法求解找零钱问题(很形象)