精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Qt編程實例:基于Android的BLE通信軟件

移動開發(fā) Android
自己編寫基于Qt的Android軟件,用于實現(xiàn)手機與TB-02-kit模塊進行數(shù)據(jù)通訊;Android軟件發(fā)送的數(shù)據(jù),經(jīng)TB-02-kit模塊轉(zhuǎn)發(fā)至串口助手中輸出;串口助手發(fā)送的數(shù)據(jù)可以在Android軟件中顯示,進而實現(xiàn)BLE的數(shù)據(jù)雙向通信。

[[374870]]

 實現(xiàn)目標

  • 自己編寫基于Qt的Android軟件,用于實現(xiàn)手機與TB-02-kit模塊進行數(shù)據(jù)通訊;
  • Android軟件發(fā)送的數(shù)據(jù),經(jīng)TB-02-kit模塊轉(zhuǎn)發(fā)至串口助手中輸出;
  • 串口助手發(fā)送的數(shù)據(jù)可以在Android軟件中顯示,進而實現(xiàn)BLE的數(shù)據(jù)雙向通信。

所需工具及環(huán)境

  • TB-02-kit模塊
  • Qt Creator 4.10.1
  • Qt 5.13.1
  • XCOM V2.0 串口助手
  • Android 手機
  • 本人電腦 Windows 10 64bit [版本 10.0.19041.329]

本文源碼

因為是第一次分享Qt代碼,為了方便大家學(xué)習(xí),代碼中添加了大量注釋,大家對照著代碼學(xué)習(xí)效率高點。

后臺回復(fù)關(guān)鍵字“Android-BLE”,獲取本文涉及到的軟件及Qt工程源碼。

具體實現(xiàn)

1. 要使用Qt藍牙模塊, 項目的 .pro文件中要添加聲明才可使用

2. 掃描設(shè)備

在構(gòu)造函數(shù)中執(zhí)行藍牙設(shè)備掃描,即軟件一啟動就執(zhí)行掃描。

  1. Widget::Widget(QWidget *parent) 
  2.     : QWidget(parent) 
  3.     , ui(new Ui::Widget) 
  4.     ui->setupUi(this); 
  5.  
  6.     //創(chuàng)建搜索服務(wù):https://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html 
  7.     discoveryAgent =new QBluetoothDeviceDiscoveryAgent(this); 
  8.     //設(shè)置BLE的搜索時間 
  9.     discoveryAgent->setLowEnergyDiscoveryTimeout(20000); 
  10.     connect(discoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),this,SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));//找到設(shè)備之后添加到列表顯示出來 
  11.     connect(discoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished())); 
  12.     connect(discoveryAgent, SIGNAL(canceled()), this, SLOT(scanCanceled())); 
  13.     connect(this, SIGNAL(returnAddress(QBluetoothDeviceInfo)), this, SLOT(createCtl(QBluetoothDeviceInfo))); 
  14.  
  15.     //開始進行設(shè)備搜索 
  16.     discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); 

3. 將掃描結(jié)果添加到QListWidget中

  1. //deviceDiscovered signals 對應(yīng)的槽函數(shù) 
  2. void Widget::addBlueToothDevicesToList(const QBluetoothDeviceInfo &info) 
  3.     if (info.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration)           //獲取設(shè)備信息,并判斷該設(shè)備是否為BLE設(shè)備 
  4.     { 
  5.         //格式化設(shè)備地址和設(shè)備名稱 
  6.         QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name()); 
  7.         //檢查設(shè)備是否已存在,避免重復(fù)添加 
  8.         QList<QListWidgetItem *> items = ui->ctrBleList->findItems(label, Qt::MatchExactly); 
  9.  
  10.         //不存在則添加至設(shè)備列表 
  11.         if (items.empty()) 
  12.         { 
  13.             QListWidgetItem *item = new QListWidgetItem(label); 
  14.             ui->ctrBleList->addItem(item); 
  15.             devicesList.append(info); 
  16.         } 
  17.     } 

4. 連接藍牙,停止掃描

  1. void Widget::on_btnConnectBle_clicked() 
  2.     //確認選取了某一個藍牙設(shè)備 
  3.     if(!ui->ctrBleList->currentItem()->text().isEmpty()) 
  4.     { 
  5.         //獲取選擇的地址 
  6.         QString bltAddress = ui->ctrBleList->currentItem()->text().left(17); 
  7.  
  8.         for (int i = 0; i<devicesList.count(); i++) 
  9.         { 
  10.             //地址對比 
  11.             if(devicesList.at(i).address().toString().left(17) == bltAddress) 
  12.             { 
  13.                 QBluetoothDeviceInfo choosenDevice = devicesList.at(i); 
  14.                 //發(fā)送自定義signals==>執(zhí)行slots:createCtl 
  15.                 emit returnAddress(choosenDevice); 
  16.                 //停止搜索服務(wù) 
  17.                 discoveryAgent->stop(); 
  18.                 break; 
  19.             } 
  20.         } 
  21.     } 

5. 獲取特征

  1. void Widget::searchCharacteristic() 
  2.     if(m_bleServer) 
  3.     { 
  4.         QList<QLowEnergyCharacteristic> list=m_bleServer->characteristics(); 
  5.         qDebug()<<"[xiaohage]list.count()="<<list.count(); 
  6.         //遍歷characteristics 
  7.         for(int i=0;i<list.count();i++) 
  8.         { 
  9.             QLowEnergyCharacteristic c=list.at(i); 
  10.             /*如果QLowEnergyCharacteristic對象有效,則返回true,否則返回false*/ 
  11.             if(c.isValid()) 
  12.             { 
  13.                 //返回特征的屬性。 
  14.                 //這些屬性定義了特征的訪問權(quán)限。 
  15.                 if(c.properties() & QLowEnergyCharacteristic::WriteNoResponse || c.properties() & QLowEnergyCharacteristic::Write) 
  16.                 { 
  17.                     ui->ctrSystemLogInfo->insertPlainText("\n具有寫權(quán)限!"); 
  18.                     m_writeCharacteristic = c;  //保存寫權(quán)限特性 
  19.                     if(c.properties() & QLowEnergyCharacteristic::WriteNoResponse) 
  20.                     { 
  21.                         m_writeMode = QLowEnergyService::WriteWithoutResponse; 
  22.                     } 
  23.                     else 
  24.                     { 
  25.                         m_writeMode = QLowEnergyService::WriteWithResponse; 
  26.                     } 
  27.                 } 
  28.  
  29.                 if(c.properties() & QLowEnergyCharacteristic::Read
  30.                 { 
  31.                     m_readCharacteristic = c; //保存讀權(quán)限特性 
  32.                 } 
  33.  
  34.                 //描述符定義特征如何由特定客戶端配置。 
  35.                 m_notificationDesc = c.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); 
  36.                 //值為真 
  37.                 if(m_notificationDesc.isValid()) 
  38.                 { 
  39.                     //寫描述符 
  40.                     m_bleServer->writeDescriptor(m_notificationDesc, QByteArray::fromHex("0100")); 
  41.                     ui->ctrSystemLogInfo->insertPlainText("\n寫描述符!"); 
  42.                 } 
  43.             } 
  44.         } 
  45.     } 

6. 發(fā)送數(shù)據(jù)

writeCharacteristic()方法,發(fā)送數(shù)據(jù)給ble設(shè)備。

點擊界面中的"發(fā)送"按鈕,發(fā)送"Hello World"字符串。

  1. void Widget::SendMsg(QString text) 
  2.     QByteArray array=text.toLocal8Bit(); 
  3.  
  4.     m_bleServer->writeCharacteristic(m_writeCharacteristic,array, m_writeMode); 
  5.  
  6. void Widget::on_btnSendData_clicked() 
  7.     SendMsg("Hello World"); 

7. 寫入數(shù)據(jù)

通過藍牙QLowEnergyService::characteristicRead的回調(diào)接口,接收藍牙收到的消息。

  1. void Widget::BleServiceCharacteristicRead(const QLowEnergyCharacteristic &c,const QByteArray &value) 
  2.     Q_UNUSED(c) 
  3.  
  4.     ui->ctrSystemLogInfo->insertPlainText("\n當特征讀取請求成功返回其值時:"); 
  5.     ui->ctrSystemLogInfo->insertPlainText(QString(value)); 

8. 斷開連接

  1. Widget::~Widget() 
  2.     if(!(m_BLEController->state() == QLowEnergyController::UnconnectedState)) 
  3.             m_BLEController->disconnectFromDevice();//從設(shè)備斷開鏈接 
  4.  
  5.     delete ui; 

界面布局

結(jié)果展示

如果出現(xiàn)" Cannot connect to remote device. " ,可以點擊"連接"按鈕重新連接一下。

串口助手及應(yīng)用程序輸出

To do

本實例只是演示一下Android手機與TB-02-kit模塊的通訊過程,程序里有需要完善的地方,比如,應(yīng)該增加一個"掃描"按鈕,而不是軟件啟動過程中直接進行藍牙掃描,這樣的話,就需要藍牙的上電要在軟件啟動之前完成。

程序的健壯性也要完善,比如偶爾會出現(xiàn)與模塊無法正常連接的情況,需要再次點擊"連接"按鈕才可,這些工作你們自己可以完善一下哈。

有了本部分知識,下一步我們結(jié)合Android手機和TB-02-kit模塊,實現(xiàn)STM32的設(shè)備的遠程控制。

Qt小知識

1. Qt Creator程序輸出窗口過濾調(diào)試信息

2. 為Button添加事件

Button控件右鍵菜單中選中“轉(zhuǎn)到槽...”,然后在彈出列表中選中信號:“clicked() ”,然后點擊OK按鈕,即可進入其事件函數(shù)中。

參考資料

Qt官方文檔:https://doc.qt.io/qt-5/classes.html

本文轉(zhuǎn)載自微信公眾號「嵌入式從0到1」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式從0到1公眾號。

 

責任編輯:武曉燕 來源: 嵌入式從0到1
相關(guān)推薦

2011-06-13 16:51:19

Qt Socket

2011-06-22 17:49:35

Linux Qt 串口

2015-02-27 16:03:26

Android源碼Bluetooth_4BLE藍牙通信

2011-06-27 11:08:37

Qt 串口 通信

2014-08-26 11:46:46

QtAndroid實例教程

2022-01-25 16:54:14

BLE操作系統(tǒng)鴻蒙

2011-06-21 14:12:14

Qt Linux 登錄界面

2011-06-22 16:18:23

QT 多線程 QSocket

2011-06-30 17:51:17

QT 元類型 線程

2014-08-11 16:41:05

Android傳感器

2011-06-08 14:24:20

JVM Qt QtJambi

2015-07-15 14:27:04

Eddystone通信蘋果

2011-07-05 14:46:34

2011-07-25 13:16:23

無線局域網(wǎng)擴頻通信

2011-06-22 10:12:08

Qt 線程

2011-06-27 16:07:49

Qt Designer

2011-06-21 09:33:49

Qt 啟動 界面

2011-06-24 14:34:17

Qt 小票 打印

2011-06-14 16:45:57

Qt 圖標

2011-06-30 16:24:38

Qt TableWidge
點贊
收藏

51CTO技術(shù)棧公眾號

成人av片在线观看| 亚洲国产日本| 91麻豆精品国产综合久久久久久| 中文字幕综合在线观看| 亚洲精品久久久久久久久久久久久久| 亚洲深夜影院| 日韩一级黄色av| 成人区人妻精品一区二| 亚洲爱爱视频| 一区二区三区国产精品| 欧美一区二区影视| www.激情五月| 日本女优在线视频一区二区| 欧美激情啊啊啊| 青娱乐国产视频| 国产精品chinese在线观看| 欧美中文字幕一区| 成人免费观看cn| 毛片网站在线免费观看| 99免费精品视频| 亚洲精品欧美极品| 99成人精品视频| 最新日韩在线| 欧美精品一区在线播放| 少妇一级黄色片| 日韩a级大片| 91精品国产高清一区二区三区蜜臀| 国产精品97在线| av资源网在线播放| 亚洲婷婷在线视频| 日韩欧美国产二区| 天堂资源最新在线| 国产91精品免费| 成人黄色片网站| 亚洲天堂aaa| 丝袜亚洲另类丝袜在线| 26uuu久久噜噜噜噜| 欧美毛片在线观看| 永久亚洲成a人片777777| 国产亚洲精品久久久久久| 欧美日韩人妻精品一区在线| 国产一区二区三区免费观看在线 | 国产精品99无码一区二区| 91视频久久| 中文字幕亚洲欧美日韩2019| 中文字幕在线看高清电影| 精品按摩偷拍| 亚洲电影免费观看高清完整版在线| 免费成人黄色大片| 亚洲欧洲专区| 欧美人与性动xxxx| 在线观看免费不卡av| 久久91视频| 欧美日韩黄色影视| 亚洲综合激情视频| avtt久久| 日韩女优电影在线观看| 农村末发育av片一区二区| 看亚洲a级一级毛片| 91精品欧美久久久久久动漫| www激情五月| 另类视频一区二区三区| 日韩欧美精品在线| 亚洲少妇中文字幕| 欧美激情极品| 亚洲精品综合精品自拍| 国产成人精品无码免费看夜聊软件| 伊人久久大香线蕉| 国产一区二区三区在线观看网站| 国产精品高清无码在线观看| 精品久久综合| 久久久www成人免费精品| 丝袜 亚洲 另类 欧美 重口| 国内揄拍国内精品久久| 69影院欧美专区视频| 欧产日产国产69| 蜜乳av一区二区| 92福利视频午夜1000合集在线观看| 成人黄色免费视频| 91亚洲精品一区二区乱码| 日本精品一区二区三区高清 久久| 国产小视频免费在线观看| 国产精品久久福利| 97超碰国产精品| 欧美电影免费观看| 制服丝袜av成人在线看| 欧美双性人妖o0| 亚洲亚洲免费| 久久精品电影网| 亚洲精品www久久久久久| 日韩国产欧美在线视频| 666精品在线| 三区在线视频| 日韩一区欧美小说| 亚洲国产精品成人天堂| 97精品国产综合久久久动漫日韩| 欧美一级片免费看| 女~淫辱の触手3d动漫| 亚洲精品国产首次亮相| 欧美诱惑福利视频| 精品国自产拍在线观看| 97精品视频在线观看自产线路二| 亚洲欧美国产精品桃花| av在线播放资源| 欧美日本乱大交xxxxx| 毛茸茸free性熟hd| 97精品97| 日本久久久久久久久| 国产特级aaaaaa大片| 久久综合久久综合久久综合| 免费看污污视频| 日韩欧美另类一区二区| 精品久久一区二区| av在线播放中文字幕| av不卡免费看| 91沈先生作品| www亚洲人| 欧美性猛交xxxx乱大交蜜桃| 超碰在线超碰在线| 神马影视一区二区| 97国产真实伦对白精彩视频8| 91久久精品国产91性色69| 26uuu精品一区二区| 国产人妻人伦精品| 色婷婷成人网| 中日韩美女免费视频网址在线观看 | 一区二区三区欧美日韩| 91国产精品视频在线观看| 亚洲第一二三区| 久久久久久久久亚洲| 国产三级视频在线播放| 国产精品卡一卡二| 手机在线看福利| 亚洲小说图片视频| 国产91精品久久久久久久| www.午夜激情| 玉米视频成人免费看| 亚洲娇小娇小娇小| 久久精品高清| 国产精品一区二区三区久久久| 瑟瑟在线观看| 欧美日韩午夜视频在线观看| 成人在线观看一区二区| 欧美日韩天堂| 99中文字幕| 香蕉久久aⅴ一区二区三区| 91精品久久久久久久久99蜜臂| 五月天免费网站| 美女视频黄久久| 欧美aaa在线观看| 国产精品一区二区三区四区在线观看| 爽爽爽爽爽爽爽成人免费观看| 制服丝袜在线一区| 国产精品视频yy9299一区| 我看黄色一级片| 久久在线视频| 成人综合网网址| 黄色成人影院| 91麻豆精品国产自产在线观看一区 | 少妇人妻精品一区二区三区| 精品福利在线看| 国产麻豆天美果冻无码视频| 香蕉亚洲视频| 亚洲成人第一| 韩国三级大全久久网站| 久久久久久欧美| 三级毛片在线免费看| 在线视频国产一区| 久久福利免费视频| 成人污视频在线观看| 免费看日本毛片| 禁果av一区二区三区| 国产日本欧美一区| 色在线视频网| 日韩电影中文字幕av| 一级久久久久久| 亚洲欧洲综合另类在线 | 国产亚洲人成网站| 色噜噜狠狠永久免费| 欧美va亚洲va日韩∨a综合色| 国产精品久久波多野结衣| 永久免费毛片在线播放| 丝袜亚洲另类欧美重口| 亚洲精品久久久久久久久久 | 热久久免费视频精品| 91精品国产综合久久久久久豆腐| 91精品欧美福利在线观看| 日韩毛片在线播放| 国产精品国产三级国产有无不卡| 美女日批在线观看| 久久一区中文字幕| 狠狠精品干练久久久无码中文字幕| 欧美黄色网视频| 成人欧美一区二区三区黑人孕妇| 黄色美女视频在线观看| 国产一区二区黄| 亚洲av无码国产综合专区 | 1769国产精品| 成人日韩欧美| 亚洲色图校园春色| 性做久久久久久久久久| 在线免费观看日本欧美| 久久久国产成人| 国产精品素人一区二区| 91丝袜在线观看| 极品美女销魂一区二区三区| 又粗又黑又大的吊av| 中文字幕免费一区二区三区| 欧美高清性xxxxhd| 极品束缚调教一区二区网站 | 日本高清视频网站| 欧美老年两性高潮| 欧美一区免费看| 亚洲成a人片在线不卡一二三区 | 亚洲h在线观看| 日本精品人妻无码77777| 欧美激情自拍偷拍| 少妇户外露出[11p]| 国产精品自拍av| 亚洲天堂国产视频| 日韩精品一级二级| 丰满爆乳一区二区三区| 黄色工厂这里只有精品| 国产精品99久久久久久大便| jiujiure精品视频播放| 女女同性女同一区二区三区91| 亚洲一区 二区| 96pao国产成视频永久免费| 视频一区在线免费看| 欧美专区日韩视频| 日本乱码一区二区三区不卡| 性视频1819p久久| aa级大片免费在线观看| 欧美福利视频在线| 日本三级在线观看网站| 欧美成人免费大片| 最新日本在线观看| 欧美美女操人视频| a天堂中文在线官网在线| 久久精品99久久久香蕉| 黄色网页网址在线免费| 久久综合国产精品台湾中文娱乐网| 日韩伦理在线电影| 日韩视频免费观看| 国产黄色在线网站| 美女视频黄免费的亚洲男人天堂| 免费在线观看黄| 久久手机精品视频| 2024最新电影免费在线观看| 欧美另类高清videos| 最爽无遮挡行房视频在线| 欧美成人在线免费视频| 欧美aaaaaaa| 欧美精品激情在线观看| 成年女人在线看片| 奇米成人av国产一区二区三区| 性欧美1819sex性高清| 国产精品18久久久久久首页狼| 日本综合视频| 91精品久久久久久久久| 久久三级中文| 国产九色91| 亚洲黄页在线观看| 亚洲第一综合| 午夜精品av| 狠狠爱免费视频| 日产欧产美韩系列久久99| 男人的天堂最新网址| 国产成人免费网站| 无码人妻精品一区二区三区温州| 久久久久高清精品| 亚洲女人久久久| 天天影视涩香欲综合网| 看黄色一级大片| 91精品欧美久久久久久动漫| 蜜桃视频污在线观看| 亚洲性视频网址| 国产激情在线视频| 91黄色8090| 国产精品高潮久久| 成人国产1314www色视频| 岳的好大精品一区二区三区| 一区精品视频| 亚洲巨乳在线| 中文字幕有码av| 成人午夜av电影| 青青草华人在线视频| 亚洲成人高清在线| 中文字幕人妻一区二区三区视频| 日韩欧美一区二区免费| 色鬼7777久久| 久久91亚洲精品中文字幕| 免费成人动漫| 999日本视频| 精品久久久亚洲| 欧美成人免费在线观看视频| 免费av成人在线| 国产精品久久不卡| 亚洲欧美日韩中文播放 | 欧美一级黄色大片| 国产区视频在线播放| 欧美日韩成人免费| 国产电影一区二区三区爱妃记| 成人在线观看av| 水蜜桃久久夜色精品一区| 国产欧美日韩网站| 国产一区二区精品在线观看| 国产sm调教视频| 亚洲二区视频在线| 99在线观看精品视频| 亚洲人在线视频| 日本不良网站在线观看| 翡翠波斯猫1977年美国| 日韩一区电影| 韩国一区二区av| av成人动漫在线观看| 亚洲国产美女视频| 欧美日韩一区 二区 三区 久久精品| 日本免费一区视频| 欧美乱大交做爰xxxⅹ性3| 国产美女久久| 亚洲高清视频一区二区| 先锋a资源在线看亚洲| 男男做爰猛烈叫床爽爽小说| 一区二区三区在线观看国产| 一级黄色大片免费观看| 一区二区三区精品99久久 | 成人黄在线观看| 不卡一区综合视频| 日韩av资源在线| 99国产精品一区| 日产精品久久久久| 精品国产成人在线影院| 日本天码aⅴ片在线电影网站| 91视频88av| 你懂的视频一区二区| www.午夜av| 一区二区三区四区五区视频在线观看 | 青青草原av在线| 99视频国产精品免费观看| 综合精品一区| japan高清日本乱xxxxx| 一区二区三区四区在线播放| 性中国xxx极品hd| 欧美激情一级精品国产| 国产成人高清精品免费5388| 国产曰肥老太婆无遮挡| 成人福利视频在线| 日韩免费av片| 国产丝袜一区二区三区| 一区二区三区四区日本视频| 日本亚洲欧洲精品| 日本亚洲天堂网| 操她视频在线观看| 制服丝袜一区二区三区| 美女网站视频在线| 激情欧美一区二区三区中文字幕| 国产欧美一区二区色老头 | 真实国产乱子伦精品一区二区三区| 日韩成人精品视频在线观看| 亚洲视频在线观看三级| 亚洲精选一区二区三区| **欧美日韩vr在线| 欧美一区二区性| 6080国产精品| 亚洲国产精品综合小说图片区| 午夜福利理论片在线观看| 国产成人欧美在线观看| 日韩精品欧美激情一区二区| www.午夜av| 欧美日韩黄色大片| 91视频在线观看| 国产精品国产三级欧美二区| 午夜亚洲影视| www.4hu95.com四虎| 欧美一区二区三区小说| 人狥杂交一区欧美二区| 亚洲国产精品一区在线观看不卡| 国产乱码一区二区三区| 日韩免费一级片| 色悠悠国产精品| 超碰在线成人| 一道本视频在线观看| 一区二区三区高清不卡| 黄色在线网站| 亚洲最大成人网色| 久久久久欧美精品| 国产一二三四区| 亚洲视频电影图片偷拍一区| 国产精品亚洲综合在线观看| 国产肥臀一区二区福利视频| 国产精品毛片久久久久久久| 狠狠躁日日躁夜夜躁av| 国产精品欧美久久久| 99热免费精品| 精品国产乱码久久久久久鸭王1| 亚洲精品在线视频| 亚洲日本va午夜在线电影| 手机看片福利盒子久久| 亚洲影视在线播放|