由淺入深,藍(lán)牙4.0BLE協(xié)議棧開發(fā)攻略大全_第1頁(yè)
由淺入深,藍(lán)牙4.0BLE協(xié)議棧開發(fā)攻略大全_第2頁(yè)
由淺入深,藍(lán)牙4.0BLE協(xié)議棧開發(fā)攻略大全_第3頁(yè)
由淺入深,藍(lán)牙4.0BLE協(xié)議棧開發(fā)攻略大全_第4頁(yè)
由淺入深,藍(lán)牙4.0BLE協(xié)議棧開發(fā)攻略大全_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 本系列教程將結(jié)合TI推出的CC254xSoC系列,講解從環(huán)境的搭建到藍(lán)牙4.0協(xié)議棧的開發(fā)來深入學(xué)習(xí)藍(lán)牙4.0的開發(fā)過程。教程共分為六部分,本文為第五部分:第五部分知識(shí)點(diǎn):第二一節(jié)DHT11溫濕度傳感器第二十二節(jié)藍(lán)牙協(xié)議棧之從機(jī)通訊第二十三節(jié)藍(lán)牙協(xié)議棧主從一體之主機(jī)通訊第二十四節(jié)0AD空中升級(jí)第二十五節(jié)SBL串口升級(jí)有關(guān)TI的CC254x芯片介紹,可點(diǎn)擊下面鏈接查看:主流藍(lán)牙BLE控制芯片詳解(1):TICC2540同系列資料推薦:由淺入深,藍(lán)牙4.0/BLE協(xié)議棧開發(fā)攻略大全(1)由淺入深,藍(lán)牙4.0/BLE協(xié)議棧開發(fā)攻略大全(2)由淺入深,藍(lán)牙4.0/BLE協(xié)議棧開發(fā)攻略大全(3)由淺入

2、深,藍(lán)牙4.0/BLE協(xié)議棧開發(fā)攻略大全(4)有關(guān)本文的工具下載,大家可以到以下這個(gè)地址:朱兆祺ForARM第二一節(jié)DHT11溫濕度傳感器DHT11簡(jiǎn)介DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測(cè)型號(hào)的處理過程中要調(diào)用這些

3、校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,使其成為給類應(yīng)用甚至最為苛刻的應(yīng)用場(chǎng)合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。技術(shù)參數(shù)供電電壓:3.35.5VDC輸出:?jiǎn)慰偩€數(shù)字信號(hào)測(cè)量范圍:濕度20-90%RH,溫度050C測(cè)量精度:濕度+-5%RH,溫度+-2C分辨率:濕度1%RH,溫度1C互換性:可完全互換,長(zhǎng)期穩(wěn)定性:1%RH/年DHT11數(shù)字濕溫度傳感器采用單總線數(shù)據(jù)格式。即,單個(gè)數(shù)據(jù)引腳端口完成輸入輸出雙向傳輸。其數(shù)據(jù)包由5Byte(40Bit)組成。數(shù)據(jù)分小數(shù)部分和整數(shù)部分,一次完整的數(shù)據(jù)傳輸為40bit,高位先出。DHT11的數(shù)據(jù)格式為:8bit

4、濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗(yàn)和。其中校驗(yàn)和數(shù)據(jù)為前四個(gè)字節(jié)相加。傳感器數(shù)據(jù)輸出的是未編碼的二進(jìn)制數(shù)據(jù)。數(shù)據(jù)(濕度、溫度、整數(shù)、小數(shù))之間應(yīng)該分開處理。例如,某次從DHT11讀到的數(shù)據(jù)如圖所示:小數(shù)byte4byte3OOLOliOI0000000001001整數(shù)小數(shù)小數(shù)byte4byte3OOLOliOI0000000001001整數(shù)小數(shù)濕度溫度bvte200011100byte100000000協(xié)議棧DHT11測(cè)試打開DHTllExample工程,我們?cè)趩?dòng)事件中對(duì)DHT11進(jìn)行初始化。如果初始化失敗則說明沒有接傳感器。4704

5、7147247g9474475,if(events&SBP_START_DEVICE_EVT)/串口初始趾47047147247g9474475,if(events&SBP_START_DEVICE_EVT)/串口初始趾477478SeriaIPrintf(DHT11notfindrn);VOIDGAPRaleStartDeviceC&simpleBLEPeripheralPeripheralCBj丑1Injt():if(FALSE二DHTll_Init()/DHTU初始牝479480旳gsee50150?503;504if&SeP_PEKJQDIC_EVT)/Restarttimerif(S

6、&PPERIODIC_EVTPERIOD)隅479480旳gsee50150?503;504if&SeP_PEKJQDIC_EVT)/Restarttimerif(S&PPERIODIC_EVTPERIOD)隅5075085095105115125婦sTT515516517518osal_start_tireierEx(simpleBLEPeripheral_T3skIDJS0PPEFCIODICEVTj*:nulntlfehuini=O;if(TR.UE=DHT1l_Read_Data.(Stempj8humi)SerialPrintf(temp:%d.%dCrnteinp8,tempASe

7、rialPrintfChumi:Sd.Sfdrrhuitii8jliumiftax-F-f)jr/PerfortfiperiodicappLictrtiontaskperformPeriodicTaskO;return(events*S8PPERIODIC_EVT)SBP_PERIODICQM18關(guān)閉刷新波特率115200數(shù).據(jù)位8CQM18關(guān)閉刷新波特率115200數(shù).據(jù)位87停止位1奧驗(yàn)Nonertenp;2習(xí)0UJillTTli:前QS1UIQ3tenpS1UIQ1tenp回發(fā)送數(shù)據(jù)超級(jí)韁端蠻塗助手孌童跟匪二維團(tuán)橡-HA-HA進(jìn)制格式戰(zhàn)定時(shí)岌送單位zoc從其中可以看到當(dāng)前的溫度為29攝氏

8、度,濕度為30%,往傳感器器哈一口氣可以看到溫濕度都上升了。刷新關(guān)閉CTlM&erialGenius!侮止位H2None菠特率115200埶擁位刷新關(guān)閉CTlM&erialGenius!侮止位H2None菠特率115200埶擁位8v應(yīng)披收數(shù)擁叵岌底數(shù)湄超級(jí)鷗變里助手孌重跟跨二維圉像tiunsi;35.0Atemp:31.0Cyiunti;33.0temp:31.0Cyiumi;33.0temp:31.0Chunhi;33.0上PTTF:!呂1門rhumij38.網(wǎng)*豁Q匚1humij37.temp:31.0Chuni-3&.0temp:31.0ChurKi:3.0七emp:31.0ChurKi

9、:3.0七emp:31.0Chunti:35.0temp:31.0Chunti:35.0temp:31.0Cyiursij呂50temp:呂工0Cyiursij呂吐0匸亡mp:0Chunt!;3.0V看空保存殲揺集收?qǐng)宿穑?45!+志遊制顯示+六逆制格武定時(shí)左諜單femsl00第二十二節(jié)藍(lán)牙協(xié)議棧之從機(jī)通訊之前都是外圍模塊的驅(qū)動(dòng)程序,這一節(jié)開始,我們進(jìn)入藍(lán)牙4.0協(xié)議棧的核心部分,從機(jī)通訊的程序設(shè)計(jì)。接下來的章節(jié)是藍(lán)牙4.0協(xié)議棧最為核心的程序設(shè)計(jì)部分。前面的大都是外圍器件的實(shí)驗(yàn),這節(jié)我們介紹藍(lán)牙通訊中從機(jī)的角色,從機(jī)的主要工作是對(duì)外廣播,接受主機(jī)的連接,并且接受主機(jī)發(fā)送過來的數(shù)據(jù)。這里介紹兩

10、個(gè)函數(shù):bStatus_tGAPRole_SetParameter(uint16param,uint8len,void*pValue);這個(gè)函數(shù)主要是用來配置從機(jī)的一些參數(shù),第一個(gè)參數(shù)表示需要配置哪個(gè)參數(shù),例如我們需要時(shí)能從機(jī)廣播,則需要這樣調(diào)用:uint8initial_advertising_enable=TRUE;GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8),&initial_advertising_enable);第二個(gè)函數(shù)是特征值改變時(shí)的回調(diào)函數(shù),當(dāng)主機(jī)給從機(jī)發(fā)送數(shù)據(jù)時(shí),從機(jī)就會(huì)回調(diào)這個(gè)函數(shù)來告知應(yīng)用層有數(shù)據(jù)送達(dá)。

11、staticvoidsimpleProfileChangeCB(uint8paramID);在低功耗藍(lán)牙中,數(shù)據(jù)的傳輸是通過特征值的讀寫來實(shí)現(xiàn)的。BLE協(xié)議棧的GATT層用于應(yīng)用程序在兩個(gè)連接設(shè)備之間的數(shù)據(jù)通信的。從GATT層的角度看,當(dāng)設(shè)備連接后,將充當(dāng)一下兩種角色中的一個(gè):GATTClient從GATT服務(wù)器讀/寫數(shù)據(jù)的設(shè)備。GATTServer包含客戶端需要讀/寫的數(shù)據(jù)的設(shè)備。重要的是要注意,GATTClient和Server的角色完全獨(dú)立于BLE的鏈路層的slave和master的角色,或GAP層peripheral和central的角色。一個(gè)slave可以是GATTClient或GA

12、TTServer,一個(gè)master同樣可以是GATTClient或GATTServer。一個(gè)GATTServer可以有多個(gè)完成一個(gè)特定的功能或特性GATTServer組成。在SimpleBLEPeripheral應(yīng)用程序中有三個(gè)GATT服務(wù):MandatoryGAPService:這個(gè)服務(wù)包含設(shè)備和訪問信息,比如設(shè)備名稱、供應(yīng)商和產(chǎn)品標(biāo)識(shí)。MandatoryGATTService:這個(gè)服務(wù)包含有關(guān)服務(wù)UUID相關(guān)信息。SimpleGATTProfileService這個(gè)服務(wù)是一個(gè)示例配置文件,供測(cè)試和演示。Profile簡(jiǎn)介為了更容易的保持Bluetooth設(shè)備之間的兼容,Bluetooth規(guī)

13、范中定義了Profile。Profile定義了設(shè)備如何實(shí)現(xiàn)一種連接或者應(yīng)用,你可以把Profile理解為連接層或者應(yīng)用層協(xié)議。Bluetooth的一個(gè)很重要特性,就是所有的Bluetooth產(chǎn)品都無(wú)須實(shí)現(xiàn)全部的Bluetooth規(guī)范,你可根據(jù)所需要的產(chǎn)品實(shí)現(xiàn)需要的Profile,不必給開發(fā)帶來更大的開銷。這就是說當(dāng)需要利用藍(lán)牙提供數(shù)據(jù)傳輸功能時(shí)就必須建立對(duì)應(yīng)的Profile,TI的BLE協(xié)議棧為我們提供了部分Profile,其中一部分是非標(biāo)準(zhǔn)的Profile。其中非標(biāo)準(zhǔn)的有SimpleGATTProfile和SimpleKeysProfile,我們將通過對(duì)這兩個(gè)Profile的介紹及實(shí)驗(yàn)來了解

14、Profile的特性和使用。每個(gè)Profile初始化其響應(yīng)的服務(wù)和內(nèi)部寄存器。GATT服務(wù)器將整個(gè)服務(wù)加到屬性表中,并為每個(gè)屬性分配唯一的句柄。GATTProfile用于存儲(chǔ)和處理GATT服務(wù)器中的數(shù)據(jù)。在下面的實(shí)驗(yàn)中需要用到的都是我們自己新建的Profile,即非標(biāo)準(zhǔn)的Profile。其中主要要注意Profile、UUID、handle、CharacteristicValues。SimpleGATTProfile及Btool的使用SimpleGATTProfile中包含5個(gè)特征值,每一個(gè)的屬性都不同:SimpleGATTProfile特征值屬性:長(zhǎng)度(byte)|屬性心CHARIp1屮可讀可

15、寫口CHAR21Q只讀卓CHAR3p1e只寫屮CHAR4存1護(hù)不能直接讀寫,通過通知發(fā)送申xCHAR5工5卩只讀(加密時(shí))屮么Btool是PC端工具,使用特定的HCI命令與CC2540通信,PC端需要通過串口或USB連接CC2540,CC2540使用HostTestRelease工程,硬件可以使用USBDongle(對(duì)應(yīng)CC2540USB)或我們提供的USBDongle。USBDongle連接從機(jī)使用饅頭科技有限公司的USBDongle,燒寫HostTestRelease固件,連接電腦后就可以用Btool軟件來連接從機(jī)設(shè)備。將從機(jī)工程編譯下載到開發(fā)板,連接串口到PC端,我們通過串口來觀察設(shè)備的

16、運(yùn)行,運(yùn)行后可以看到設(shè)備處于廣播。串口刷新設(shè)備在廣播意爪叵瞎岌送淸空歡迎康用S呂i創(chuàng)G總門ium0接收數(shù)據(jù)回發(fā)串口刷新設(shè)備在廣播意爪叵瞎岌送淸空歡迎康用S呂i創(chuàng)G總門ium0接收數(shù)據(jù)回發(fā)送數(shù)據(jù)超級(jí)終端變臺(tái)助手變重跟晾二維圖像Copyright(c) HYPERLINK http:/www.esmo-nnirX www.esmo-nnirX.SrialGniuV1.2L1-愎一定餵上的耳匚助手淸空保存數(shù)據(jù)務(wù)收數(shù)囂:10+盍進(jìn)制顯示+六進(jìn)制格式口發(fā)送新行.迭擇1定時(shí)發(fā)送單位吋)網(wǎng)ELEPeripieial匚OMIDv戒特率數(shù)攔立停止位ilone115200這是我們插入U(xiǎn)SBDongle到電腦,可以

17、看到識(shí)別到一個(gè)串口插入,如圖,這就是USBDongle用CDC的方式實(shí)現(xiàn)的串口。打開Btool,按左圖配置,可以看到右圖的信息,這是說明Btool已經(jīng)識(shí)別到了USBDongle。DeviceE-CCMl-PortIitroTort:EGMigSauirate:115200flowCqiltrol;Kont;DataBits:0Parity:lions-StopBits:One1訓(xùn)Info:Handle;OmFFFEJDkddr:E0:C7:9B:e4:A:2BBtool的界面可以分為4個(gè)區(qū):設(shè)備信息展示歷史記錄設(shè)備控制連接信息確保周圍存在設(shè)備可發(fā)現(xiàn),點(diǎn)擊Discover/Connect標(biāo)簽的s

18、can按鈕,CC2540就會(huì)進(jìn)行10s的掃描過程,在這期間可通過Cancle按鈕停止掃描。DiscoverJCcnriedffesd/|ParingZBcndrfg|Adv.CornmancIsDiscoverysActiveScanL.iliVTiiteUstConnectionSettingMede:DeviesFound:LinkControlMinConnectionInten/alMaxConnectionIntervalG-32DDji:SlaveLatencyAddrType:kDDPublic)SlaveElDA:?2:-:SD:3F:62:97Establish匚onnedi

19、cinEstablishKMES3HEI333ESupervisionTimeout(14220卅:可以看到,我們周邊有兩個(gè)設(shè)備,其中一個(gè)就是我們的開發(fā)板,根據(jù)串口輸出的信息我們知道我們?cè)O(shè)備的地址是0X7C669D9F6297,下面我們點(diǎn)擊establish來連接我們的開發(fā)板。Discover,rConnectReadJWritePairing/EkmdingAcw.CommandsConnectonSettings連接后可以看到兩邊都同時(shí)顯示了連接信息。開發(fā)板輸出連接:串口COM10刷新關(guān)訶200清空棵存數(shù)據(jù)發(fā)送清空接收?qǐng)藫?jù):1母I-十六進(jìn)制顯示ELEF亡工ipherslTexasInstr

20、uirencsOpenUartOHelloMT254xBoard0X7C669D9F6237InitializedAdvertisingConnected+六進(jìn)制格式發(fā)送新行定時(shí)岌送fernsCopyrightc,wiww.eamonni,.SerialGeniusV1-r2b?-你一定會(huì)爰上迪亭匚助手波特率115200停止位None迎康用SmrilG&niu5!Btool連接的設(shè)備信息:特征值的讀寫接下來我們用Btool對(duì)SimpleProfile進(jìn)行使用操作。剛剛我們已經(jīng)列出了SimpleProfile中的各個(gè)特征值。使用UUID讀取特征值,CHAR1具有讀寫屬性,這里對(duì)SimplePro

21、file的第一特征值CHAR1進(jìn)行讀取操作,UUID為0 xfff1。選擇Read/Write選項(xiàng)頁(yè)并選擇ReadUsingCharacteristicUUID功能,在CharacteristicUUID選項(xiàng)填入f1:ff(高字節(jié)在前),點(diǎn)擊Read按鈕。讀取特征值成功:CharaetefigtieReadL.nerctensLcivclL-eHar.iTSSLibPtooeditfeReadUsingChsnscterislK:UUJDC0M1&gh-(36.i-Type:Bc&4(Event)Evemcode:DtFF(HCl_LE_,&SEvntDataLengthCharaetefig

22、tieReadL.nerctensLcivclL-eHar.iTSSLibPtooeditfeReadUsingChsnscterislK:UUJDC0M1&gh-(36.i-Type:Bc&4(Event)Evemcode:DtFF(HCl_LE_,&SEvntDataLength:(icfrG向byte羽Event:(kQ5OS(ATT.ReadByTyrieRspStatic.Qc1A(ThePmcsduffilaComplscd)ConnUsndle:(JcMlOO(D)PduLen:DtJO(DOUOumpbc:i04FF06Q9C51AOOMOOpj:=;ac-e5:4a:26.2

23、G-Type-fuentCode-DataLengthfvwitSldtUEConnHandlePduLjejiLengthHandleCatsDurnpRK):04FFOAroC5MOOMa4D325D&0:(kW(Event):&JF歸CI_LE_Exi&/mtJ:(kDA(tO)bjtesis:Ctb韻勺(A7T_RRsi):IjcDD(Success):Cfc&QOO出):(k&4:Off弗.取曲:01Chara-itensd.UU12-ValueOAKIIE琳IILJTSixx:es5QiaracteflsticWrrteValue;_:ASCIIO驗(yàn)油出StatusCh&rt4ri

24、5iioValue-H&ntfeOxMMlI1錮工抿此福眾抄-Type:(k(U(Event)EventCode:(kFFffHCLLE_BaEvent)-DataLength:&c曲(6)bytes(s!fvent:(kD67F(GAP_HCL&denli-DnCwnmaniiStHtiJs)StMm:UcWcSucons)iataLengthObytefe)ConnHandle:ticMOOrOH-andle:(kM25m也iLl軍:0ADumpfrs):0192fD05000025DO0A291:-05;5G:112G3Typ:tktM(Evemj-EventCode:血FF(HUIIE

25、EriEvent)GatmLength:OcO&byt-fe)Event:OcO&TFPGAP_HC_Erf:ertiorCianmandStatus)Status:UcCHfSucces3)OpCo盹.tkFD盤GATTYJnteCha?Valu&,;XataLength:附Dun*ip(ftd;04FF067F06CQ32FD00H301.cftc7-03:B6:12.S45Jjpe:b(M(EventsL色軸卩舊口LE&4E誕呦|-&ataLength:QcKbytesh)1Evenrt:Ck&513譏TTJ/VriteR零卜Statue:tSucc&ss)ConnHandle:&)0仰

26、PduLiftiCkOOtpjDutip(Rk):陰FFW1350500(X)00rCharaderijc咤HantfleCriaracteriEDValueHarafleCharaoterisificUK:在SimpleBLEPeripheral設(shè)備的串口輸出中可以看到設(shè)備提示CHAR1的值變?yōu)榱?0。串口COM10刷新1152006悟止儻關(guān)訶+六逬制格式發(fā)該新行選擇定時(shí)發(fā)送(單誼間200岌送清空SerialGeniBL-EFeriph.亡匸ai:LTexisIns串口COM10刷新1152006悟止儻關(guān)訶+六逬制格式發(fā)該新行選擇定時(shí)發(fā)送(單誼間200岌送清空SerialGeniBL-EFe

27、riph.亡匸ai:LTexisInstrumentsOp-en.LTartOHelloMT254x3oaird0 x7匚669D9F6297Ini匸Im/LiE已dAjivertiBing-Zhar1:10ICopyright)www.eamonr,.-_j回接收勘據(jù)超級(jí)終端妾里蜀手匚I變量踉腔二維圏橡濺特率埶據(jù)儻NoneSerialGeniusVI,2bl-你一金旁卜學(xué)再匚甘豐淸空.|接收數(shù)搖:131口十六進(jìn)制顯示保存埶據(jù)下面來驗(yàn)證我們是否成功的將CHAR1改為了10,按照剛剛讀取CHAR1的步驟,重新讀取CHAR1的值。CHAR1的值改為了10:第二十二節(jié)藍(lán)牙協(xié)議棧之從機(jī)通訊(下)#e#

28、藍(lán)牙點(diǎn)燈上面我們已經(jīng)能夠成功的改寫一個(gè)特征值,那我們是不是可以通過發(fā)送特定的值來控制一個(gè)燈的亮滅呢?答案是肯定的。下面我們來實(shí)現(xiàn)這個(gè)功能。從機(jī)工程已經(jīng)有5個(gè)特征值了,我們現(xiàn)在增加一個(gè)特征值來控制燈的亮滅。那我們?cè)撊绾蝸硖砑犹卣髦的??特征值的管理是在profile中實(shí)現(xiàn)的。所以我們需要對(duì)profile進(jìn)行修改。FilesET,IS日0PeripheralLEDExample-MT25-1xldoard-IDAPP-J!一田3OSAL_SimpleBLEPeripheral.c3inpleBLEPeripheraliZlimpleBLEPeripher&i.h3SimpleBLEPeriphera

29、l_Main.匚.ci-U口HAL+1.Common3口Include-閔arqetINCLUDE田口LIB-3口NPITHOSALPROFILES-S0dewinfoseniice.q13devinfoservice.h3gap.c-Egapbondmgr.匚3gapbondmgr.hClgapgattseA/er.ha0gatt_,uu!d.cQgattsjeryapp.h甌oad.h乂oadjarget.匚::oadjarget.hSBperipheral.cQperipheral.h悶peripheralBroadcaster.c1Brsimplekeys.il5BsimpleGAJ-

30、Tprofile.c一QinipleGATTprofils.hTOOLS1-國(guó)OutputalBroadcaster(1)修改simpleGATTProfile.h在simpleGATTProfile.h中可以看到現(xiàn)在定義的5個(gè)特征值的標(biāo)示符和UUID,我們添加一個(gè)1Byte的特征值來控制燈的亮滅。/PrQfitedefineSIMPLEPROFILE_HAR1defineSIMPLE?ROFlLE_CHA2defineSIMPLEPROFILE_CH3defineSIMPLEPROFILECHAdefineSlMPLEPROFILEHAfi5/SifnpLePrcfiLeServiceUlf

31、IDffdefineSIMPLEPROFILESEfiV_UUIO/KeyPress-ed(A/IDttdefineSIMPLEPROFILE_CHA1_UUIDfrdefinGSIMPLEPROFILE_CHAR2_UUIDdefineMPLEPROHLE:H職匸UUIDdefineSIMPIEPROFTLeZLLPROFILE_LEDitdefxneSIMPLEPR0FILEJHAR6ttdefirreSIMPLEPROFILECHAR6UUID5/RWPreftieChiracterlxFFF6#endifj/Siffipf-eeysPrd/iteSericiityieldsSdefin

32、e5IWPLEPROFILE_SERVICE饑的01接下來我們需要修改simpleGATTProfile.c,這個(gè)文件需要修改的地方較多,下面我們步一步來修改。2)添加UUID1LDUINT16SIMPLEPROFILECIIARSUU:!0),MI_UINT16(Sm京FKJTRAM丄VAfilABLfiS*/LOUENT16(SIMPlEPROFILECHARGUMIO)Hl_UINT16(Smi#endif冋wEditViewProject1nstruments-tmijlat.arToolsWindoirvHtlp/Characteristic5UUIDr&xFFF5CONSTuitS

33、simplePrafilechar&uuiDMBTUUIDSI?E価:-:104;l175#遷詰-?(VI號(hào).園E爐田脅3嗣謂期上必i1Ez*7*1*+*韋屯卒寄花書當(dāng)辛帝沖=+彳密片芳屯卒116117IoSIMnEPROriLELED/Characteristic6UUID:OxFFFGCONSTuirttSsimpleProfilecfiar&UI.II&MT_BT_.LILJID_SIZEl國(guó)也召yJ豐N125fln8Md-QQAPPHaS0SA1_SimpleSLE.HaBsinAplLEPpriph.Qsimp!f01_EPeriph.込jSiropleBLPieriuh.-UrtA

34、L|0-UCdreHnon_!IncludeaiTflrgei口INCLUDE-SDU0-S迂IMPl-QCjas/M口PROHIESS由Tevinlb諂心re上Ha0gapc.agapbcndmtjr.e丄.=i.f上凹umJIaIPeiifhwifLEDEicairipteLn11Col7PerphralLEDE:Hdc3?dWorkbenchIDE3)添加屬性kTT沖薊ZfiltEditProjeilTewafitnstruiHefii匹石陽(yáng)靱HLEDE點(diǎn)弗劇色-IARErvibedd-dWdkbwihIDEEirnulaiorToolsVJindDwHelpmhhiieGATTpn/l

35、ile.c金TtjfeGATrptDfie比staticgattAttributetsimpleProf11eAttrTblSERVAPP_1UM_ATT/Char-crcteristic6IZatwestaticuintSsimpleProfi1eChar6=1S3/SififpteProfiteC/jcrracteristic5t/serDescrOptionstaticuint8simpLieCihr5User0esp(1?=Chracterist19*卞ProfileXlttnttutes-TabteVyww世*H出*實(shí)XW*YSZ.eProfiIeOiaracteristi匚6Ue酊

36、DescriptionstaticuintB5LinpleProfLleCJiar6UserDesp17工Charcterist.:#lfSIMPLEPROFIL_LED/5tPtplProfiIeC/icrracteristic6Propertie-sstaticuintSsimplePrqfi1eCfirProps=GATTPK0i_KEAD|CATb總和總嚳飛PiigJVvdjfFil醉曰刊酒關(guān)仙勵(lì)則砲鼎-9LJAPP-ffl呷怕凱足,“知專3itYiplpBLEPi&f:pS3ir7iplf?6lEAffi:phJ0對(duì)35叱1或日LEPe叩h.-EJHALQl.”亡oEfnon-QlJ

37、IncludesTangeJ-0CJINCUJDE-3-LJUD-二jMPiYSft0!-11JPROFILES巧devqrtl(J5Hivica.c塾鬲蒔.hHdgepcHJ2gapbof*d*ngr.cSgapboridgr.hgoflserver.h-490gan_uuid.匚訂gaUBivapph7沖ad.h4)屬性表-3.3700LS3g卻g擁E&rvflr.h國(guó)Bgaluuid.匚BgansEwapph-g21AFPt3OSAL_SifflpreBLr.-asimpleBLEFienpti;訂sirnplaBLEPeriphY對(duì)SjleBtEFcriph.-gJhj_|FilasQ

38、f$;!MT25臨如7二LPWpJtPeiOberdLcOEt4e:-qf.dh.Q&d_i?e(cml特邨訃E)pa中hr!j;上Apeirpherf!hpiphGrfljBnosidc.penphwz;日noadu”73前siinpleCAliTprQL.)simpleGATTprafiLSSsirnplekays.cfS:IndudeMSCjTjJFgfil-S口LIB-a:.iNPi-SiJOEAL-g.JPROFlLBS0Eldex,mlcFSEwi匚m.u2)dewizlasErYiQe.hT33gcp-c-gejjbortdmgr.cfil色GditViewPidjidlT曲詁生

39、1鬥蛀rtii1!1!也訓(xùn)呂曲口1占E&rTdidliMi1irtrfflwHelp口.喊00|勒隘直MMlw歹石電眇爭(zhēng)闞忌B曇K鼻也色PeripierallEDEnaMple-iHREmfettididW/rkbchIDESIHPLEPKOFILELEDZ/charoctristiG&??杖缗?/Charge;tit;閃(口號(hào)6/GUier佻占f廣ATT-DT-UUIDIZEjsimplePro-Filechar6UIJID,GATTPERMJIHEADGATTPERMITHflITE,&sinipleProfileChartATTBTLlUIDIZEjcharlJscrDescUUID打G

40、Arr_PERII_fttAD,0,simplePro-FileCharGUserD&spJe,simpleProfileCharSLserDespATT_&T_UUID_SIZEftharacterOUID,CATT-PERMIT-READj%impLeProfileChar6Props341342343344;345346沖348349350351352呼35SU3SG357婭3593G23G3I?364365BS63673683G93705)屬性設(shè)置操作-5JAPPTB巧OSAJ_SirapleBl.-SaimpleSLEPenph總gimpleSLEPeiiphMs0SiflhcBLE

41、.fCcKnriirin|HOlndeideJ0_jTangel-02INCUDEI-BJLIBMr!口h吞危ILjED吐日個(gè)Ml冬bodSLJOLItpUlT二1NF1-3;IDSAL-?:JPROFILESB斜deflnf1a-ser-dae.cjdevsMaEprvice.h-0gopbcddrtigrc3gspijQridgr.h訂gdpftttEervsr.h目gafwuid.cSgaflserwapphQad.h-.0込盹叔c,:Qadjflrgeih因(SSiijiH&r&l.t硏p&itphBraJ.hpeirpheraJBrQBidcL.pipharn;ElrDijd匚.Ed

42、BsimpledATTprohl.-一QsimpleCATTpiofjiEJ3sitnpletcys.c1石tiiripletsv5*1,t二T込SRlfrLdltViiwPnoj唱LtTiocailInitruiiYiMlS-ErnulQOr*TijfilfiWitidknHfilp直聲ea乂ddi林心-=孝、玄ca.*骨番劇越轡確jm迓4Peripfte-ialLDEnairrtple-3ARfinfeeddedlA/cnflcbrenhIDEMnipledLlTpTofilbeMifffeflATTprQffc.hbr亡耳k:#endifelseret-blelnva1idRangejs

43、impleProfilethar6-*(uiRtS*)value;536:J#1+538別3541542544號(hào)545546547&48549break;SIMPLEPROriLE_LEDcasfrSIMPLEPHOFILECHARG.if(len=si;eof(uintB)iPftgrfieTALEOExnck;昭理yEEftpL電Pr/i色_尿tPrurafflet&rreturn(ret);555沾4冷565S7巧9aTuTt:ret=INALIDPAFW-IETER;break;32531532533巳534VOIDosalmentcpytsimpleProfileCharS,valu

44、e,SfHPLEelseret=blelnvalidRange;6)屬性獲取操作599i的丄bee599i的丄value)=iimplePrafil&Char4;break;3歸SIMPLEPROFLLE_CHA5!VOIDasal_mei3icpyCvdlu砒simplePirofileChar5jSIMPLEPROFILE.S&597S:S&597caseSIMPLEPROFLLE_CHA-R!*(tutnt8*lvalue)=siEitpleProfileCharb;break;ret=iNVALlOkARAMtTER;break;return(net);現(xiàn)ee-ndifret=iNVA

45、LlOkARAMtTER;break;return(net);現(xiàn)ee-ndif7)屬性讀操作&49break;663664665666667668669&49break;663664665666667668669670671“弘SrMPLEPR0FILE_aiAR5_UUIDl*pLen=51HPLEPR-0FIt.E_CMAfi5_LN;VOIDosal_raieincp-y(pValuepAttr-pValucjSlMPLEfbreak.;default;/ShvLfit/ncvrgethE廠J岸ifdan0feioertOtAuuc?r¬ificttLon72hdV色nothave

46、reacfpermissions/234555GG6661翊沖詐勢(shì)NPL陽(yáng)脫LE傭館斗UtHE:65B口#i.fSIMPLE?MFILELEP659caseSrHPLEPR0FILE_CHAR5囲ID;&的IFs-ndi-f661*pLen=ljTO!uVdlutj1f1Li-zuVnlu-1characteritiscJi-JTciuc/edherecanbesentascaseSIMPLEPROFLLE_CHAR1JUIDnotifyAp卩=SOTLEPROFILEJUARS;rinti-Fu-cn=ThlP-iFfcnrriFfhAftr仝二y黑侔i必血!:加舊iiu】/Writethe

47、vclueif(Status=SUCCESS51勢(shì)一S7#en.9-*jeaseSIMPLEPKOFILE-CHARUUID!easeMlwlHLCKUblLt-LHAH5_UUlU1SlMPLEPROFILELEljcaseSIMPLEPROFILECHAR6UUIDistatusuint8*pCurvalue=(uintS*)pAttr-pValue;*pCurValue=pValu051+pAttr-upvalue=-AslmpleProiileCharl)#endif-/vijchJuLuuLw/flakeureitrsnotabt.aboprif(off&t=0)Profile的改造

48、完成后,我們將這個(gè)宏打開,配置工程。接著我們?cè)趕taticvoidsimpleProfileChangeCB(uint8paramID)函數(shù)的switch中加入CHAR6的判斷即可。K73default;83ti卜歸816bredkftendif17tstrifis:nRU*EnKd#:3Tl-.K73default;83ti卜歸816bredkftendif17tstrifis:nRU*EnKd#:3Tl-.|nifeiA“irnfebIsnririlgBTAwOijptftwfchgd_H*u血*1腫EriplwriIhdjrijihdjwkt需di萬(wàn)孑鼠匸l&5盂-卿L_13br亡戚;S

49、IMPLEPftOFILELEDBit(dtfin&dUALLCD)(HALLCDTRUF)HaLcciWritpSt:r-inValue(,LCIidr6:j.fui.ftt!6)(neWVelire)i伽HAL._LCD_l.INf:_3);trendif/孑金尸m;_CD;&(Mi_l.CD=TW;He1l.ecisSt(HAt_lE_lHi.L_LE0_MO0f_0ff);8KH:;?a2if(nebWjLue&HAL_LEO_2)HmlgdS泌(HM_LEI)打HALLEDHOOFON)*MaIleJSetfHAL_LEO_13MAL_LE&_MOE_OFF)X心4;玄座.yJLJI

50、TfiyCcaseSIWPLFPFtOFZLECHAR.G:5imp1PPrQfi1P3net?r(SIMPlfPRTI-FHARfc,缶訥沁u=);if(neWalns?nflL_LEOi_l)HallarlSetHAt_LEO_1,HAL_LE&_mOE._0N)i編譯燒錄后,按照我們前面說的在Bt。1中對(duì)FFF6的UUID進(jìn)行讀寫操作即可實(shí)現(xiàn)對(duì)LED的控制。第二十三節(jié)藍(lán)牙協(xié)議棧之主機(jī)通訊隨著藍(lán)牙4.0模塊的大量使用,為了很多從未接觸過藍(lán)牙的工程師也能快速便捷地開發(fā)藍(lán)牙項(xiàng)目或者使用藍(lán)牙,主從一體、遠(yuǎn)控10等等特性也成為藍(lán)牙模塊必備的條件。其實(shí),聯(lián)合第二十一節(jié)和本節(jié)(第二十二節(jié)),我們就能將

51、一個(gè)本無(wú)固件的裸片藍(lán)牙,使其開發(fā)為具備主從一體功能的藍(lán)牙模塊。這兩節(jié)的內(nèi)容,也是本連載篇的重點(diǎn)部分之一。上一節(jié)我們對(duì)從機(jī)的工作流程有了一個(gè)整體的把握。我們現(xiàn)在接著來看主機(jī)的工作流程。主機(jī)的工作主要是掃描設(shè)備,對(duì)發(fā)現(xiàn)的設(shè)備發(fā)起連接,然后就是對(duì)特征值的讀寫操作了。手動(dòng)連接從機(jī)的對(duì)外廣播是在初始化的時(shí)候完成的,那主機(jī)的掃描是在哪里開始的呢?閱讀源碼可以發(fā)現(xiàn)主機(jī)的操作都在按鍵處理中完成的。主機(jī)通過五向按鍵中的五個(gè)按鍵實(shí)現(xiàn)不同的功能。staticvoidsimpleBLECentral_HandleKeys(uint8shift,uint8keys)(void)shift;/Intentionallyu

52、nreferencedparameterif(keys&HAL_KEY_UP)/向上/Startorstopdiscoveryif(simpleBLEState!=BLE_STATE_CONNECTED)/如果沒有連接,開始掃描if(!simpleBLEScanning)simpleBLEScanning=TRUE;simpleBLEScanRes=0;LCD_WRITE_STRING(“Discovering.?!?,HAL_LCD_LINE_1);LCD_WRITE_STRING(“”,HAL_LCD_LINE_2);GAPCentralRole_StartDiscovery(DEFAULT

53、_DISCOVERY_MODE,DEFAULT_DISCOVERY_ACTIVE_SCAN,DEFAULT_DISCOVERY_WHITE_LIST);elseGAPCentralRole_CancelDiscovery();elseif(simpleBLEState=BLE_STATE_CONNECTED&/如果連接并且發(fā)現(xiàn)Handle進(jìn)行讀寫操作simpleBLECharHdl!=0&simpleBLEProcedureInProgress=FALSE)uint8status;/Doareadorwriteaslongasnootherreadorwriteisinprogressif(s

54、impleBLEDoWrite)/DoawriteattWriteReq_treq;req.handle=simpleBLECharHdl;req.len=1;req.value0=simpleBLECharVal;req.sig=0;req.cmd=0;status=GATT_WriteCharValue(simpleBLEConnHandle,&req,simpleBLETaskId);else/DoareadattReadReq_treq;req.handle=simpleBLECharHdl;status=GATT_ReadCharValue(simpleBLEConnHandle,&

55、req,simpleBLETaskId);if(status=SUCCESS)simpleBLEProcedureInProgress=TRUE;simpleBLEDoWrite=!simpleBLEDoWrite;if(keys&HAL_KEY_LEFT)/左/Displaydiscoveryresultsif(!simpleBLEScanning&simpleBLEScanRes0)/顯示掃描到的設(shè)備/Incrementindexofcurrentresult(withwraparound)simpleBLEScanIdx+;if(simpleBLEScanIdx=simpleBLESca

56、nRes)simpleBLEScanIdx=0;LCD_WRITE_STRING_VALUE(“Device”,simpleBLEScanIdx+1,10,HAL_LCD_LINE_1);LCD_WRITE_STRING(bdAddr2Str(simpleBLEDevListsimpleBLEScanIdx.addr)HAL_LCD_LINE_2);if(keys&HAL_KEY_RIGHT)/右/Connectionupdateif(simpleBLEState=BLE_STATE_CONNECTED)/如果連接,則更新連接GAPCentralRole_UpdateLink(simpleBL

57、EConnHandle,DEFAULT_UPDATE_MIN_CONN_INTERVAL,DEFAULT_UPDATE_MAX_CONN_INTERVAL,DEFAULT_UPDATE_SLAVE_LATENCY,DEFAULT_UPDATE_CONN_TIMEOUT);if(keys&HAL_KEY_CENTER)/中間鍵uint8addrType;uint8*peerAddr;/Connectordisconnectif(simpleBLEState=BLE_STATE_IDLE)/空閑則連接/ifthereisascanresultif(simpleBLEScanRes0)/connec

58、ttocurrentdeviceinscanresultpeerAddr=simpleBLEDevListsimpleBLEScanIdx.addr;addrType=simpleBLEDevListsimpleBLEScanIdx.addrType;simpleBLEState=BLE_STATE_CONNECTING;GAPCentralRole_EstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,DEFAULT_LINK_WHITE_LIST,addrType,peerAddr);LCD_WRITE_STRING(“Connecting”,HAL_LCD

59、_LINE_1);LCD_WRITE_STRING(bdAddr2Str(peerAddr),HAL_LCD_LINE_2);elseif(simpleBLEState=BLE_STATE_CONNECTING|/連接則斷開連接simpleBLEState=BLE_STATE_CONNECTED)/disconnectsimpleBLEState=BLE_STATE_DISCONNECTING;gStatus=GAPCentralRole_TerminateLink(simpleBLEConnHandle);LCD_WRITE_STRING(“Disconnecting”,HAL_LCD_LI

60、NE_1);if(keys&HAL_KEY_DOWN)/下/StartorcancelRSSIpollingif(simpleBLEState=BLE_STATE_CONNECTED)/連接則讀取RSSi的值if(!simpleBLERssi)simpleBLERssi=TRUE;GAPCentralRole_StartRssi(simpleBLEConnHandle,DEFAULT_RSSI_PERIOD)elsesimpleBLERssi=FALSE;GAPCentralRole_CancelRssi(simpleBLEConnHandle);LCD_WRITE_STRING(“RSSIC

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論