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));
else
item->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 == -)
return;
QBluetoothAddress address(text.left(index));
QString name(text.mid(index + ));
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() >= ) { ui->textBrowser_info->append(comStr + "\n");
comStr.clear();
} }
OK啦
下面附一个我的蓝牙控制小车的源码
链接:https://pan.baidu.com/s/15JjHSm-KQIsbN-zHOFW6IQ 密码:nxc0
Qt on android 蓝牙开发(控制小车)的更多相关文章
- Qt on Android 蓝牙开发
版权声明:本文为MULTIBEANS ORG研发跟随文章,未经MLT ORG允许不得转载. 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本 ...
- Android蓝牙开发
Android蓝牙开发 近期做蓝牙小车,须要Android端来控制小车的运动.以此文记录开发过程. 使用HC-06无线蓝牙串口透传模块.对于其它的蓝牙设备本文相同适用. 蓝牙开发的流程: 获取本地蓝牙 ...
- Android 蓝牙开发(3)——蓝牙的详细介绍
前面的两篇文章,主要是在 Android 官网关于蓝牙介绍的基础上加上自己的理解完成的.主要针对的是 Android 开发中的一些 API 的使用. 第一篇文章 Android 蓝牙开发(1) 主要是 ...
- Android 蓝牙开发(整理大全)
Android蓝牙开发 鉴于国内Android蓝牙开发的例子很少,以及蓝牙开发也比较少用到,所以找的资料不是很全. (一): 由于Android蓝牙的通信都需要用到UUID,如果由手机发起搜索,当搜索 ...
- Android蓝牙开发教程(三)——蓝牙设备相互通讯
在上一篇中已经介绍如何连接我们搜索到的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(二)——连接蓝牙设备 在上一篇文章中,无论是自动连接还是被动连接,连接成功后,都是将获 ...
- Qt on Android 蓝牙通信开发
版权声明:本文为MULTIBEANS ORG研发跟随文章,未经MLT ORG允许不得转载. 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本 ...
- Android 蓝牙开发
今天给大家带来蓝牙开发的基础,主要展示的是程序搜到蓝牙会通过list展示出来,并实时排序,远近与信号强弱 首先我们要有次jar包 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- 【转】android蓝牙开发---与蓝牙模块进行通信--不错
原文网址:http://www.cnblogs.com/wenjiang/p/3200138.html 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利, ...
- android蓝牙开发---与蓝牙模块进行通信
近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利,但因为蓝牙模块不在我这里,所以只能用手机测试.一开头就发现手机的蓝牙不能用,为了证明这点,我刷了四次不同 ...
随机推荐
- 笔记本自开wifi设置
笔记本自开wifi设置 是这样的有些笔记本他自身就可以放出热点供其他的小伙伴们连接,不用非得去下专门的工具有些笔记本的网卡是自带支持双收发的(这里注意我指的是有些笔记本不是全部) 命令我已经写出来了 ...
- Docker Commands
Docker Commands 安装,以Ubuntu 14.04.3为例 apt-get install docker.io 注意安装之前需要更新系统 列出曾经存在的容器 docker ps -a 列 ...
- 用C++写程序的一些感悟
前言 近期使用C++有了一些心得很感悟,这里整理一下. 心得1 如果只会使用LabVIEW写程序,还想要进一步深入程序设计,一定要学习一门文本语言. 什么是会用LabVIEW 会用是个比较笼统的概念. ...
- system()函数
windows下system () 函数详解 windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system 功 能: 发出一个DOS命令 用 法: i ...
- HDU 3533 Escape(BFS+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...
- Python抓取微博评论(二)
对于新浪微博评论的抓取,首篇做的时候有些考虑不周,然后现在改正了一些地方,因为有人问,抓取评论的时候“爬前50页的热评,或者最新评论里的前100页“,这样的数据看了看,好像每条微博的评论都只能抓取到前 ...
- Spring 中Bean的装配方式
最近又买了一本介绍SSM框架的书,是由黑马程序员编写的,书上讲的很好理解,边看边总结一下.主要总结一下bean的装配方式. Bean的装配可以理解为依赖系统注入,Bean的装配方式即Bean依赖注入的 ...
- ps | grep app 命令不显示grep app本身进程的几种方式
ps | grep app 命令不显示grep app本身进程的几种方式 使用ps命令查询进程,常常我们不想打印出"ps | grep app"这个当前进程,比如如下: [root ...
- JavaScript最全编码规范
转载: JavaScript最全编码规范 类型 ●基本类型:访问基本类型时,应该直接操作类型值 ●string ●number ●boolean ●null ●undefined var foo = ...
- 小学生都能理解的原生js——call
关于 js 作用域和执行上下文就不过多介绍了,本人也是在网上搜集了各种教程才逐渐理解,以下简单理解并说下call 的作用 首先简单理解下执行上下文有关概念,this 的指向就代表当前执行环境的上下文 ...