实现目标自己编写基于Qt的Android软件,实现手机与TB-02-kit模块之间的数据通讯;Android软件发送的数据由TB-02-kit模块转发给串口助手输出;可以在安卓软件中显示串口助手发送的数据,从而实现BLE的双向数据通信。所需工具及环境TB-02-kit模块QtCreator4.10.1Qt5.13.1XCOMV2.0串口助手安卓手机个人电脑Windows1064bit[版本10.0.19041.329]本文源码为第一次分享Qt代码,为了方便大家的学习,在代码中加入了很多注释,让大家通过代码的对比学习更高效。后台回复关键字“Android-BLE”,获取本文涉及的软件和Qt项目源码。具体实现1、要使用Qt蓝牙模块,必须在工程的.pro文件中添加一条语句才可以使用。2、扫描设备在构造函数中进行蓝牙设备扫描,即软件一启动就进行扫描。Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);//创建搜索服务:https://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.htmldiscoveryAgent=newQBluetoothDeviceDiscoveryAgent(this);//设置BLE的搜索时间discoveryAgent->setLowEnergyDiscoveryTimeout(20000);connect(discoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),this,SLOT(addBlueToothDevicesToList)(QBlueToothDevicesToList)(QBlueToothDevicesToList)找到设备后,将其添加到列表中并显示()));connect(this,SIGNAL(returnAddress(QBluetoothDeviceInfo)),this,SLOT(createCtl(QBluetoothDeviceInfo)));//开始设备搜索discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);}3.将扫描结果添加到QListWidget//deviceDiscoveredsignals对应的槽函数voidWidget::addBlueToothDevicesToList(constQBluetoothDeviceInfo&info){if(info.coreConfigurations()&QBluetoothDeviceInfo::LowEnergyCoreConfiguration)//获取设备信息,判断设备是否为BLE设备{//格式化设备地址和设备名称QStringlabel=QString("%1%2").arg(info.address().toString()).arg(info.name());//检查设备是否已经存在,避免添加QListitems=ui->ctrBleList->findItems(label,Qt::MatchExactly);//如果不存在,添加到设备列表if(items.empty()){QListWidgetItem*item=newQListWidgetItem(label);ui->ctrBleList->addItem(item);devicesList.append(info);}}}4.连接蓝牙并停止扫描voidWidget::on_btnConnectBle_clicked(){//确认选择了蓝牙设备if(!ui->ctrBleList->currentItem()->text().isEmpty()){//获取选择的地址QStringbltAddress=ui->ctrBleList->currentItem()->text().left(17);for(inti=0;i执行slots:createCtlemitreturnAddress(choosenDevice);//停止搜索服务discoveryAgent->stop();break;}}}}5.获取特征voidWidget::searchCharacteristic(){if(m_bleServer){QListlist=m_bleServer->characteristics();qDebug()<<[xiaohage]list.count()="<ctrSystemLogInfo->insertPlainText("\n有写权限!");m_writeCharacteristic=c;//保存写权限特征::Reader){mic;//保存读取权限特征}//描述符定义特定客户端如何配置该特征。ui->ctrSystemLogInfo->insertPlainText("\nWritedescriptor!");}}}}}6.发送数据writeCharacteristic()方法,发送数据到ble设备。点击界面中的“发送”按钮,发送“HelloWorld”字符串。voidWidget::SendMsg(QStringtext){QByteArrayarray=text.toLocal8Bit();m_bleServer->writeCharacteristic(m_writeCharacteristic,array,m_writeMode);}voidWidget::on_btnSendData_clicked(){SendMsg("HelloWorld");}7.通过蓝牙QLowEnergyService::characteristicRead的回调接口,接收蓝牙接收到的消息。voidWidget::BleServiceCharacteristicRead(constQLowEnergyCharacteristic&c,constQByteArray&value){Q_UNUSED(c)ui->ctrSystemLogInfo->insertPlainText("\n当特征读取请求返回值成功时:");ui->ctrSystemLogInfo->insertPlainText(QString(value));}8.DisconnectWidget::~Widget(){if(!(m_BLEController->state()==QLowEnergyController::UnconnectedState))m_BLEController->disconnectFromDevice();//断开设备deleteui;}界面布局结果展示If"Cannotconnect到远程设备。”出现,可以点击“连接”按钮重新连接。串口助手和应用程序输出Todo这个例子只是为了演示Android手机和TB-02-kit模块之间的通信过程。程序中有一些地方需要改进。例如,应该添加一个“扫描”按钮,而不是在软件启动过程中。直接进行蓝牙扫描。在这种情况下,需要在软件启动前完成蓝牙的开机。程序的健壮性也应该得到提高。比如偶尔模块不能正常连接,需要再次点击“连接”按钮。您可以自己改进这些任务。有了这部分知识,接下来就是结合安卓手机和TB-02-kit模块实现对STM32设备的远程控制了。Qt小知识1、QtCreator程序输出窗口过滤调试信息2、为Button添加事件在Button控件的右键菜单中选择“Gotoslot...”,然后在弹出的窗口中选择信号list:"clicked()",然后点击确定按钮进入其事件函数。参考资料Qt官方文档:https://doc.qt.io/qt-5/classes.html本文转载自微信公众号《从0到1的嵌入式》,可通过以下二维码关注。转载本文请联系嵌入式从0到1公众号。