zigBee实验报告Word格式文档下载.docx
- 文档编号:20778653
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:48
- 大小:967.82KB
zigBee实验报告Word格式文档下载.docx
《zigBee实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《zigBee实验报告Word格式文档下载.docx(48页珍藏版)》请在冰豆网上搜索。
外形如图1所示:
图1:
ZigBee开发板外形图
本开发板采用TI公司的CC2530芯片,外有晶振、RS232串口、按键、电源灯外围电路及元件。
本实验利用CC2530芯片集成的片上温度传感器采集温度。
部分核心板电路如图2所示:
图2:
部分核心板电路图
部分底板电路图如图3所示:
图3:
部分底板电路图
CC2530芯片
CC2530是用于2.4-GHzIEEE802.15.4、ZigBee和RF4CE应用的一个真正的片上系统(SoC)解决方案。
它能够以非常低的总的材料成本建立强大的网络节点。
CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其他强大的功能。
CC2530具有不同的运行模式,使得它尤其适应超低功耗要求的系统。
运行模式之间的转换时间短进一步确保了低能源消耗。
图4:
CC2530框图
CC2530具有一个IEEE802.15.4兼容无线收发器。
RF内核控制模拟无线模块。
另外,它提供了MCU和无线设备之间的一个接口,这使得可以发出命令,读取状态,自动操作和确定无线设备事件的顺序。
无线设备还包括一个数据包过滤和地址识别模块。
CC2530的硬件设计也支持ZigBee协议所要求的各种协议和算法。
2.主要的软件环境
TI公司的。
ZStack是TI公司为开发者提供的符合ZigBee2007的协议栈,是开发ZigBee模块必不可少的环境(当然你也可以选择其他协议栈或自己开发一个协议栈)。
ZStack是一个免费半开源的产品。
注:
ZigBee协议是ZigBee联盟给出的一个短距离无线传输协议。
ZigBee协议栈是ZigBee协议的具体实现。
ZStack是TI公司开发的ZigBee协议栈。
4.1.内容简介
本节内容主要分为以下两方面:
1.无线传感器网络采温系统实验2.ZigBee协议(ZigBee2007版,下同)和ZStack分析。
无线传感器网络采温系统实验部分是对本次开发的一个描述。
在商业的ZigBee模块开发中是都利用了ZigBee协议栈,其为开发提供了必要的接口。
开发者所做的代码工作主要是相关的硬件驱动和应用程序。
本实验室基于TI官方实例SimpleAPI所做,并对这个实例进行了必要的改写。
虽然ZigBee协议栈为开发者提供了所需的API,使得开发者不必关心ZigBee协议的具体实现,便可开发出产品,但是要想更好的开发ZigBee产品,我想还必须对ZigBee协议和协议栈进行研究分析。
本段内容的另一个部分便是对此的描述。
4.2.无线传感器网络采温系统实验
4.实验简介
本实验基于ZigBee网络设计了一个无线传感器网络,可以完成无线的采温功能。
设备类型简介:
协调器(作为采集器)
协调器是一个ZB网络的第一个开始的设备,或者是一个ZB网络的启动或建立网络的设备。
协调器节点选择一个信道和网络标志符(也叫PANID),然后开始建立一个网络。
协调器设备在网络中还可以有其他作用,比如建立安全机制、网络中的绑定的建立等等。
注意:
协调器主要的作用是建立一个网络和配置该网络的性质参数。
一旦这些完成,该协调器就如同一个路由器,网络中的其他操作并不依赖该协调器,因为ZB是分布式网络。
路由器(作为传感器)
一个路由器的功能有
(1)作为普通设备加入网络
(2)多跳路由(3)辅助其它的子节点完成通信。
终端设备(作为传感器)
为了维持网络最基本的运行,对于终端设备没有指定的责任。
也就是说,在一个基本网络中,终端设备没有必不可缺少性。
所以它可以根据自己功能需要休眠或唤醒,因此为电池供电设备。
一般来说,该设备需要的内存较少(特别是内部RAM)
网络的拓扑结构
网状结构(无线mesh网络)
图5:
网络拓扑结构图
黑色的为协调器节点,作为采集器,接收温度信息,并通过串口发送到PC机上。
红色的和白色的为传感器节点,采集温度数据发送到采集器。
红色的具有路由功能。
网络从功能上讲是基于adhoc网络的,具有自组织,多跳等特点。
因此可扩展性、健壮性都很有优势。
4.2.2工程结构简介
工程结构如图5所示:
图6:
工程的工作空间
说明:
APP(ApplicationProgramming):
应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。
HAL(Hardware(H/W)AbstractionLayer):
硬件层目录。
MAC:
介质接入控制子层目录,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件。
实现的功能有:
1、能产生网络信标。
2、支持PAN的连接和断开连接。
3、同信标保持同步。
4、在对等的MAC实体之间提供一个可靠的通信链路。
5、处理和维护GTS机制。
6、信道接入采用CSMA-CA接入机制。
7、支持设备的安全性。
介质访问控制层(MAC)帧被称为MAC协议数据单元(MPDU),其长度不超过127个字节。
它具有四种不同的帧形式,即信标帧、数据帧、确认帧和命令帧。
MT(MonitorTest):
实现通过串口可控各层,与各层进行直接交互。
NWK(ZigBeeNetworkLayer):
网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口。
OSAL(OperatingSystem(OS)AbstractionLayer):
协议栈的操作系统。
Profile:
AF(Applicationwork)层目录,包含AF层处理函数文件。
Security:
安全层目录,安全层处理函数,比如加密函数等。
Services:
地址处理函数目录,包括着地址模式的定义及地址处理函数。
Tools:
工程配置目录,包括空间划分及ZStack相关配置信息。
ZDO(ZigBeeDeviceObjects):
ZDO目录。
ZMac:
MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理函数。
ZMain:
主函数目录,包括入口函数及硬件配置文件。
Output:
输出文件目录,这个EW8051IDE自动生成的。
设备功能及网络拓扑结构介绍
ZigBee设备可分为全功能设备(FFD)和简化功能设备(RFD)。
全功能设备可以作为协调器(路由器)节点,可以进行数据的转发等功能。
简化功能设备只能作为终端节点发送和接受数据。
ZigBee协议支持多种网络拓扑结构,包括星型结构,树形结构,网状结构等。
关于ZIgBee网络拓扑结构的较为详细的介绍,将在本段3节中给出。
由于我暂时只买了两个模块,所以网络拓扑结构也很简单了。
一个是协调器节点,作为采集器模块通过串口同我的笔记本相连。
另一个是终端节点作为传感器模块测量温度并传输数据。
需要指出的是,只要有足够多的节点,本实验完全能够根据实际需要设计出有效的网络拓扑结构。
main()函数和OSAL
这部分是Zstack的程序,与我们编程工作密切相关,所以进行简单说明。
一个程序是从main()函数开始运行的。
在ZStack中main()函数主要完成了各种初始化任务,以及操作系统OSAL的启动。
相关的函数代码如下:
/*********************************************************************
*@fnmain
*@briefFirstfunctioncalledafterstartup.
*@returndon'
tcare
*/
intmain(void)
{
//Turnoffinterrupts
osal_int_disable(INTS_ALL);
//InitializationforboardrelatedstuffsuchasLEDs
HAL_BOARD_INIT();
//Makesuresupplyvoltageishighenoughtorun
zmain_vdd_check();
//InitializeboardI/O
InitBoard(OB_COLD);
//InitialzeHALdrivers
HalDriverInit();
//InitializeNVSystem
osal_nv_init(NULL);
//InitializetheMAC
ZMacInit();
//Determinetheextendedaddress
zmain_ext_addr();
//InitializebasicNVitems
zgInit();
#ifndefNONWK
//SincetheAFisn'
tatask,callit'
sinitializationroutine
afInit();
#endif
//Initializetheoperatingsystem
osal_init_system();
//Allowinterrupts
osal_int_enable(INTS_ALL);
//Finalboardinitialization
InitBoard(OB_READY);
//Displayinformationaboutthisdevice
zmain_dev_info();
/*DisplaythedeviceinfoontheLCD*/
#ifdefLCD_SUPPORTED
zmain_lcd_init();
#ifdefWDT_IN_PM1
/*IfWDTisused,thisisagoodplacetoenableit.*/
WatchDogEnable(WDTIMX);
osal_start_system();
//NoReturnfromhere
return0;
//Shouldn'
tgethere.
}//main()
OSAL即OperatingSystem(OS)AbstractionLayer,是一个基于事件驱动的轮询式的操作系统。
它主要提供了任务切换,内存管理等功能。
我们在实验中也主要是通过它来开发并管理应用程序。
在main()函数的最后,调用了osal_start_system(),此函数是OSAL的灵魂,也体现了协议栈的工作方式和流程。
其主要方法就是:
不断查看事件表,如果有事件发生就调用相应的事件处理函数。
相关代码如下:
*@fnosal_start_system
*
*@brief
*Thisfunctionisthemainloopfunctionofthetasksystem.It
*willlookthroughalltaskeventsandcallthetask_event_processor()
*functionforthetaskwiththeevent.Iftherearenoevents(for
*alltasks),thisfunctionputstheprocessorintoSleep.
*ThisFunctiondoesn'
treturn.
*@paramvoid
*@returnnone
voidosal_start_system(void)
#if!
defined(ZBIT)&
&
!
defined(UBIT)
for(;
;
)//ForeverLoop
{
uint8idx=0;
osalTimeUpdate();
Hal_ProcessPoll();
//ThisreplacesMT_SerialPoll()andosal_check_timer().
do{
if(tasksEvents[idx])//Taskishighestprioritythatisready.
break;
}
}while(++idx<
tasksCnt);
if(idx<
tasksCnt)
uint16events;
halIntState_tintState;
HAL_ENTER_CRITICAL_SECTION(intState);
events=tasksEvents[idx];
tasksEvents[idx]=0;
//CleartheEventsforthistask.
HAL_EXIT_CRITICAL_SECTION(intState);
events=(tasksArr[idx])(idx,events);
tasksEvents[idx]|=events;
//Addbackunprocessedeventstothecurrenttask.
#ifdefined(POWER_SAVING)
else//Completepassthroughalltaskeventswithnoactivity?
osal_pwrmgr_powerconserve();
//Puttheprocessor/systemintosleep
}
在OSAL中提供了开发所用的API。
主要有消息管理、任务同步、时间管理、终端管理、任务管理等。
下面对其进行简单的介绍。
(1)消息管理类API主要用于处理任务间的消息的交换,主要包括任务分配消息缓存、释放消息缓存、接受消息和发送消息等。
Uint8*osal_msg_allocate(unit16len)为消息分配缓存空间。
Uint8osal_msg_deallocate(uint8*msg_ptr)释放消息的缓存空间。
Uint8osal_msg_send(unit8destination-task,uint8*msg_ptr)
一个任务发送消息到消息队列
Uint8osal_msg_receive(uint8task_id)
一个任务从消息队列接受属于自己的消息。
(2)任务同步API用于任务的同步,允许一个任务等待某个事件的发生。
Uint8osal_set_event(uint8task_id,uint16event_flag)
运行一个任务设置某个事件。
(3时间管理API开启和关闭定时器,
Uint8osal_start_timerEx(uint8task_id,uint16event_id,uint16timeout_value)
设置一个定时时间,到后,相应的事件被设置。
Uint8osal_stop_timerEx(uint8task_id,uint16event_id)
停止已经启动的定时器。
OSAL提供的API还有很多,这里仅列出了较为常用的,完整API介绍TI公司提供了相应的用户手册。
关于OSAL的较为详细的介绍,将在本段3节中给出。
4.设备相关功能主要函数介绍
(1)协调器(采集器)编程协调器主要完成网络的建立维护等功能,这些功能由协议栈提供,其原理在此暂且不描述(下节将有较为详细的描述)。
在其编程过程中,我主要完成的是具体应用的开发。
就是将数据接收并发送到串口。
函数如下:
voidzb_ReceiveDataIndication(uint16source,uint16command,uint16len,uint8*pData)
这是协调器最主要的功能函数,处理的是接受到另一个数据后执行的操作。
简单来说就是数据归类处理后发送到串口。
函数的代码如下:
/******************************************************************************
*@fnzb_ReceiveDataIndication
*@briefThezb_ReceiveDataIndicationcallbackfunctioniscalled
*asynchronouslybytheZigBeestacktonotifytheapplication
*whendataisreceivedfromapeerdevice.
*@paramsource-Theshortaddressofthepeerdevicethatsentthedata
*command-ThecommandIdassociatedwiththedata
*len-ThenumberofbytesinthepDataparameter
*pData-Thedatasentbythepeerdevice
CONSTuint8strDevice[]="
Device:
0x"
CONSTuint8strTemp[]="
Temp:
"
CONSTuint8strBattery[]="
Battery:
uint8buf[32];
uint8*pBuf;
uint8tmpLen;
uint8sensorReading;
if(command==SENSOR_REPORT_CMD_ID)
//Receivedreportfromasensor
sensorReading=pData[1];
//Iftoolavailable,writetoserialport
//下面的功能是把发数据的设备号(网络地址)写入缓存
tmpLen=(uint8)osal_strlen((char*)strDevice);
pBuf=osal_memcpy(buf,strDevice,tmpLen);
_ltoa(source,pBuf,16);
pBuf+=4;
*pBuf++='
'
if(pData[0]==BATTERY_REPORT)
//当传输的数据是电压时,进行如下处理。
tmpLen=(uint8)osal_strlen((char*)strBattery);
pBuf=osal_memcpy(pBuf,strBattery,tmpLen);
*pBuf++=(sensorReading/10)+'
0'
//高位转换
.'
//小数点
*pBuf++=(sensorReading%10)+'
//低位转换
V'
else
//当传输的数据时温度时,进行如下处理。
tmpLen=(uint8)osal_strlen((char*)strTemp);
pBuf=osal_memcpy(pBuf,strTemp,tmpLen);
//低位转换
C'
\r'
\n'
*pBuf='
\0'
#ifdefined(MT_TASK)
//debug_str((uint8*)buf);
//张温刚修改
//写入串口
HalUARTWrite(0,buf,(byte)osal_strlen((void*)buf));
HalUARTWrite(0,"
\n"
1);
//canalsowritedirectlytouart
传感器编程主要工作是通过相应的片上传感器读取数据,然后发送的指定的采集器。
传感器相关数据的读取,分为电压值的读取uint8myApp_ReadBattery(void)与温度值的读取uint8myApp_ReadTemperature(void)。
代码如下
1.函数中用到了大量的条件编译,也就是说根据具体的条件,很多代码并没有参与编译,这也是嵌入式开发编程的特点。
为了展现原有的代码特点,我并没有对此进行省略。
2.温度传感器采用了一个效验的算法。
/**************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- zigBee 实验 报告