精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

一级特黄aaaaaa大片| 中文字幕在线观看的网站| 国产午夜精品久久久久免费视| 久久成人麻豆午夜电影| 欧美国产日韩一区二区在线观看| 好男人香蕉影院| av有声小说一区二区三区| 成人欧美一区二区三区| 九九99久久| 97国产精品久久久| 国产美女一区| 欧美大胆a视频| 无码一区二区三区在线| 6080亚洲理论片在线观看| 色噜噜偷拍精品综合在线| 国产一级黄色录像片| 精品视频三区| 成人激情文学综合网| 国产精品看片资源| 久久夜靖品2区| 亚洲国产成人精品女人| 亚洲视频在线播放| 日本国产在线视频| 韩国三级大全久久网站| 欧美色欧美亚洲另类二区| 少妇无码av无码专区在线观看| 日本美女高清在线观看免费| 久久久欧美精品sm网站| 国模精品娜娜一二三区| 亚洲精品中文字幕成人片| 精品一区二区在线视频| 国产精品pans私拍| 久久午夜免费视频| 欧美成人一品| 久久夜精品香蕉| 国产精品久久久视频| 亚洲三级网页| 日韩高清不卡av| 一级黄色片毛片| 亚洲性视频在线| 欧美一区二区久久久| 91高清国产视频| 国产成人福利夜色影视| 在线视频一区二区免费| 日韩少妇内射免费播放18禁裸乳| 青青青草视频在线| 亚洲精品福利视频网站| gogogo免费高清日本写真| 欧美激情免费| 国产精品久久久一本精品| 午夜精品一区二区在线观看| 国产尤物视频在线| 国产欧美日韩在线视频| 日韩电影免费观看在| 成人18在线| 国产精品色婷婷| 中文字幕日韩一区二区三区不卡| 在线播放毛片| 国产精品欧美综合在线| 在线观看一区二区三区三州| 欧美日本一道| 亚洲美女视频一区| 国产女主播自拍| 涩涩在线视频| 欧美在线观看视频一区二区三区| 久久久精品三级| 日韩一级特黄| 日韩欧美中文字幕公布| 久久国产劲爆∧v内射| 欧美电影在线观看免费| 亚洲欧美日韩一区二区三区在线| 中文字幕免费看| 久久社区一区| 欧美黄色www| 看片网址国产福利av中文字幕| 男女精品网站| 成人a在线视频| 亚洲欧美高清视频| 2017欧美狠狠色| 天堂社区 天堂综合网 天堂资源最新版| 国产福利片在线| 亚洲精品日韩综合观看成人91| 91麻豆天美传媒在线| 国产在线xxx| 在线免费观看日本一区| 天堂av手机在线| 久久99精品国产自在现线| 亚洲另类欧美自拍| 懂色av粉嫩av蜜臀av一区二区三区| 真实国产乱子伦精品一区二区三区| 97精品国产97久久久久久春色| 久久久久久久久久一级| 丁香天五香天堂综合| 欧美亚洲精品日韩| 91网址在线观看| 日韩欧美aⅴ综合网站发布| 国产一级做a爰片久久| 97久久超碰| 中日韩美女免费视频网站在线观看 | 欧美日韩亚洲一区二区三区在线观看| 91激情在线| 精品美女久久久久久免费| 999精彩视频| 精品国产18久久久久久洗澡| 中文字幕日韩免费视频| 日产精品久久久久久久| 国产乱色国产精品免费视频| 欧美日韩精品综合| 国产亚av手机在线观看| 在线播放一区二区三区| a视频免费观看| 欧美日韩国产精品一区二区亚洲| 国产精品吹潮在线观看| 四虎影视在线播放| 夜夜夜精品看看| 久久午夜夜伦鲁鲁一区二区| 欧美福利在线播放网址导航| 欧美成人亚洲成人| 怡红院成永久免费人全部视频| av动漫一区二区| 日韩中文字幕在线不卡| 精品久久99| 亚洲欧美中文日韩在线v日本| 欧美黄色一区二区三区| 狠狠色2019综合网| 新呦u视频一区二区| 高清毛片在线观看| 日韩欧美不卡一区| 欧美激情图片小说| 九色综合国产一区二区三区| 日本不卡在线观看| 欧美magnet| 亚洲精品一区av在线播放| 国产成人无码精品| 成人免费黄色大片| www.亚洲视频.com| 大型av综合网站| 欧美激情视频在线免费观看 欧美视频免费一 | 免费的av网站| 精品91视频| 国产高清在线一区| 国产三级伦理在线| 精品国产123| 18精品爽视频在线观看| 成人精品视频.| 9色porny| 女同一区二区三区| 欧美性视频在线| 欧美婷婷久久五月精品三区| 欧美日韩色婷婷| 欧美成人午夜精品免费| 国产精品亚洲欧美| 日韩高清国产一区在线观看| 欧美成人app| 中文字幕日韩在线播放| 91激情在线观看| 亚洲美女免费视频| 黑森林av导航| 国产精品一级| 日韩中文不卡| 亚洲网站免费| 色综合男人天堂| 午夜18视频在线观看| 欧美性猛交xxxx免费看漫画| 亚洲最大成人综合网| 久久99精品久久久久婷婷| 精品一区二区三区毛片| 九色丨蝌蚪丨成人| 国产精品久久二区| 自由的xxxx在线视频| 亚洲大胆人体视频| 波多野结衣日韩| 亚洲欧美视频一区| 青青草视频网站| 奇米在线7777在线精品 | 国产一二区在线| 精品国产乱码久久久久久影片| 日本一级片免费看| 国产欧美一区二区精品性色超碰| 一道本在线免费视频| 韩国精品一区二区三区| 欧洲一区二区在线观看| 久久69av| 国产成人精品久久| 肉体视频在线| 夜夜嗨av一区二区三区免费区| 国产美女主播在线观看| 亚洲成人tv网| 色www亚洲国产阿娇yao| 成人免费视频一区| 无码内射中文字幕岛国片| 欧美电影免费观看高清| 精品高清视频| 伊人久久精品| 欧美一级免费视频| 18av在线视频| 最新国产成人av网站网址麻豆| 亚洲黄色在线播放| 欧美日韩亚洲另类| 青青国产在线观看| 一区二区三区在线视频观看58| 新91视频在线观看| 懂色av中文一区二区三区| 国产区二区三区| 国产欧美大片| 日韩成人三级视频| 99精品在线免费在线观看| 蜜桃成人在线| 国产伦精品一区二区三区免费优势| 国产精品美女999| 秋霞伦理一区| 欧美疯狂做受xxxx高潮| 永久免费在线观看视频| 亚洲色图在线观看| 天堂8在线视频| 欧美va在线播放| 91亚洲国产成人久久精品麻豆| 欧美日韩国产色视频| 丰满少妇高潮久久三区| 成人欧美一区二区三区在线播放| 国产熟妇久久777777| jizz一区二区| 性活交片大全免费看| 国产精品一区二区三区99| 国内外成人免费在线视频| 日本特黄久久久高潮| 国产极品尤物在线| 日韩午夜免费| 日韩激情视频一区二区| 欧美伊人影院| 日韩视频在线免费播放| 午夜精品一区二区三区国产| 五月婷婷综合色| 成人三级视频| 亚洲精品日韩精品| 日本一区二区在线看| 午夜精品福利一区二区| 日韩精品欧美| 一本一本久久a久久精品综合妖精| 免费看成人哺乳视频网站| 久久精品久久精品国产大片| 欧美freesex8一10精品| 久久伦理网站| 精品久久综合| 亚洲一区综合| 91精品国产乱码久久久久久久| 中文字幕在线中文字幕日亚韩一区| 视频在线不卡免费观看| 日本黄色a视频| 一区二区中文| 久久99久久99精品| 国产亚洲精品久久久久婷婷瑜伽| 欧美激情 国产精品| 9色精品在线| 无码人妻丰满熟妇区五十路百度| 媚黑女一区二区| 亚洲精品一二三四五区| 激情欧美一区二区| 香蕉久久久久久av成人| proumb性欧美在线观看| 偷拍夫妻性生活| 中文字幕欧美日本乱码一线二线| 女人黄色一级片| 中文字幕视频一区| 毛片a片免费观看| 欧美性色19p| 一本到在线视频| 欧美大片在线观看一区| 四虎在线免费看| 深夜福利一区二区| 欧美aaaaaaa| 欧美一级黄色网| **国产精品| 国产精品加勒比| 国产一区二区欧美| 99热都是精品| 国产欧美一级| 天天干天天色天天干| 成人精品视频网站| 亚洲欧美日韩第一页| 亚洲自拍偷拍av| 中文字幕一区二区三区四区欧美| 在线电影欧美成精品| 午夜视频在线免费播放| 亚洲1区2区3区4区| 日本高清视频免费在线观看| 一区在线播放| 亚洲欧美自偷自拍另类| 成人精品一区二区三区四区| 强伦人妻一区二区三区| 亚洲欧美一区二区三区孕妇| 日本中文字幕在线| 欧美一区二区二区| 黄色软件在线| 午夜精品久久17c| 亚洲伦理网站| 欧美极品视频一区二区三区| 欧美成人一品| 欧美伦理片在线观看| av电影在线观看不卡| 日韩在线一卡二卡| 日韩欧美一区二区三区久久| 国产高清视频免费| 中文字幕精品久久| 国产盗摄——sm在线视频| 91久久久久久久久久| 亚洲图片久久| 日韩在线观看a| 国产在线精品不卡| 熟女少妇内射日韩亚洲| 五月天一区二区| 国产欧美久久久精品免费| 国产午夜精品美女视频明星a级| 91丝袜在线| 亚洲一区久久久| 999国产精品永久免费视频app| 37pao成人国产永久免费视频| 盗摄精品av一区二区三区| 侵犯稚嫩小箩莉h文系列小说| 色88888久久久久久影院野外| 欧美一区二区在线观看视频| 欧美成人精品三级在线观看| 精品自拍视频| 亚洲精品8mav| 久久亚洲色图| 国产精品无码久久久久一区二区| 亚洲线精品一区二区三区八戒| 99久久婷婷国产一区二区三区| 在线成人免费网站| 婷婷综合六月| 欧美动漫一区二区| 国产视频一区欧美| 精品熟女一区二区三区| 亚洲午夜日本在线观看| 亚洲xxx在线| 欧美精品在线播放| 日本一区二区乱| 国产一级片91| 国产乱码精品一区二区三区av| 久久国产波多野结衣| 欧美老人xxxx18| 精品视频在线一区二区| 成人免费淫片aa视频免费| 久久在线视频| 一级片免费在线观看视频| √…a在线天堂一区| 国产乱码精品一区二三区蜜臂 | 欧美另类一区| 欧美一级视频| 久久久久久久久久久久| 欧美这里有精品| 91sp网站在线观看入口| 国产一区二区在线播放| 99免费精品| 野花视频免费在线观看| 亚洲妇熟xx妇色黄| 性xxxx视频| 国产精品igao视频| 66国产精品| xxxxxx黄色| 91久久人澡人人添人人爽欧美| 福利视频在线导航| 成人黄色av网站| 欧美日韩国产成人精品| 艳妇乳肉亭妇荡乳av| 色婷婷激情久久| 麻豆视频免费在线观看| 国产高清在线精品一区二区三区| 妖精视频成人观看www| 欧美18—19性高清hd4k| 欧美老肥妇做.爰bbww| 欧洲一区二区三区| 蜜桃传媒一区二区| 久久99最新地址| 国产污视频在线看| 亚洲色无码播放| 警花av一区二区三区| 国产免费毛卡片| 中文字幕一区二区三区色视频| 亚洲第一成人av| 国产精品久久久| 国产尤物精品| www..com.cn蕾丝视频在线观看免费版 | 91国内精品白嫩初高生| 色欲av无码一区二区人妻| 国产精品毛片无遮挡高清| www.激情五月.com| 热re99久久精品国产66热| 999精品一区| av在线网站观看| 日韩一级大片在线观看| 厕沟全景美女厕沟精品| 激情五月五月婷婷| 久久欧美一区二区| 精品国产999久久久免费| 欧美亚洲国产视频小说| 艳女tv在线观看国产一区| 一级性生活大片| 日韩欧美激情一区| 成人四虎影院|