资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2019/12/22,物联网实验平台技术培训,#,/20,培训内容,一,、,msstatePAN,协议栈的优点,二、,msstatePAN,协议栈工程开发流程,三、“光照感知”工程的开发,2024/11/11,1,/17,msstatePAN,协议栈的优点,功能属性,Z-Stack,协议栈,msstatePAN,协议栈,源码开放,否,是,路由,Mesh&,树形,&,星型路由,树形,&,星型路由,网络配置,动态,节点启动时自组网,动态,节点启动时自组网,个域网,ID,选择,动态选择,由用户静态设置,频率,2.4GHz,、,915MHz,、,868MHz,2.4GHz,直接消息模式,是,是,绑定,&,间接消息模式,动态绑定、静态绑定,动态绑定、静态绑定,信标使能,是,是,表,4 msstatePAN,协议栈与,Z-Stack,协议栈的比较,2024/11/11,2,/17,msstatePAN,协议栈的优点,表,4 msstatePAN,协议栈与,Z-Stack,协议栈的比较,(,续表,),2024/11/11,3,/17,功能属性,Z-Stack,协议栈,msstatePAN,协议栈,安全加密,是,否,数据包缓存代理支持,是,否,HEX,文件容量,200KB,80KB,休眠功能支持,是,否,PC,端调试器,MT,支持,是,否,串口调试信息打印,是,是,ZigBee,广播支持,是,是,APS,应答支持,是,是,msstatePAN,协议栈的优点,选择,msstatePAN,进行开发的原因:,能实现,ZigBee,协议的基本功能,是一款精简的协议栈。,较为简单,容易上手。附带一个较为详细的说明文档。,整个协议栈是基于状态机的实现的。而,Z-Stack,协议栈是基于操作系统的,如果对操作系统不是很了解,,msstatePAN,协议栈是一个很好的选择。,注:,Z-Stack,协议栈虽然不是完全开源的,但应用层和底层是开源的,用户也可以选择此协议栈实现相应功能。,2024/11/11,4,/25,msstatePAN,协议栈工程开发流程,底层开发,对芯片配置的重新定义,如端口的定义,这可以放在文件,evbConfig.c/h,中,,evbConfig.h,中已经定义了一个用于,LED,灯的端口,用户可以修改端口的定义,或再添加新的端口定义用于,LED,灯或按键。,若使用了端口,需要对端口进行初始化。对于端口的使用主要考虑以下几个方面:,端口的功能(,PXSEL),,通用,I/O,还是外设,I/O,,一般作为通用,I/O,,默认为通用,I/O,,本实例也用作通用,I/O,。,端口的方向(,PXDIR),,输入还是输出,本实例的端口要驱动,LED,灯,因此设为输出,默认为输入。,若端口作为中断的输入还要考虑端口的输入模式和中断方式,用户可参考,CC2430,的芯片手册。,2024/11/11,5,/17,msstatePAN,协议栈工程开发流程,底层开发,若想让串口按自定义的数据格式 接收,或添加新的校验(如,CRC,校验,程序中提供了一个,8,位的,CRC,校验),则应在文件,pcbind.h/c,中进行修改。,2024/11/11,6,/17,msstatePAN,协议栈工程开发流程,应用层开发,协议栈中提供了一个事例主程序文件,pcbind_node.c,文件,此文件中的主函数已经通过调用已有的函数实现了基本的组网及收发数据的功能,用户可以在此程序的基础上进行修改,添加自己的功能,如修改数据格式,添加采集模拟量的功能,解析用户发送的数据,也可以将此文件替换为自己的主程序文件。,2024/11/11,7,/17,“光照感知”工程的开发,“光照感知”开发实例的内容,本演示实验需要两个节点,,Sink,节点和终端(或者路由)节点。硬件上,,Sink,节点将使用,LED,灯(,P2_0,引脚,),,终端(或者路由)节点将连接一个光照传感器(,P0_0,引脚)。,2024/11/11,8,/17,“光照感知”工程的开发,“光照感知”开发实例的内容,Sink,节点上电后进行组网操作,终端节点进行入网操作,终端节点成功入网后将采集光敏电阻两端的电压,若光敏电阻阻值满足一定的条件(也可由,Sink,节点进行判断)将发送给,Sink,节点。若光照强度很弱,将会点亮,LED,灯;若光照强度很强,将会熄灭,LED,灯。数据的发送可以是周期性的,也可以是触发式的。,图,4-,示意图,2024/11/11,9,/17,“光照感知”工程的开发,底层开发,本实验用到,LED,灯,只需在,evbconfig.h,文件中将,LED1,定义为,P2_0,P2_0,引脚的初始化由宏定义,INIT_LED1(),完成主要是将引脚设为通用,I/O,,方向为输出,初始电平为低电平。,INIT_LED1(),在初始化时由,evbInit,函数调用。,2024/11/11,10,/17,“光照感知”工程的开发,底层开发,本实例中没有用到串口接收,PC,机的数据,若要通过串口接收,PC,机的数据,并对数据进行解析,需要在,pcbind.c,中进行修改。,pcbind.c,中有一个状态机,pbdFSM,,该状态机在,main,函数中被调用,在第一个状态,PBD_STATE_IDLE,中,将判断是否有数据从串口输入,若有数据将会调用,pbdParseSerialCmd(),进行解析。,pbdParseSerialCmd(),中会检测帧首是否正确,并进行校验的计算(从串口读取数据的同时进行校验的计算)。,case PBD_STATE_IDLE:,/check if we have input from PC client,if(halGetchRdy()pbdParseSerialCmd();,break;,2024/11/11,11,/17,“光照感知”工程的开发,应用层开发,主程序介绍,halInit(),:完成基本的硬件初始化,包括时钟频率的设定、串口的初始化、波特率的设定、以及定时器的初始化。,aplInit(),:完成协议栈的初始化,首先对应用支持子层的数据信息数据库,aps_pib,数据结构进行初始化,然后依次调用物理层初始化函数,phyInit(),,,MAC,层初始化函数,macInit(),;以及网络层初始化函数,nwkInit(),。,aplRegisterEndPoint(DATA_EP),:完成端点的注册,每一个端点对应着一个应用对象,端点号零被分配给,ZigBee,设备对象,ZDO,。对于本协议栈,也可以不使用。,2024/11/11,12,/17,“光照感知”工程的开发,应用层开发,主程序介绍,pbdInit(),:初始化,PC,机绑定。,conPrintConfig(),:打印节点配置,如协议栈版本、节点类型、长地址、,PANID,、信道。,while(1),:该无限循环开启了应用层状态机的循环,并会依次循环调用下层状态机。,debug_level,:定义调试级别,用来动态开、关调试输出。如果没有重新赋值(在,apsInit,中被初始化为,0,),则调试打印语句将被空语句取代。,2024/11/11,13,/17,“光照感知”工程的开发,应用层开发,此为路由或终端节点的状态机,对数据的采集在,APP2,状态中进行,将相关数据(如节点号、父节点地址)按一定格式组织后,调用发送数据的函数将数据发送出去。,若为协调器则成功组网后将等待接收数据,。,图,5-main,函数的主状态机,2024/11/11,14,/17,“光照感知”工程的开发,应用层开发,Sink,节点对接收数据的处理,用户对数据的解析是在函数,usrRxPacketCallback,()进行的,本实例在此函数中根据接收到的数据对,LED,灯进行控制,并将接收数据的相关信息(如短地址、端点号)及数据按一定的格向串口打印输出。,图,6-sink,节点对接收数据的处理,2024/11/11,15,/17,“光照感知”工程的开发,小结,至此,应用,msstatePAN,协议栈进行实例开发的基本流程已介绍完毕。用户可以不使用已给的主程序框架,编写自己的主程序。,2024/11/11,16,/17,
展开阅读全文