物聯(lián)網(wǎng)短距離無線通信 課件 07-BLE協(xié)議棧程序分析_第1頁
物聯(lián)網(wǎng)短距離無線通信 課件 07-BLE協(xié)議棧程序分析_第2頁
物聯(lián)網(wǎng)短距離無線通信 課件 07-BLE協(xié)議棧程序分析_第3頁
物聯(lián)網(wǎng)短距離無線通信 課件 07-BLE協(xié)議棧程序分析_第4頁
物聯(lián)網(wǎng)短距離無線通信 課件 07-BLE協(xié)議棧程序分析_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

物聯(lián)網(wǎng)短距離無線通信技術(shù)項(xiàng)目七

BLE協(xié)議棧程序分析1.項(xiàng)目場景2.BLE協(xié)議棧分析目錄CONTENTS3.BLE協(xié)議棧與智云框架4.項(xiàng)目實(shí)踐項(xiàng)目場景項(xiàng)目場景如今大家生活水平日漸提高,對生活環(huán)境也變得在意不少,比如家中溫度、濕度,這些關(guān)乎你生活舒適度、健康。像是Nest恒溫器這類產(chǎn)品在海外市場早已經(jīng)火熱蠻久,同類產(chǎn)品也有不少,但在國內(nèi)市場卻比較少見,下面這款藍(lán)牙濕溫度計(jì)正面單色LCD屏幕,僅可以顯示電量、藍(lán)牙、溫度、濕度。僅僅能顯示數(shù)字自然不夠,用戶可以通過藍(lán)牙與手機(jī)連接進(jìn)行一些智能化配置,該產(chǎn)品可以通過米家藍(lán)牙網(wǎng)關(guān),聯(lián)動其他電器,比如控制空調(diào)、加濕器,以改善室內(nèi)舒適度。16:18

/3任務(wù)目標(biāo)

為了跟上移動設(shè)備的發(fā)展潮流,某公司計(jì)劃要使BLE技術(shù)開發(fā)一個智能溫濕度計(jì),并能夠通過BLE主機(jī)設(shè)備實(shí)現(xiàn)對BLE設(shè)備的參數(shù)設(shè)置。當(dāng)前設(shè)備還在調(diào)試階段,為了測試設(shè)備能夠穩(wěn)定工作,需要對程序執(zhí)行流程進(jìn)行監(jiān)測,以此掌握程序的動態(tài)執(zhí)行過程。。16:18

/4BLE協(xié)議棧分析

BLE協(xié)議棧工程目錄16:18

/5德州儀器公司為了方便開發(fā)人員使用BLE協(xié)議棧實(shí)現(xiàn)代碼的開發(fā)提供了很多的BLE項(xiàng)目案例,其中最為實(shí)用的項(xiàng)目案例是SimpleBLEPeripheral,這個項(xiàng)目涵蓋了BLE的主從連接與數(shù)據(jù)收發(fā)。后文中講述的代碼均屬于這個工程下的代碼段。SimpleBLEPeripheral的工程目錄如下

BLE協(xié)議棧軟件流程16:18

/6BLE協(xié)議棧是一個用于實(shí)現(xiàn)BLE網(wǎng)絡(luò)功能的完整系統(tǒng)。為了實(shí)現(xiàn)BLE網(wǎng)絡(luò)協(xié)議的組建與任務(wù)調(diào)度,BLE協(xié)議棧也有自己的操作系統(tǒng)。BLE協(xié)議??梢岳斫鉃榫褪且粋€基于輪轉(zhuǎn)查詢式的操作系統(tǒng)。整個BLE協(xié)議棧的任務(wù)調(diào)度都是在操作系統(tǒng)上完成的。它的main函數(shù)在SimpleBLEPeripheral_Main.c中。該協(xié)議??傮w上來說一共做了兩件工作,一個是功能初始化,即由啟動代碼來初始化硬件系統(tǒng)和軟件構(gòu)架需要的各個模塊,另外一個就是開始啟動操作系統(tǒng)實(shí)體。intmain(void){HAL_BOARD_INIT();//初始化硬件InitBoard(OB_COLD);//初始化板載I/OHalDriverInit();//初始化硬件驅(qū)動osal_snv_init();//初始化非易失性系統(tǒng)osal_init_system();//初始化操作系統(tǒng)HAL_ENABLE_INTERRUPTS();//使能中斷InitBoard(OB_READY);//板載最終初始化#ifdefined(POWER_SAVING)osal_pwrmgr_device(PWRMGR_BATTERY);//電源管理選項(xiàng):電池#endifosal_start_system();//啟動操作系統(tǒng)(進(jìn)入后不再返回)return0;}

BLE協(xié)議棧軟件流程16:18

/6上述代碼對操作系統(tǒng)運(yùn)行的一些必要的配置進(jìn)行了初始化,相關(guān)軟硬件的初始化完成后啟動操作系統(tǒng),并不再返回。整個協(xié)議棧就開始運(yùn)行起來。

BLE協(xié)議棧-osal_init_system()uint8

osal_init_system(void

){//

系統(tǒng)內(nèi)存分配初始化osal_mem_init();//

消息隊(duì)列初始化osal_qHead

=NULL;//

系統(tǒng)定時器初始化osalTimerInit();//

電源管理系統(tǒng)初始化osal_pwrmgr_init();//

系統(tǒng)任務(wù)初始化osalInitTasks();//

設(shè)置高效搜索堆的第一個空閑塊。osal_mem_kick();return

(SUCCESS);}

BLE協(xié)議棧-osal_run_system()uint8

osal_run_system(void

){uint8idx

=0;#ifndef

HAL_BOARD_CC2538osalTimeUpdate();

//更新系統(tǒng)時間#endifHal_ProcessPoll();

//硬件輪詢do

{if

(tasksEvents[idx])

//如果有事件發(fā)生跳出事件輪詢{break;}}

while

(++idx

<tasksCnt);}

BLE協(xié)議棧-osal_run_system()uint8

osal_run_system(void

){if

(idx

<

tasksCnt){uint16

events;halIntState_t

intState;HAL_ENTER_CRITICAL_SECTION(intState);events

=

tasksEvents[idx];

//從事件列表中提取出事件tasksEvents[idx]

=0;

//清空當(dāng)前事件HAL_EXIT_CRITICAL_SECTION(intState);activeTaskID

=idx;events

=(tasksArr[idx])(

idx,

events

);activeTaskID

=

TASK_NO_TASK;HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[idx]

|=

events;

//將未被處理的事件重新加入列表HAL_EXIT_CRITICAL_SECTION(intState);}}16:18

/9

BLE協(xié)議棧-osal_run_system()uint8

osal_run_system(void

){#if

defined(POWER_SAVING

)else

//

Complete

pass

through

alltask

events

with

no

activity?{osal_pwrmgr_powerconserve();

//Put

the

processor/system

into

sleep}#endif/*

Yield

in

case

cooperative

scheduling

is

being

used.*/#if

defined(configUSE_PREEMPTION)

&&

(configUSE_PREEMPTION

==0){osal_task_yield();}#endif}16:18

/10

BLE協(xié)議棧-系統(tǒng)任務(wù)注冊void

osalInitTasks(

void

){uint8taskID=0;tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));LL_Init(taskID++);//LL任務(wù)初始化Hal_Init(taskID++);//Hal任務(wù)初始化HCI_Init(taskID++);//HCI任務(wù)初始化L2CAP_Init(taskID++);//L2CAP任務(wù)初始化GAP_Init(taskID++);//GAP初始化GATT_Init(taskID++);//GATT初始化SM_Init(taskID++);//SM任務(wù)初始化GAPRole_Init(taskID++);//GZPRole初始化GAPBondMgr_Init(taskID++);//GAPBondMgr初始化GATTServApp_Init(taskID++);//GATTServApp初始化SimpleBLEPeripheral_Init(taskID);//用戶任務(wù)初始化}16:18

/11BLE協(xié)議棧與智云框架

BLE協(xié)議棧智云框架文件結(jié)構(gòu)16:18

/12通過對BLE協(xié)議棧的執(zhí)行原理和功能結(jié)構(gòu)細(xì)致的分析,可以大致理解協(xié)議棧的工作邏輯和工作原理。但是要將BLE協(xié)議棧完整的使用起來對于初學(xué)者來說還是具有一定的困難,為了能夠讓初學(xué)者對BLE網(wǎng)絡(luò)的使用快速上手,企業(yè)在原有的BLE協(xié)議棧上通過官方提供的SimpleBLEPeripheral歷程開發(fā)了一套智云框架,在智云框架上省去了組建BLE網(wǎng)絡(luò)和建立用戶任務(wù)并定義用戶事件的工作,讓BLE網(wǎng)絡(luò)的開發(fā)更方便簡單。

BLE協(xié)議棧智云框架文件結(jié)構(gòu)

傳感器應(yīng)用接口函數(shù)函數(shù)名稱函數(shù)說明sensorInit()傳感器硬件初始化sensorLinkOn

()sensorUpdate()sensorControl()sensorCheck

()ZXBeeInfRecv()節(jié)點(diǎn)入網(wǎng)成功操作函數(shù)傳感器數(shù)據(jù)定時上報(bào)傳感器/執(zhí)行器控制函數(shù)傳感器預(yù)警監(jiān)測及處理函數(shù)解析接收到的傳感器控制命令函數(shù)自定義事件處理函數(shù),啟動定時器觸發(fā)事件MY_REPORT_EVTMyEventProcess()16:18

/13

智云傳感器程序執(zhí)行流程16:18

/14項(xiàng)目實(shí)踐項(xiàng)目實(shí)踐

硬件功能設(shè)計(jì)16:18

/15項(xiàng)目實(shí)踐

軟件邏輯設(shè)計(jì)16:18

/16項(xiàng)目實(shí)踐

軟件邏輯設(shè)計(jì)16:18

/17項(xiàng)目實(shí)踐

軟件邏輯設(shè)計(jì)16:18

/18項(xiàng)目實(shí)踐

軟件邏輯設(shè)計(jì)16:18

/19項(xiàng)目實(shí)踐

程序通信協(xié)議數(shù)據(jù)方向協(xié)議格式說明上行(節(jié)點(diǎn)往應(yīng)用發(fā)送數(shù)據(jù))

{humidity=X}下行(應(yīng)用往節(jié)點(diǎn)發(fā)送指令)

{humidity=?}下行(應(yīng)用往節(jié)點(diǎn)發(fā)送指令)

{cmd=X}X表示濕度采集的值。查詢濕度值X為0表示關(guān)閉繼電器,1表示開啟繼電器。16:18

/20項(xiàng)目實(shí)踐

BLE協(xié)議棧系統(tǒng)用戶任務(wù)初始化void

SimpleBLEPeripheral_Init(uint8task_id

){simpleBLEPeripheral_TaskID

=

task_id;//Setup

the

GAPVOID

GAP_SetParamValue(TGAP_CONN_PAUSE_PERIPHERAL,DEFAULT_CONN_PAUSE_PERIPHERAL);….ZXBeeInfInit();at_init();#ifndef

CC2540_SerialsensorInit();#endif}……osal_set_event(simpleBLEPeripheral_TaskID,

SBP_START_DEVICE_EVT);}16:18

/21項(xiàng)目實(shí)踐

傳感器主動上報(bào)傳感器數(shù)據(jù)void

sensorUpdate(void){char

pData[32];char

*p

=

pData;//

濕度度采集集(0~100隨機(jī)數(shù))humidity

=(uint16)(osal_rand()%100);//

更新濕度的值sprintf(p,

"humidity=%.1f",humidity);bleSend(p,

strlen(p));HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);HalLedSet(HAL_LED_1,HAL_LED_MODE_BLINK

);printf("sensor->sensorUpdate():

humidity=%.1f\r\n",

humidity);}16:18

/22項(xiàng)目實(shí)踐

自定義事件處理void

MyEventProcess(uint16

event

){if

(event

&MY_REPORT_EVT)

{printf("sensor->MyEventProcess():

MY_REPORT_EVT

trigger!\r\n");sensorUpdate();//

溫馨提示

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

評論

0/150

提交評論