




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 本系列教程将结合TI推出的CC254xSoC系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第五部分:第五部分知识点:第二一节DHT11温湿度传感器第二十二节蓝牙协议栈之从机通讯第二十三节蓝牙协议栈主从一体之主机通讯第二十四节0AD空中升级第二十五节SBL串口升级有关TI的CC254x芯片介绍,可点击下面链接查看:主流蓝牙BLE控制芯片详解(1):TICC2540同系列资料推荐:由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)由浅入
2、深,蓝牙4.0/BLE协议栈开发攻略大全(4)有关本文的工具下载,大家可以到以下这个地址:朱兆祺ForARM第二一节DHT11温湿度传感器DHT11简介DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些
3、校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。技术参数供电电压:3.35.5VDC输出:单总线数字信号测量范围:湿度20-90%RH,温度050C测量精度:湿度+-5%RH,温度+-2C分辨率:湿度1%RH,温度1C互换性:可完全互换,长期稳定性:1%RH/年DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11的数据格式为:8bit
4、湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。其中校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。例如,某次从DHT11读到的数据如图所示:小数byte4byte3OOLOliOI0000000001001整数小数小数byte4byte3OOLOliOI0000000001001整数小数湿度温度bvte200011100byte100000000协议栈DHT11测试打开DHTllExample工程,我们在启动事件中对DHT11进行初始化。如果初始化失败则说明没有接传感器。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关闭刷新波特率115200数.据位8CQM18关闭刷新波特率115200数.据位87停止位1奥验Nonertenp;2習0UJillTTli:前QS1UIQ3tenpS1UIQ1tenp回发送数据超级缰端蛮塗助手娈童跟匪二维團橡-HA-HA进制格式战定时岌送单位zoc从其中可以看到当前的温度为29摄氏
8、度,湿度为30%,往传感器器哈一口气可以看到温湿度都上升了。刷新关闭CTlM&erialGenius!侮止位H2None菠特率115200埶拥位刷新关闭CTlM&erialGenius!侮止位H2None菠特率115200埶拥位8v应披收数拥叵岌底數湄超级鷗变里助手娈重跟跨二维圉像tiunsi;35.0Atemp:31.0Cyiunti;33.0temp:31.0Cyiumi;33.0temp:31.0Chunhi;33.0上PTTF:!吕1门rhumij38.网*豁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看空保存殲揺集收埶摒:645!+志遊制显示+六逆制格武定时左谍单femsl00第二十二节蓝牙协议栈之从机通讯之前都是外围模块的驱动程序,这一节开始,我们进入蓝牙4.0协议栈的核心部分,从机通讯的程序设计。接下来的章节是蓝牙4.0协议栈最为核心的程序设计部分。前面的大都是外围器件的实验,这节我们介绍蓝牙通讯中从机的角色,从机的主要工作是对外广播,接受主机的连接,并且接受主机发送过来的数据。这里介绍两
10、个函数:bStatus_tGAPRole_SetParameter(uint16param,uint8len,void*pValue);这个函数主要是用来配置从机的一些参数,第一个参数表示需要配置哪个参数,例如我们需要时能从机广播,则需要这样调用:uint8initial_advertising_enable=TRUE;GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8),&initial_advertising_enable);第二个函数是特征值改变时的回调函数,当主机给从机发送数据时,从机就会回调这个函数来告知应用层有数据送达。
11、staticvoidsimpleProfileChangeCB(uint8paramID);在低功耗蓝牙中,数据的传输是通过特征值的读写来实现的。BLE协议栈的GATT层用于应用程序在两个连接设备之间的数据通信的。从GATT层的角度看,当设备连接后,将充当一下两种角色中的一个:GATTClient从GATT服务器读/写数据的设备。GATTServer包含客户端需要读/写的数据的设备。重要的是要注意,GATTClient和Server的角色完全独立于BLE的链路层的slave和master的角色,或GAP层peripheral和central的角色。一个slave可以是GATTClient或GA
12、TTServer,一个master同样可以是GATTClient或GATTServer。一个GATTServer可以有多个完成一个特定的功能或特性GATTServer组成。在SimpleBLEPeripheral应用程序中有三个GATT服务:MandatoryGAPService:这个服务包含设备和访问信息,比如设备名称、供应商和产品标识。MandatoryGATTService:这个服务包含有关服务UUID相关信息。SimpleGATTProfileService这个服务是一个示例配置文件,供测试和演示。Profile简介为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规
13、范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者应用层协议。Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范,你可根据所需要的产品实现需要的Profile,不必给开发带来更大的开销。这就是说当需要利用蓝牙提供数据传输功能时就必须建立对应的Profile,TI的BLE协议栈为我们提供了部分Profile,其中一部分是非标准的Profile。其中非标准的有SimpleGATTProfile和SimpleKeysProfile,我们将通过对这两个Profile的介绍及实验来了解
14、Profile的特性和使用。每个Profile初始化其响应的服务和内部寄存器。GATT服务器将整个服务加到属性表中,并为每个属性分配唯一的句柄。GATTProfile用于存储和处理GATT服务器中的数据。在下面的实验中需要用到的都是我们自己新建的Profile,即非标准的Profile。其中主要要注意Profile、UUID、handle、CharacteristicValues。SimpleGATTProfile及Btool的使用SimpleGATTProfile中包含5个特征值,每一个的属性都不同:SimpleGATTProfile特征值属性:长度(byte)|属性心CHARIp1屮可读可
15、写口CHAR21Q只读卓CHAR3p1e只写屮CHAR4存1护不能直接读写,通过通知发送申xCHAR5工5卩只读(加密时)屮么Btool是PC端工具,使用特定的HCI命令与CC2540通信,PC端需要通过串口或USB连接CC2540,CC2540使用HostTestRelease工程,硬件可以使用USBDongle(对应CC2540USB)或我们提供的USBDongle。USBDongle连接从机使用馒头科技有限公司的USBDongle,烧写HostTestRelease固件,连接电脑后就可以用Btool软件来连接从机设备。将从机工程编译下载到开发板,连接串口到PC端,我们通过串口来观察设备的
16、运行,运行后可以看到设备处于广播。串口刷新设备在广播意爪叵瞎岌送淸空欢迎康用S吕i创G总门ium0接收數据回发串口刷新设备在广播意爪叵瞎岌送淸空欢迎康用S吕i创G总门ium0接收數据回发送数据超级终端变臺助手变重跟晾二维图像Copyright(c) HYPERLINK http:/www.esmo-nnirX www.esmo-nnirX.SrialGniuV1.2L1-愎一定餵上的耳匚助手淸空保存数据務收数嚣:10+盍进制显示+六进制格式口发送新行.迭择1定时发送单位吋)网ELEPeripieial匚OMIDv戒特率数攔立停止位ilone115200这是我们插入USBDongle到电脑,可以
17、看到识别到一个串口插入,如图,这就是USBDongle用CDC的方式实现的串口。打开Btool,按左图配置,可以看到右图的信息,这是说明Btool已经识别到了USBDongle。DeviceE-CCMl-PortIitroTort:EGMigSauirate:115200flowCqiltrol;Kont;DataBits:0Parity:lions-StopBits:One1訓Info:Handle;OmFFFEJDkddr:E0:C7:9B:e4:A:2BBtool的界面可以分为4个区:设备信息展示历史记录设备控制连接信息确保周围存在设备可发现,点击Discover/Connect标签的s
18、can按钮,CC2540就会进行10s的扫描过程,在这期间可通过Cancle按钮停止扫描。DiscoverJCcnriedffesd/|ParingZBcndrfg|Adv.CornmancIsDiscoverysActiveScanL.iliVTiiteUstConnectionSettingMede:DeviesFound:LinkControlMinConnectionInten/alMaxConnectionIntervalG-32DDji:SlaveLatencyAddrType:kDDPublic)SlaveElDA:?2:-:SD:3F:62:97Establish匚onnedi
19、cinEstablishKMES3HEI333ESupervisionTimeout(14220卅:可以看到,我们周边有两个设备,其中一个就是我们的开发板,根据串口输出的信息我们知道我们设备的地址是0X7C669D9F6297,下面我们点击establish来连接我们的开发板。Discover,rConnectReadJWritePairing/EkmdingAcw.CommandsConnectonSettings连接后可以看到两边都同时显示了连接信息。开发板输出连接:串口COM10刷新关诃200清空棵存数据发送清空接收埶据:1母I-十六进制显示ELEF亡工ipherslTexasInstr
20、uirencsOpenUartOHelloMT254xBoard0X7C669D9F6237InitializedAdvertisingConnected+六进制格式发送新行定时岌送fernsCopyrightc,wiww.eamonni,.SerialGeniusV1-r2b?-你一定会爰上迪亭匚助手波特率115200停止位None迎康用SmrilG&niu5!Btool连接的设备信息:特征值的读写接下来我们用Btool对SimpleProfile进行使用操作。刚刚我们已经列出了SimpleProfile中的各个特征值。使用UUID读取特征值,CHAR1具有读写属性,这里对SimplePro
21、file的第一特征值CHAR1进行读取操作,UUID为0 xfff1。选择Read/Write选项页并选择ReadUsingCharacteristicUUID功能,在CharacteristicUUID选项填入f1:ff(高字节在前),点击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验油出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设备的串口输出中可以看到设备提示CHAR1的值变为了10。串口COM10刷新1152006悟止傥关诃+六逬制格式发该新行选择定时发送(单谊間200岌送清空SerialGeniBL-EFeriph.亡匸ai:LTexisIns串口COM10刷新1152006悟止傥关诃+六逬制格式发该新行选择定时发送(单谊間200岌送清空SerialGeniBL-EFe
27、riph.亡匸ai:LTexisInstrumentsOp-en.LTartOHelloMT254x3oaird0 x7匚669D9F6297Ini匸Im/LiE已dAjivertiBing-Zhar1:10ICopyright)www.eamonr,.-_j回接收勘据超级终端妾里蜀手匚I变量踉腔二维圏橡濺特率埶据傥NoneSerialGeniusVI,2bl-你一金旁卜学再匚甘丰淸空.|接收数摇:131口十六进制显示保存埶据下面来验证我们是否成功的将CHAR1改为了10,按照刚刚读取CHAR1的步骤,重新读取CHAR1的值。CHAR1的值改为了10:第二十二节蓝牙协议栈之从机通讯(下)#e#
28、蓝牙点灯上面我们已经能够成功的改写一个特征值,那我们是不是可以通过发送特定的值来控制一个灯的亮灭呢?答案是肯定的。下面我们来实现这个功能。从机工程已经有5个特征值了,我们现在增加一个特征值来控制灯的亮灭。那我们该如何来添加特征值呢?特征值的管理是在profile中实现的。所以我们需要对profile进行修改。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-国OutputalBroadcaster(1)修改simpleGATTProfile.h在simpleGATTProfile.h中可以看到现在定义的5个特征值的标示符和UUID,我们添加一个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,这个文件需要修改的地方较多,下面我们步一步来修改。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号.園E炉田脅3嗣谓期上必i1Ez*7*1*+*韦屯卒寄花书當辛帝冲=+彳密片芳屯卒116117IoSIMnEPROriLELED/Characteristic6UUID:OxFFFGCONSTuirttSsimpleProfilecfiar&UI.II&MT_BT_.LILJID_SIZEl国也召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匹石阳靱HLEDE點弗剧色-IARErvibedd-dWdkbwihIDEEirnulaiorToolsVJindDwHelpmhhiieGATTpn/l
35、ile.c金TtjfeGATrptDfie比staticgattAttributetsimpleProf11eAttrTblSERVAPP_1UM_ATT/Char-crcteristic6IZatwestaticuintSsimpleProfi1eChar6=1S3/SififpteProfiteC/jcrracteristic5t/serDescrOptionstaticuint8simpLieCihr5User0esp(1?=Chracterist19*卞ProfileXlttnttutes-TabteVyww世*H出*实XW*YSZ.eProfiIeOiaracteristi匚6Ue酊
36、DescriptionstaticuintB5LinpleProfLleCJiar6UserDesp17工Charcterist.:#lfSIMPLEPROFIL_LED/5tPtplProfiIeC/icrracteristic6Propertie-sstaticuintSsimplePrqfi1eCfirProps=GATTPK0i_KEAD|CATb总和总嚳飞PiigJVvdjfFil醉曰刊酒關仙勵則砲鼎-9LJAPP-ffl呷怕凯足,“知专3itYiplpBLEPi&f:pS3ir7iplf?6lEAffi:phJ0对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国Bgaluuid.匚BgansEwapph-g21AFPt3OSAL_SifflpreBLr.-asimpleBLEFienpti;訂sirnplaBLEPeriphY对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!也訓吕曲口1占E&rTdidliMi1irtrfflwHelp口.喊00|勒隘直MMlw歹石电眇爭阚忌B昙K鼻也色PeripierallEDEnaMple-iHREmfettididW/rkbchIDESIHPLEPKOFILELEDZ/charoctristiG&。空如砒5/Charge;tit;闪(口号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)属性设置操作-5JAPPTB巧OSAJ_SirapleBl.-SaimpleSLEPenph总gimpleSLEPeiiphMs0SiflhcBLE
41、.fCcKnriirin|HOlndeideJ0_jTangel-02INCUDEI-BJLIBMr!口h吞危ILjED吐日個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号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);现ee-ndifret=iNVA
45、LlOkARAMtTER;break;return(net);现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翊沖詐勢NPL阳脱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勢一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、完成后,我们将这个宏打开,配置工程。接着我们在staticvoidsimpleProfileChangeCB(uint8paramID)函数的switch中加入CHAR6的判断即可。K73default;83ti卜归816bredkftendif17tstrifis:nRU*EnKd#:3Tl-.K73default;83ti卜归816bredkftendif17tstrifis:nRU*EnKd#:3Tl-.|nifeiA“irnfebIsnririlgBTAwOijptftwfchgd_H*u血*1肿EriplwriIhdjrijihdjwkt需di万孑鼠匸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中对FFF6的UUID进行读写操作即可实现对LED的控制。第二十三节蓝牙协议栈之主机通讯随着蓝牙4.0模块的大量使用,为了很多从未接触过蓝牙的工程师也能快速便捷地开发蓝牙项目或者使用蓝牙,主从一体、远控10等等特性也成为蓝牙模块必备的条件。其实,联合第二十一节和本节(第二十二节),我们就能将
51、一个本无固件的裸片蓝牙,使其开发为具备主从一体功能的蓝牙模块。这两节的内容,也是本连载篇的重点部分之一。上一节我们对从机的工作流程有了一个整体的把握。我们现在接着来看主机的工作流程。主机的工作主要是扫描设备,对发现的设备发起连接,然后就是对特征值的读写操作了。手动连接从机的对外广播是在初始化的时候完成的,那主机的扫描是在哪里开始的呢?阅读源码可以发现主机的操作都在按键处理中完成的。主机通过五向按键中的五个按键实现不同的功能。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&/如果连接并且发现Handle进行读写操作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)/显示扫描到的设备/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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年餐饮行业未签订劳动合同现象普遍
- 2024年包装材料加工机械资金筹措计划书代可行性研究报告
- 茶馆服务流程优化考核试卷
- 自动化测试工具使用试题及答案
- 数字版权运营服务补充协议
- 珠宝首饰定制设计与售后服务合同
- 影视制作基地电力需求预测及备用电源储备合同
- 股权质押融资业务合规审查合同
- 草原牧场放牧经营权流转及生态补偿合同
- 电商企业客服知识库建设与智能问答系统合同
- GB/T 30819-2024机器人用谐波齿轮减速器
- 韩国留学详细介绍课件
- (完整word版)项目进度控制流程图
- 液化气站2022年应急预案演练计划
- 电缆井工程及电缆钢管敷设施工方案
- 窄线宽光纤激光器研究俞本立
- 我的家乡湄潭课件
- 人教版六年级下册数学第五、六单元测试题及答案
- 试模自校规程
- 组织人事业务知识测试二
- 浙江省温州市2022年初中科学中考试题及参考答案
评论
0/150
提交评论