物联网短距离无线通信 课件 07-BLE协议栈程序分析_第1页
物联网短距离无线通信 课件 07-BLE协议栈程序分析_第2页
物联网短距离无线通信 课件 07-BLE协议栈程序分析_第3页
物联网短距离无线通信 课件 07-BLE协议栈程序分析_第4页
物联网短距离无线通信 课件 07-BLE协议栈程序分析_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物联网短距离无线通信技术项目七

BLE协议栈程序分析1.项目场景2.BLE协议栈分析目录CONTENTS3.BLE协议栈与智云框架4.项目实践项目场景项目场景如今大家生活水平日渐提高,对生活环境也变得在意不少,比如家中温度、湿度,这些关乎你生活舒适度、健康。像是Nest恒温器这类产品在海外市场早已经火热蛮久,同类产品也有不少,但在国内市场却比较少见,下面这款蓝牙湿温度计正面单色LCD屏幕,仅可以显示电量、蓝牙、温度、湿度。仅仅能显示数字自然不够,用户可以通过蓝牙与手机连接进行一些智能化配置,该产品可以通过米家蓝牙网关,联动其他电器,比如控制空调、加湿器,以改善室内舒适度。16:18

/3任务目标

为了跟上移动设备的发展潮流,某公司计划要使BLE技术开发一个智能温湿度计,并能够通过BLE主机设备实现对BLE设备的参数设置。当前设备还在调试阶段,为了测试设备能够稳定工作,需要对程序执行流程进行监测,以此掌握程序的动态执行过程。。16:18

/4BLE协议栈分析

BLE协议栈工程目录16:18

/5德州仪器公司为了方便开发人员使用BLE协议栈实现代码的开发提供了很多的BLE项目案例,其中最为实用的项目案例是SimpleBLEPeripheral,这个项目涵盖了BLE的主从连接与数据收发。后文中讲述的代码均属于这个工程下的代码段。SimpleBLEPeripheral的工程目录如下

BLE协议栈软件流程16:18

/6BLE协议栈是一个用于实现BLE网络功能的完整系统。为了实现BLE网络协议的组建与任务调度,BLE协议栈也有自己的操作系统。BLE协议栈可以理解为就是一个基于轮转查询式的操作系统。整个BLE协议栈的任务调度都是在操作系统上完成的。它的main函数在SimpleBLEPeripheral_Main.c中。该协议栈总体上来说一共做了两件工作,一个是功能初始化,即由启动代码来初始化硬件系统和软件构架需要的各个模块,另外一个就是开始启动操作系统实体。intmain(void){HAL_BOARD_INIT();//初始化硬件InitBoard(OB_COLD);//初始化板载I/OHalDriverInit();//初始化硬件驱动osal_snv_init();//初始化非易失性系统osal_init_system();//初始化操作系统HAL_ENABLE_INTERRUPTS();//使能中断InitBoard(OB_READY);//板载最终初始化#ifdefined(POWER_SAVING)osal_pwrmgr_device(PWRMGR_BATTERY);//电源管理选项:电池#endifosal_start_system();//启动操作系统(进入后不再返回)return0;}

BLE协议栈软件流程16:18

/6上述代码对操作系统运行的一些必要的配置进行了初始化,相关软硬件的初始化完成后启动操作系统,并不再返回。整个协议栈就开始运行起来。

BLE协议栈-osal_init_system()uint8

osal_init_system(void

){//

系统内存分配初始化osal_mem_init();//

消息队列初始化osal_qHead

=NULL;//

系统定时器初始化osalTimerInit();//

电源管理系统初始化osal_pwrmgr_init();//

系统任务初始化osalInitTasks();//

设置高效搜索堆的第一个空闲块。osal_mem_kick();return

(SUCCESS);}

BLE协议栈-osal_run_system()uint8

osal_run_system(void

){uint8idx

=0;#ifndef

HAL_BOARD_CC2538osalTimeUpdate();

//更新系统时间#endifHal_ProcessPoll();

//硬件轮询do

{if

(tasksEvents[idx])

//如果有事件发生跳出事件轮询{break;}}

while

(++idx

<tasksCnt);}

BLE协议栈-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;

//清空当前事件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协议栈-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协议栈-系统任务注册void

osalInitTasks(

void

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

/11BLE协议栈与智云框架

BLE协议栈智云框架文件结构16:18

/12通过对BLE协议栈的执行原理和功能结构细致的分析,可以大致理解协议栈的工作逻辑和工作原理。但是要将BLE协议栈完整的使用起来对于初学者来说还是具有一定的困难,为了能够让初学者对BLE网络的使用快速上手,企业在原有的BLE协议栈上通过官方提供的SimpleBLEPeripheral历程开发了一套智云框架,在智云框架上省去了组建BLE网络和建立用户任务并定义用户事件的工作,让BLE网络的开发更方便简单。

BLE协议栈智云框架文件结构

传感器应用接口函数函数名称函数说明sensorInit()传感器硬件初始化sensorLinkOn

()sensorUpdate()sensorControl()sensorCheck

()ZXBeeInfRecv()节点入网成功操作函数传感器数据定时上报传感器/执行器控制函数传感器预警监测及处理函数解析接收到的传感器控制命令函数自定义事件处理函数,启动定时器触发事件MY_REPORT_EVTMyEventProcess()16:18

/13

智云传感器程序执行流程16:18

/14项目实践项目实践

硬件功能设计16:18

/15项目实践

软件逻辑设计16:18

/16项目实践

软件逻辑设计16:18

/17项目实践

软件逻辑设计16:18

/18项目实践

软件逻辑设计16:18

/19项目实践

程序通信协议数据方向协议格式说明上行(节点往应用发送数据)

{humidity=X}下行(应用往节点发送指令)

{humidity=?}下行(应用往节点发送指令)

{cmd=X}X表示湿度采集的值。查询湿度值X为0表示关闭继电器,1表示开启继电器。16:18

/20项目实践

BLE协议栈系统用户任务初始化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项目实践

传感器主动上报传感器数据void

sensorUpdate(void){char

pData[32];char

*p

=

pData;//

湿度度采集集(0~100随机数)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项目实践

自定义事件处理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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论