搜档网
当前位置:搜档网 › 飞比”Zigbee论坛CC2530开发板学习教程

飞比”Zigbee论坛CC2530开发板学习教程

飞比”Zigbee论坛CC2530开发板学习教程
飞比”Zigbee论坛CC2530开发板学习教程

“飞比”Zigbee论坛CC2530开发板学习教程(一)--前言

“奥特曼Zigbee读书日记”已经写到第六部分了,首先非常感谢广大网友的支持与长期关注,此系列笔记会继续按照开源的方向进行深入的学习及更新。同时,应广大网友的要求,也由于CC2530替代CC2430的强劲动力,经论坛管理团队讨论,最终决定在最近的一段时间内暂停“奥特曼Zigbee读书日记”的更新,而推出更偏向于应用,且更贴近市场的教程--“飞比”Zigbee论坛CC2530开发板学习教程。

本教程将着眼于TI公司的新一代 2.4G Zigbee IC-CC2530及最新的Zigbee协议-Zstack2007的应用学习。所采用的硬件平台为CC2530的官方开发板-CC2530DK (SmartRF05EB)。

少一点炒作,多做一点实事--本站致力于营造一个“潜心学习、踏实做事”的氛围,希望广大Zigbee技术的爱好者、从业者积极参与,一起为中国的“无线单片机”技术献出自己的微薄之力。

[注:本文源自https://www.sodocs.net/doc/3013821670.html,--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

在这一章里,首先介绍下本套教程的整体思路及具体会涉及到的例程。需要声明的一点是,本教程不是单片机的入门教程,需要读者对单片机及C语言有一定的基础,它关注的是Zigbee协议的基本概念及TI公司公开发行的免费Zigbee协议-Zstack 2007的应用。首先着眼于TI公司提供的学习例程的讲解,这其中不但包括Zstack 2007的例程,同时会介绍TI的一些简化协议,如Basic RF/SimpliciTI等;然后会将“奥特曼Zigbee读书日记”中介绍的开源协议-MSSTATE LRWPAN,移植到CC2530DK中;最后,我们再来一起进入一个具体的应用领域-智能家居,学习一下TI的专用Zigbee遥控器协议RemoTI。

以下为具体采用的平台及相应的例程:(以下例程很多是CC2430及CC2530中共用的,本教程将同时适用)

1、TI Basic RF

----Light Switch

----PER test

2、Zstack 2007

-----Sample App

-----Generic App

-----Home Automation

-----Serial App

-----Transmit App

-----Simple App

-----OAD/ENP/ESP等,待定

3、MSSTATE LRWPAN ---- 平台移植及Ping Pong例程

4、RemoTI

声明:本教程中采用的源代码均来源于官方网站,并在此基础上进行修改,本站尊重原作者的劳动,将保留所有源文件的版权信息,并将标明本站进行的修改。如对版权有任何异议,请通知本站,我们将在第一时间进行处理。

“飞比”Zigbee论坛CC2530开发板学习教程(二)-- 例1.基于Basic RF的无线电灯控制

从本章开始,本教程将以实际的应用为例,逐一对前言所提到的例程进行剖析。本文所提供的并不单单是这些例子的简单罗列,而是希望读者能从其中学到每一个例子的精髓。如果对任何一个例程有疑问,请直接在相应的教程后跟帖。

一加一远大于二,希望这里有一个互动跟共享的氛围,每个人都能从其中得到自己需要的。

[注:本文源自https://www.sodocs.net/doc/3013821670.html,--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

每一个例程都会以下面的格式来进行介绍,另外,为了提高论坛人气,会在适当的位置设置一定的阅读门槛,希望大家能踊跃参与。

[一]程序功能

[二]操作说明

[三]系统框架

[四]网络结构及协议解析

[五]扩展思考(本部分是基于例程基础上,底层的相关问题。由于本教程定位于应用,所以这部分只提出问题,后续的“奥特曼读书日记”将继续深入讨论)

例1.基于Basic RF的无线电灯控制

注:本例程的源代码来源于TI官方网站,为方便大家,贴子底部提供了下载地址。代码解压后请进入..\ide\srf05_cc2530\iar,打开light_switch工程文件进行编译、调试。另外,此例在Zstack2006中也有相同功能的例程,本教程均可适用。

[一]程序功能

此例程是一个基本的点对点通信实验,实现了一个开关控制一个电灯的功能。每一个节点是用来做开关还是用来做灯的控制器,可能通过按键进行选择。本例程可以作为一个无线通信的入门级程序,同时为了增加对信号质量的理解,本站对原例程进行了部分修改,增加了Rssi值的显示,在每收到一个数据包的时候,灯控制器会在LCD上显示相应的dbm值。

[二]操作说明

将程序编译、下载至开发板后,按Reset键后,屏幕显示如下:

此时,按下“S1”键,选择设备模式:

用遥杆(Joystick)左右键在“开关”和“电灯”间选择,“S1”键进行确认。

当选择为“开关”时,按遥杆中间键,发送控制信号,将打开或者关闭“电灯”板上的LED。此时“电灯”板上的LCD接收数据计数值加一,同时会显示接收RSSI值。

[三]系统框架

此平台采用的是典型的“死循环”结构,其中有一个循环等待用户按“S1”键,进行功能设置,设置完之后按功能不同分别进入“开关”和“灯”的死循环。如下代码:

//循环等待用户按“S1”键进入设置菜单

// Wait for user to press S1 to enter menu

while (halButtonPushed()!=HAL_BUTTON_1);

halMcuWaitMs(350);

//设置完后分别进入不同循环

// Transmitter application

if(appMode == SWITCH) {

// No return from here

appSwitch();

}

// Receiver application

else if(appMode == LIGHT) {

// No return from here

appLight();

}

[四]网络结构及协议解析

Basic RF由TI公司提供,它包含了IEEE 802.15.4标准的数据包的收发。这个库只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与802.15.4 MAC兼容的数据包结构及ACK包结构,其功能如下:

1. 不提供“多跳”、“设备扫描”及Beacon

2. 不提供不同种的网络设备,如协调器、路由器等。所有节点同级,只实现点对点传输。

3. 传输时会等待信道空闲,但不按802.15.4 CSMA-CA要求进行两次CCA检测。

4. 不重传数据

其工作原理如下:

启动:

1. 创建一个basicRfCfg_t的数据结构,并初始化其中的成员

2. 调用basicRfInit()函数进行协议的初始化

数据发送:

1. 创建一个buffer,把payload放入其中

2. 调用basicRfSendPacket()函数发送

数据接收:

1. 上层通过basicRfPacketIsReady()函数来检查是否收到一个新的数据包

2. 调用basicRfReceive()函数,把收到的数据复制到buffer中。

数据桢结构:

数据包结构(无加密情况)

[Preambles (4)][SFD (1)][Length (1)][Frame control field (2)]

[Sequence number (1)][PAN ID (2)][Dest. address (2)][Source address (2)] [Payload (Length - 2+1+2+2+2)][Frame check sequence (2)]

ACK包结构:

[Preambles (4)][SFD (1)][Length = 5 (1)][Frame control field (2)]

[Sequence number (1)][Frame check sequence (2)]

注:本协议同时提供加密方式传输(默认为关),其打开方式如下:

Project ==> option ==> C/C++ compiler ==> defined symbols 将xSECURITY_CCM改为SECURITY_CCM即可。

设备寻址:

本例程实现的是两个点间的通信,各自的地址只因设置为“开关”或者“灯”而不同,不存在地址安排等一系列复杂的网络问题。如下代码:

static void appSwitch() //开关

{

… …

// Initialize BasicRF

basicRfConfig.myAddr = SWITCH_ADDR;

… …

}

static void appLight() //灯

{

… …

// Initialize BasicRF

basicRfConfig.myAddr = LIGHT_ADDR;

… …

}

// BasicRF address definitions

#define PAN_ID 0x2007

#define SWITCH_ADDR 0x2520

#define LIGHT_ADDR 0xBEEF

[五]扩展思考

1. 80

2.15.4的整个数据包结构,数据是如何一个比特一个比特发出去并接收的,每组数据代表什么意思?

2. 802.15.4的数据是如何进行加密的?

附件:TI Basic RF简单点对点传输协议源代码

点此下载:TI Basic RF简单点对点传输协议源代码.zip(505.54 KB, 下载次数: 1346) 相关讨论请移步至:https://www.sodocs.net/doc/3013821670.html,/bbs/viewth ... &extra=page%3D1

Basic RF由TI公司提供,它包含了IEEE 802.15.4标准的数据包的收发。这个库只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与802.15.4 MAC兼容的数据包结构及ACK包结构,其功能如下:

1.不提供“多跳”、“设备扫描”及Beacon

2.不提供不同种的网络设备,如协调器、路由器等。所有节点同级,只实现点对点传输。

3.传输时会等待信道空闲,但不按802.15.4 CSMA-CA要求进行两次CCA检测。

4.不重传数据

其工作原理如下:

启动:

1. 创建一个basicRfCfg_t的数据结构,并初始化其中的成员

2. 调用basicRfInit()函数进行协议的初始化

数据发送:

1. 创建一个buffer,把payload放入其中

2. 调用basicRfSendPacket()函数发送

数据接收:

1. 上层通过basicRfPacketIsReady()函数来检查是否收到一个新的数据包

2. 调用basicRfReceive()函数,把收到的数据复制到buffer中。

数据桢结构:

数据包结构(无加密情况)

[Preambles (4)][SFD (1)][Length (1)][Frame control field (2)]

[Sequence number (1)][PAN ID (2)][Dest. address (2)][Source address (2)]

[Payload (Length - 2+1+2+2+2)][Frame check sequence (2)]

ACK包结构:

[Preambles (4)][SFD (1)][Length = 5 (1)][Frame control field (2)]

[Sequence number (1)][Frame check sequence (2)]

注:本协议同时提供加密方式传输(默认为关),其打开方式如下:

Project ==> option ==> C/C++ compiler ==> defined symbols 将xSECURITY_CCM改为SECURITY_CCM即可。

“飞比”Zigbee论坛CC2530开发板学习教程(三)-- 例2.传输质量(PER)测试

PER--Packet Error Rate,中文我们暂且叫“误包率”吧,听起来没有“误码率”来得顺口,只是这个测试的基本单位是“数据包”,一个数据包又包含了N多的“码”,所以叫误包率应该更准确些。或者直接叫PER吧,本人也曾极度反对中国人和中国人用英文,不过有的时候似乎效率更高些。。。

在上一个例子中,用Basic RF实现了一个基本的点对点传输的实验。本例程仍然基于相同的平台,但关注的是一个对无线通讯来讲一个至关重要的参数,就是传输质量,上例中曾增加过RSSI值的显示,但这只是一个微观参数,我们最终关注的是在不同的传输速率下,数据包能不能完全接收?如果不能,失误率是多少--这个参数就叫PER。

[注:本文源自https://www.sodocs.net/doc/3013821670.html,--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

例2.基于Basic RF的传输质量(PER)测试

注:本例程的源代码来源于TI官方网站,为方便大家,请点此下载。代码解压后请进入..\ide\srf05_cc2530\iar,打开per_test工程文件进行编译、调试。另外,此例在Zstack2006中也有相同功能的例程,本教程均可适用。

[一]程序功能

本例程要求有两个节点,实现一个发送器、一个接收器的单向RF连接。在程序启动时,要对本节点做发送还是接收器进行设置。如果是发送器在使用前必须进行如下几个设置:

1. 传输频率

2. 发送器输出功率

3. 总共要发送的数据包个数

4. 发射速率(每秒种发送多少个包)

如果设置为接收器,是需要设置传输频率。但接收器会显示状态:PER/RSSI值及已收到数据包个数

[二]操作说明

将程序编译、下载至开发板后,按Reset键后,屏幕显示如下:

此时,按下“S1”键,进入设置菜单:

用摇杆(Joystick)左右键进行选择,“S1”键进行确认。具体需要设置的参数如下表所图:屏幕显示

中文解释

备选参数及说明

Channel

传输频率选择

11 – 26 (2405 – 2480 MHz)

Operating Mode

设备模式

Receiver, Transmitter(接收器,发送器)

TX Output Power

发射功率

-3 dBm, 0 dBm, 4 dBm

Burst Size

本次要发送的数据包个数,达到数量后发送会停止。

1K, 10K, 100K, 1M

Packet rate

发射速率(每秒种发送多少个包)

100, 50, 20,10

通过摇杆及S1键分别将两个节点设为发送器,及接收器,然后设置相应参数后,两个设置分别显示如下:

此时按发送器摇杆上的中间键,开始发送数据,如下所示:

接收端误包率及RSSI值显示:

注:接收器显示的PER/RSSI值可以通过按S1值进行重置。

[三]系统框架

与例1基本相同,请参考上一章。此处仅探讨下本例中计算PER和RSSI值的方法:

为了获取传输的性能参数,接收器中包含了如下几个数据(包含在rxStats变量中,其类型为perRxStats_t)

rxStats.expectedSeqNum预计下一个数据包的序号,其值等于“成功接收的数据包”+“丢失的数据包”+1

rxStats.rssiSum上32个数据包的RSSI值的和

rxStats.rcvdPkts每次PER测试中,成功接收到的数据包的个数

rxStats.lostPkts丢失数据包的个数

其中丢失数据包个数是通过数据包序号的“跳跃”来计算的,比如收到第10个数据包后,expectedSeqNum应该为11,但在收到下一个数据包后发现其序号为12,那就说明其中丢了一个包。所以“丢失数据包个数”只有在后一个数据包到达时才能知道。另外,有错误的数据包也被认为是丢失的。

PER值是用如下公式进行计算的:

PER = 1000* rxStats.lostPkts/ (rxStats. lostPkts+ rxStats. rcvdPkts)

(rxStats. rcvdPkts>=1)

RSSI的值包含在每个数据包"payload"后的第一个字节,但这个值并非实际的RSSI值,还要加上一个固定的偏移量,偏移量的大小可以从CC2530的数据手册中找到。并且程序指定用32个数据包的RSSI平均值作为最终的结果在屏幕上显示,程序中有一个先进先出的“环形”buffer来记录前32个包的RSSI值作为计算基准。

[四]网络结构及协议解析

请参考上一章。

[五]扩展思考

1. RSSI, SNR, LQI均与信号质量相关,他们是什么关系?LQI(连接质量指示)如何得到的?

2. 如何提高信号质量,降低误包率?

“飞比”Zigbee论坛CC2530开发板学习教程(四)-- 串口通讯之SerialApp

RS232,也称标准串口,是目前最常用的一种串行通讯接口,因其成本低廉,应用广泛而被很多嵌入式系统所采用。在CC2530开发板上,由于LCD、LED等基本外接显示信息量有限,同时串口也方便了与其他系统进行通讯,所以它无疑成为了开发者最重要的一个调试手段。

本章的重点,就是以Zstack 2007中提供的例程--SerialApp为基础,对CC2530的串口部分进行详细的介绍。

[注:本文源自https://www.sodocs.net/doc/3013821670.html,--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

例3.基于Zstack 2007的串口通讯

在之前的“奥特曼Zigbee读书日记(三)和(四)”中,其实已经利用TI提供的基本库,从零开始,一步步地搭建了一个“老王”和“老张”打招呼的例程,但是由于他们俩说的所有话都是程序规定的,所以他们只能简单地说两句话“吃了吗”和“吃了”,然后不停地重复,我们中国人自然没有这么呆啦~~在本实验中,看看中国小伙是如何“远程”泡美国MM的~~~

在这个场景中,“中国小伙”通过QQ,向美国MM申请加为好友(申请绑定),在美国

MM验证后(绑定成功)后,双方你一句我一句地就聊起来了(串口终端1<==>Zigbee节点1 <==>Zigbee节点2 <==>串口终端2)。如下图(1)所示:

图(1)

注:“日记”中的例程的串口通讯部分其实是抛开Zstack的串口程序而重新写的,但实际上Zstack已经做过这部分工作了,在本例程中,我们不对ZStack做任何修改,只是分析下其程序功能与原理。读者可以在安装ZStack-CC2530-2.3.0-1.4.0后,在C:\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Utilities\SerialApp\CC2530DB目录下,打开SerialApp这个工程进行实验。

[一]程序功能

实现两个节点之间的绑定与通讯,同时每个节点可与其“上位机”--所边接的PC串口终端,进行通讯。示意如下:

图(2)

[二]操作说明

分别将Coordinator与EndDevice程序编译、下载至两套开发板后,按Reset键后,屏幕显示如下:

(图3)

(图4)

如果显示信息如上图所示,则表示网络初始化成功。

此时,按下任意一个节点的摇杆(Joystick)右键进行绑定申请,然后立即按下另外一个节点的Joystick右键进行绑定确认。此时,两个节点的红色LED灯--LED1,同时点亮,表示绑定成功,可以开始通信。

打开串口调试助手(注:可以在一台电脑上打开两个,或者在两台电脑上分别打开),分别对两个节点的串口进行设置,具体设置请参见图(1)中左边的设置,其中:串口的名称请在“设备管理器”中查找,波特率设为38400。

至此,准备工作已经做好。然后在任何一个串口终端上发送数据,此时另外一个终端即可接收此数据,即完成了一个(串口终端1==>Zigbee节点1 ==>Zigbee节点2 ==>串口终端2)的数据传输过程。

另外,在整个过程中,异常情况的LED显示:

1. LED1闪烁,表示在规定的绑定申请时间内,无设备对其进行绑定确认

2. LED3闪烁,表示连接节点丢失,如对方节点产生掉电等异常情况

[三]系统解析

本例程采用的是OSAL的系统,其原理读者可参考如下几篇文章,如有疑问请跟贴进行讨论:

1. 奥特曼Zigbee读书日记(二)--OSAL系统框架专题(作者:outman)

2. 深入浅出Z-Stack 2006 OSAL多任务资源分配机制(作者:cyril3 )

3. 我心目中的Zstack OSAL & Message(作者:ssls18years )

在此不做赘述,仅对此例程中的按键处理过程进行简单的讲解:

1. 申请绑定与绑定确认

首先,由某节点触发Joystick右键,即HAL_KEY_SW_2,对如何通过查询电平、确认按键事件,并调用相应的按键处理函数的过程有疑问的读者请参见上述文章。在按键处理函数--SerialApp_HandleKeys中,

if ( keys & HAL_KEY_SW_2 )

{

HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

// Initiate an End Device Bind Request for the mandatory endpoint

txAddr.addrMode = Addr16Bit;

txAddr.addr.shortAddr = 0x0000; // Coordinator

ZDP_EndDeviceBindReq( &txAddr, NLME_GetShortAddr(),

SerialApp_epDesc.endPoint,

SERIALAPP_PROFID,

SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,

SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,

FALSE );

}

此处发起绑定请求,等待其他节点应答,而如果有一个节点也按了Joystick右键,同样发出了绑定请求,则本节点收到一个End_Device_Bind_rsp的信息,并在

SerialApp_ProcessZDOMsgs函数中进行了处理,如下代码:

/*********************************************************************

* @fn SerialApp_ProcessZDOMsgs()

*

* @brief Process response messages

*

* @param none

*

* @return none

*/

static void SerialApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )

{

switch ( inMsg->clusterID )

{

case End_Device_Bind_rsp:

if ( ZDO_ParseBindRsp( inMsg ) == ZSuccess )

{

// Light LED

HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );

}

break;

...

}

}

至此,中国小伙已经成功加美国MM为好友了~

接下来的事,大家想必都知道了。。。

看看他们是怎么发送信息,怎么接收信息的吧?

1. “串口终端1”的数据,如何被“节点1”所接收,并且发送出去的?

串口数据是由哪层来负责的呢?--HAL。。。恩,猜对了。但这个肯定不是靠猜的,其中的过程就不讲了。让我们从主循环(osal_start_system)的Hal_ProcessPoll函数找下去(用source insight的同学可以用ctrl +),Hal_ProcessPoll ==> HalUARTPoll ==> HalUARTPollDMA

这个HalUARTPollDMA函数里最后有这样一句话:dmaCfg.uartCB(HAL_UART_DMA-1,

evt);对dmaCfg.uartCB这个函数进行了调用,ctrl / 搜索这个dmaCfg.uartCB,发现SerialApp_Init函数有两句话:

uartConfig.callBackFunc = SerialApp_CallBack;

HalUARTOpen (SERIAL_APP_PORT, &uartConfig);

此处将dmaCfg.uartCB这个函数注册成为SerialApp_CallBack,也就是说

SerialApp_CallBack函数每次循环中被调用一次,对串口的内容进行查询,如果DMA中接收到了数据,则调用HalUARTRead,将DMA数据读至数据buffer并通过AF_DataRequest 函数发送出去,注意:送出去的信息的CLUSTERID(信息簇ID)号为

SERIALAPP_CLUSTERID1。

总结一下这个过程:串口数据==>DMA接收==>主循环中通过SerialApp_CallBack查询==>从DMA获取并发送到空中。

2. 节点2在收到空中的信号后,如何传递给与其相连的串口终端?

节点2从空中捕获到信号后,在应用层上首先收到信息的就是SerialApp_ProcessEvent 这个函数了,它收到一个AF_INCOMING_MSG_CMD的事件,并通知

SerialApp_ProcessMSGCmd,执行以下代码

switch ( pkt->clusterId )

{

// A message with a serial data block to be transmitted on the serial port.

case SERIALAPP_CLUSTERID1:

... ...

// Transmit the data on the serial port.

if ( HalUARTWrite( SERIAL_APP_PORT, pkt->cmd.Data+1, (pkt->cmd.DataLength-1) ) ) {

// Save for next incoming message

SerialApp_RxSeq = seqnb;

stat = OTA_SUCCESS;

}

... ...

这样就将从空中获取到的信息,传给了串口终端2--美国MM,第一句话终于传到美国了~至于后面的事情嘛,我们就不关注了,看小伙自己的造化了~~~

另外,此例程中还有一种模式,就是这个中国小伙可以按条件搜索(Joystick左键,profileID与clusterID相同者响应),但这种条件找出的MM都比较有个性--只接受你的信息,但不给你发。想想也是,明显没诚意嘛~这种模式的细节,本教程不再涉及,有兴趣的读者可自行了解。

声明一点,要真想泡美国MM,只用我们所谈的Zigbee是暂时搞不定的,它最大的传

输距离能有几公里就相当不易了,不过隔壁办公室的MM,倒是可以考虑送她一个~~~

[四]网络结构及协议解析

本例程的重点是串口的应用,其中涉及的组网及绑定等网络层细节,暂不详细阐述,将在后续的“奥特曼Zigbee读书日记”中进行深入分析。

[五]扩展思考

1. DMA方式与ISR方式的UART传输,有什么区别?分别如何实现?

2. ZDO_CB_MSG与AF_INCOMING_MSG_CMD等事件的产生机制?

3. 如何完成“多对一”或者“一对多”的通信?

4. 绑定表的存储位置与生命周期?

“飞比”Zigbee论坛CC2530开发板学习教程(五)--ZStack例程讲解之GenericApp

由于我们极力倡导“开源Zigbee”,有网友对我们的CC2530开发板项目有所误解,认为我们的开发板是用freakz而不用TI提供的ZStack。实则不然,ZStack是由Zigbee组织认证通过的“Golden unit”Zigbee平台,或者叫Zigbee中的“明星工程”。而且TI公司免费提供了一整套的开发平台及代码。我们没有理由拒绝这么优秀的平台,选择freakz作为补充,只是为了深入到协议层的学习,了解更多的“为什么”。

一个有效的学习过程,应该是由浅入深,由表面到本质。我们将ZStack的学习定位为了解“是什么”和“怎么样”的过程。从上一篇SerialApp的讲解开始,到本篇的GenericApp和后面的SampleApp, TransmitApp与SimpleApp我们都会以了解例程功能,操作与基本原理为主,深入的学习将在“奥特曼Zigbee读书日记”中进行铺开。

[注:本文源自https://www.sodocs.net/doc/3013821670.html,--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

其实这几个例程实现了不同的功能,方便了开发者在此基本功能上进行二次开发,以缩短项目周期,一定程序上减轻了Zigbee开发的复杂度。让我们一起来一一进行分析:

例4、ZStack的“Hello, world!”例程――GenericApp

注:本例程位于C:\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\ Samples\GenericApp\CC2530DB目录下,IAR工程文件为GenericApp.eww

[一]程序功能

本例程在启动后,自动组织建立一个Zigbee网络(我们以一个协调器和终端节点组成的简单网络进行讲解),网络中的设备间通过“绑定”与“按条件搜索”两种方式,建立连接。成功之后互相发送“Hello, world!”字符信息

[二]操作说明

打开上述的工程文件,分别选择“Coordinator”与“Enddevice”两种设备进行编译、下载至两个FB2530EB板中,详细过程前文已有描述,不再重复。按Reset键后,屏幕显示如下:

如果显示信息如上图所示,则表示网络初始化成功。

此时,按下Enddevice的摇杆(Joystick)右键进行绑定申请,然后立即按下Coordinator 的Joystick右键进行绑定确认。此时,两个节点的红色LED灯--LED1,同时点亮,表示绑定成功,可以开始通信。

注:绑定也可以由Coordinator发起,由Enddevice响应。

在成功建立连接后,Enddevice与Coordinator均将每5秒钟向对方发送一次“Hello World”字符串。

与前文SerialApp例程相似,建立连接的方式除了“绑定”外,还有“条件搜索”的方式。按Enddevice的摇杆(Joystick)左键发送“条件搜索”请求――即按规定的ProfileID,支持的Cluster等信息进行匹配设备查找,收到此请求后,Coordinator将会显示如下

此信息表明Coordinator已经接收到搜索请求,并且返回了响应信息。随后,Enddevice

的红色LED1亮,表示已与匹配设置建立了连接。Enddevice将发送“Hello, world”信息,从Coordinator的LCD上可以看到信息被成功接收。

[三]系统解析

下面我们一起从代码中了解下上述的过程:

在自动启动网络成功后,Coordinator与Enddevice均将执行如下代码,进行信息发送:

1.UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )

2.{

3.… …

4. case ZDO_STATE_CHANGE:

5.GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);

6.if ( (GenericApp_NwkState == DEV_ZB_COORD)

7. || (GenericApp_NwkState == DEV_ROUTER)

8. || (GenericApp_NwkState == DEV_END_DEVICE) )

9.{

10. // Start sending "the" message in a regular interval.

11. osal_start_timerEx( GenericApp_TaskID,

12. GENERICAPP_SEND_MSG_EVT,

13. GENERICAPP_SEND_MSG_TIMEOUT );

14.}

复制代码

并且由下面代码实现重复发送,每5秒种一次

1. if ( events & GENERICAPP_SEND_MSG_EVT )

2. {

3.// Send "the" message

4.GenericApp_SendTheMessage();

5.

6.// Setup to send message again

7.osal_start_timerEx( GenericApp_TaskID,

8. GENERICAPP_SEND_MSG_EVT,

9.GENERICAPP_SEND_MSG_TIMEOUT );

10.

11.// return unprocessed events

12.return (events ^ GENERICAPP_SEND_MSG_EVT);

13. }

复制代码

但此时的发送地址并不明确目标。须要如下建立连接的过程,才可将信息发送至某设备:

ZigBee学习笔记CC2530

已入门选手进一步学习的重点 我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题! 那么如何来提高这方面的技能呢? 1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。ZDP和ZDO的实现文件里面 有大量的函数在以后具体应用中可以去调用。 2、典型例子中的ZDO消息使用其实只有那么几个例子,比如: ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。在深入应用的时候那么几个典型的消息注册是不够 用的,比如我在一个应用中就注册了以下: ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析 End_Device_Bind_rsp ZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析 Match_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析 Device_annce ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析 Active_EP_rsp ZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析 Simple_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析 NWK_addr_rsp 在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。 3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。 ◆在2.45GHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。 为了使供应商能够提供最低可能功耗的设备,IEEE(InstituteofElectricalandElectronicsEngineers,电气及电子工程师学会)定义了两种不同类型的设备:一种是完整功能设备(full.functionaldevice,FFD),另一种是简化功能设备

ARM嵌入式系统基础与开发教程丁文龙

第1章嵌入式系统概述 1.填空题 (1)嵌入式系统硬件平台嵌入式软件 (2)硬件抽象层HAL 板级支持包BSP 设备驱动程序 (3)嵌入式微处理器嵌入式微控制器嵌入式片上系统SoC 2.选择题 (1)B (2)A B D (3)D 3.简答题 (1)什么是嵌入式系统?列举几个熟悉的嵌入式系统的产品。 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。常见的有汽车、手机、MP3等等。 (2)嵌入式系统由哪几部分组成? 嵌入式系统从大的方面分嵌入式系统硬件平台和嵌入式软件两大部分,其中软件部分又具体分为若干层次。对于包含有操作系统的嵌入式系统来讲,嵌入式系统软件结构包含4个层次:设备驱动层、实时操作系统RTOS层、应用程序接口API层、应用程序层。 (3)简述嵌入式系统的特点。 系统内核小;专用性强;系统精简;软件固化;嵌入式软件开发要想走向标准化,就必 须使用多任务的操作系统;嵌入式系统开发需要开发工具和环境。

第2章ARM体系结构 1.填空题 (1)Cortex-R4处理器Cortex-A8处理器 (2)ARM Thumb (3)R13 R14 R15 (4)8 16 32 2.选择题 (1)A C D (2)A (3)B C D 3.简答题 (1)简述ARM可以工作的几种模式。 ARM体系结构支持7种处理器模式:用户模式、快中断模式、中断模式、管理模式、 中止模式、未定义模式和系统模式。 (2)ARM7内部有多少个寄存器? 在ARM7TDMI处理器内部有37个用户可见的32位寄存器,其中31个通用寄存器,6个状态寄存器。 (3)描述一下如何禁止IRQ和FIQ的中断? 在一个特权模式下,都可通过置位CPSR中的I位来禁止IRQ。 在一个特权模式中,可通过置位CPSR中的F标志来禁止FIQ异常。 (4)请描述ARM7TDMI进入异常或退出异常时内核有何操作? 当异常发生时,ARM处理器尽可能完成当前指令(除了复位异常)后,再去处理异常,并执行如下动作: ①进入与特定的异常相应的操作模式; ②将引起异常指令的下一条指令的地址保存到新模式的R14中; ③将CPSR的原值保存到新模式的SPSR中; ④通过设置CPSR的第7位来禁止IRQ;如果异常为快中断,则要设置CPSR的第6位禁止快中断; ⑤给PC强制赋向量地址值。 退出异常时: ①将LR中的值减去偏移量后移入PC,偏移量根据异常的类型而有所不同; ②将SPSR的值复制回CPSR; ③清零在入口置位的中断禁止标志。

ZigBee网络拓扑结构显示

实验二ZigBee网络拓扑结构显示 【实验目的】 1、熟悉Qt编写程序的方法; 2、了解Qt显示ZigBee网络拓扑结构的工作原理; 【实验设备】 1、装有RedHat AS5系统或装有RedHat AS5虚拟机的PC机一台; 2、物联网开发设计平台一套; 【实验要求】 使用Qt为ZigBee网络编写拓扑结构; 1、编程要求:使用提供的API函数编写应用程序; 2、实现功能:构建ZigBee网络拓扑结构; 3、实验现象:显示网络的拓扑结构; 【实验原理】 本实验箱针对Qt下,将服务程序的API做了一定的封装,并提供了非常方便使用的接口函数,可以让用户在Qt环境下绘制Zigbee网络的拓扑结构。这些函数都被封装在一个叫做TopologyWidget的类中,它们的详细介绍如下: 【函数原型】void TopologyWidget::SetTopologyArea(const QString &ip, QScrollArea *area); 【功能】设置用来显示拓扑图的滚动区域控件 【参数】ip: 运行服务程序的网关(计算机)的IP地址area: 用来显示拓扑图的滚动区域控件【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 【函数原型】void TopologyWidget::UpdateTopologyArea(QScrollArea *area); 【功能】立即刷新滚动区域控件中的拓扑图 【参数】area: 用来显示拓扑图的滚动区域控件 【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 在实际应用中,用户需要首先在界面中放置一个,假设其名称为“scrollArea”,只需要在窗体的构造函数中,完成了setupUi的操作之后,调用TopologyWidget::SetTopologyArea函数即可使拓扑图显示在这个滚动区域中,参考下面的代码。 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 将界面中的scrollArea设置为用来显示拓扑图 TopologyWidget::SetTopologyArea("127.0.0.1", ui->scrollArea); } 【实验步骤】 1.双击打开桌面上的VMware Player。如图 2.1所示;

物联网专业需要看的书籍

物联网专业需要看的书籍

课程1、物联网产业与技术导 论使用电子工业出版社《物联网:技术、应用、标准、安全与商业模式》等等教材。在学完高等数学,物理,化学,通信原理,数字电路,计算机原理,程序设计原理等课程后开设本课程,全面了解物联网之RFID、M2M、传感网、两化融合等技术与应用。 课程2、C语言程序设计使用清华大学出版社《C语言程序设计》等教材。物联网涉及底层编程,C语言为必修课,同时需要了解OSGi,OPC,Silverlight等技术标准 课程3、Java程序设计,使用机械工业出版社《Java语言程序设计教程》等教材。物联网应用层,服务器端集成技术,开放Java技术也是必修课,同时需要了解Eclips e,SWT, Flash, HTML5,SaaS等技术 课程4、无线传感网络概论,使 用无线龙通讯科技出版社《现代无线传感器网络概论》、北京航空航天大学出版社《短距离无线通讯入门与实战》等教材。学习各种无线

RF通讯技术与标准,Zigbee, 蓝牙,WiFi,GPR S,CDMA,3G, 4G, 5G等等 课程5、TCP/IP网络与协议,《TCP/IP网络与协议》,清华大学出版社,等教材。TCP/IP以及OSI网络分层协议标准是所有有线和无线网络协议的基础,Socket 编程技术也是基础技能,为必修课 课程6、嵌入式系统技,《嵌入式系统技术教程》,人民邮电出版社等教材。嵌入式系统是物联网感知层和通讯层重要技术,为必修课 课程7、传感器技术概论,《传感器技术》,中国计量出版社,等教材。物联网专业学生需要对传感器技术与发展,尤其是在应用中如何选用有所了解,但不一定需要了解传感器的设计与生产,对相关的材料科学,生物技术等有深入了解 课程8、RFID技术概论,《射频识别(RFID)技术原理与应用》,机械工业出版社,

基于ZigBee技术的智能家居系统

一、智能家居的背景 从宏观上来讲,事物的每个发展阶段都是当时从业人员认识水平、技术水平、市场认知、原材料成本等几个原因共同作用的结果。每个阶段都会局限于当时的技术水平、市场接受程度等,都会有其无法突破的瓶颈和困难。即便智能家居系统在中国已发展20多年,且经过这么多年的发展,产品、技术已日趋成熟、稳定,但每项技术并不一定都完美无瑕。只要产品或技术处于高速发展中,它必然需要不断地去解决一些技术上或者产品上的问题。智能家居产品未来会还向节能环保,舒适度方面发展。比如冬暖夏凉型建筑,不用空调,由建筑自身的功能去调节温度。而智能家居必须结合这些建筑上的功能去发展,从这个方面来说,必然会推动智能家居的适应性发展。对与现阶段的智能家居来说,没有专用的对讲或智能家居数字处理芯片,无论是技术层面还是集成层面,都只是有所关联。如果能够很好的解决,未来数字对讲将会取得更好的应用。而随着中国城镇化趋势的加剧,大型小区会越来越多,人们对安保的重视程度也会日益加强,将来小区的多个安防子系统在技术上必然会走向综合化、集成化。除此之外,厂家需理性地为各类应用设计解决方案,校正一些过往的虚假概念。只有设计实用性强,性价比高,能适应拓展未来新技术的系统,才能更好地为用户服务。除此之外,各家产品的兼容性也是一个急需解决的问题。目前各厂家的产品均采用自家的协议,无法很好地做到兼容,而不同品牌的可视对讲和智能家居系统如何互连互通也将是今后需突破的难点 二、智能家居系统旨在实现的以下主要功能: (1)可以控制和相应的状态查询,如查询室内和室外的温度,可用于家用电器,如灯一键全开,一键全关,更方便。 (2)在光线方面我们可以依照家庭装修环境背景或者用户的其他层次的要对

[学习引导]4412开发板之嵌入式技术学习步骤及项目案例

嵌入式技术的学习步骤(基于iTOP-4412) 北京迅为电子有限公司

嵌入式技术的知识体系 ?适用于iTOP-4412开发板及配套教程的学习步骤 ?嵌入式的知识面广泛,初学者难于入门 ?本节阐述嵌入式技术学习步骤,适用于初学者 ?力图起到提纲挈领的作用,在大量学习资料中有一个比较清晰的脉络?最后会介绍一个实战案例

首先要搞明白几个重要文件的意义?学习方法:首先要掌握基础架构 ?对于架构来说,最基本的东西就是要搞清楚几个概念(几个文件的意义): –bootloader引导程序(UBOOT) –linux操作系统内核(kernel) –文件系统(可能包含2个文件) ?推荐大家首先研读:“澄清几个基本概念-迅为精英版聊天记录.doc” –该文件在QQ群共享中 ?开发编译环境的搭建、源代码的编译和烧写、应用和驱动的建立等等都是围绕这几个文件展开的!

第二步:搭建开发编译环境 ?64位WIN7系统--》虚拟机--》ubuntu ?对于初学者,推荐按照教程的要求和步骤来做,这样少走弯路,效率更高 ?其他系统不是不可以,但可能会遇到各种安装和编译过程的问题 ?熟练掌握以后,再去创新,这时才可以去做各种不同的尝试 ?搭建开发环境,有的时候并不顺利,需要克服一些安装问题 ?迅为已经把安装步骤做了很大程度的简化,比如虚拟机上的ubuntu镜像,直接拷贝进去就可以用了,避免了通过网络安装各种插件 ?搭建完成,就可以按照教程学习源代码编译和系统的烧写。 ?再次强调:这些工作都是围绕那三个文件展开的(实际是4个文件) ?Linux或Android系统的编译和烧写都是依赖于这个开发环境的。

ZigBee的工作原理

ZigBee 的工作原理_ZigBee 组网技术ZigBee 是一种高可靠的无线数传网络,类似于CDMA和GSM网络。ZigBee 数传模块类 似于移动网络基站。通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。Zigbee 技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全的数据传输等。其中低功耗是Zigbee 技术最重要的特点。由于Zigbee 的传输速率相对较低发射功率较小,使得Zig bee 设备很省电,这是Zigbee 技术能够广泛应用的基石。 ZigBee 协议适应无线传感器的低花费、低能量、高容错性等的要求。Zigbee 的基础是IEEE 802.15.4 。但IEEE仅处理低级MAC层和物理层协议,因此Zigbee 联盟扩展了IEEE,对其网络层协议和API 进行了标准化。Zigbee 是一种新兴的短距离、低速率的无线网络技术。主要用于近距离无线连接。它有自己的协议标准,在数千个微小的传感器之间相互协调实现通信。 ZigBee 组网概述 组建一个完整的zigbee 网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网。 ZigBee 网络初始化预备 Zigbee 网络的建立是由网络协调器发起的,任何一个zigbee 节点要组建一个网络必须要满足以下两点要求: (1)节点是FFD节点,具备zigbee 协调器的能力; (2)节点还没有与其他网络连接,当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个zigbee 网络中有且只有一个网络协调器。 FFD:Full Func TIon Device 全功能节点 RFD:Reduced Func TI onDevice 半功能节点

ZigBee学习Z-stack外部中断

ZigBee学习Z-stack外部中断 硬件抽象层:就是对硬件层做好了各种初始化,用户不用考虑硬件的初始配置,直接使用即可。 hal_driver.c文件: HalDriverInit():用户可在此函数中添加硬件的初始化操作,如定时器、ADC、DMA、FLASH、AES、LCD、LED、UART、KEY、SPI、HID等(还有用于配置外部中断,类似按键的中断方式查询键值) Hal_ProcessEvent(): 处理HAL发生的事件、如:KEY、LED、电源管理等,用户可以在此添加处理自己的HAL事件,此事件ID必须是唯一的,定义在hal_driver.h中。如:HAL_KEY_EVENT(按键轮询与抖动)、HAL_LED_BLINK_EVENT(LED闪烁)、HAL_SLEEP_TIMER_EVENT(Power saving). Hal_ProcessPoll(): 被osal_start_system()调用,用于HAL_Timer和HAL_UART的事件轮询,关于系统编译连接,只要没有定义相关的宏定义,相应的驱动就不会编译进去,减少代码占用的空间。有以下的宏定义: 具体操作是: Options->C/C++ Options->Preprocessor->Defined Symbols->enter:HAL_XXX=TRUE; when XXX is ADC,UART,LED,LCD,KEY 不编译进代码,只要将其定义成FALSE 如何定做适合自己的HAL处理的程序 ①修改原文件的方式: 1、HAL\include下的头文件应该保留一样。 2、在HAL\Target\hal_xxx.c修改相应的驱动函数,hal_adc.c, hal_key.c, hal_lcd.c, hal_led.c, hal_timer.c, and hal_uart.c 3、硬件驱动配置可以被修改在hal_board_cfg.h ②增加用户自己的目标驱动 1、增加新的头文件,在hal\include 2、在hal\Target\hal_xxx.c添加自己运行函数,xxx为自己的目标 3、如果GPIO有冲突或者没用到,应该保证驱动不被编译,否则后果严重。 4、检查GPIO有没有正确设置或冲突,通过hal_board_cfg.h 5、不想被编译,或者是老的文件,没用到的文件,可以通过选择options->"Exclude form build" 外部中断程序中断处理函数的定义:可以查看 hal\Target\hal_XXX.c\hal_mcu.h HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNCTION (prototype, vector) { /* Do something when this interrupt happens!!! */ }

ZIGBEE无线定位技术

ZIGBEE无线定位技术 大多数无线传感器网络都要求具备一种确定网络节点位置的方法。因此在设备安装期间,需要弄清楚哪些节点相互之间直接进行数据交换,或者确定哪些节点直接与中央数据采集点进行数据交换。 当通过基于软件的计算方法来确定网络节点位置时,就需要考虑到市场化解决方案(market solution)。这些具体的计算方法是:节点首先读取计算节点位置的参数,然后将相关信息传送到中央数据采集点,对节点位置进行计算,最后,再将节点位置的相关参数传回至该节点。这就是典型的数据密集型计算,并且需要配置一台PC 或高性能的MCU。 这种计算节点位置的方法之所以只适用于小型的网络和有 限的节点数量,是因为进行相关计算所需的流量将随着节点数量的增加而呈指数级速度增加。因此,高流量负载加上带宽的不足限制了这种方法在电池供电网络中的应用。 针对上述问题,CC2431 采用了一种分布式定位计算方法。这种计算方法根据从距离最近的参考节点(其位置是已知的)接收到的信息,对节点进行本地计算,确定相关节点的位置。因此,网络流量的多少将由待测节点范围中节点的数量决定。另外,由于网络流量会随着待测节点数量的增加而成比例递增,因此,C C2431 还允许同一网络中存在大量的待测节点。 本文所提供的结果是根据对ZigBee 网络的测量得出的,然

而,这些测量结果同样适用于基于IEEE 802.15.4协议构建的更简单的网络。 定位引擎技术 定位引擎根据无线网络中临近射频的接收信号强度指示(R SSI),计算所需定位的位置。在不同的环境中,两个射频之间的RSSI 信号会发生明显的变化。例如,当两个射频之间有一位行人时,接收信号将会降低30dBm。为了补偿这种差异,以及出于对定位结果精确性的考虑,定位引擎将根据来自多达16 个射频的RSSI 值,进行相关的定位计算。其依据的理论是:当采用大量的节点后,RSSI 的变化最终将达到平均值。 在RF 网络中,具有已知位置的定位引擎射频称为参考节点,而需要计算定位位置的节点称为待测节点。 要求在参考节点和待测节点之间传输的唯一信息就是参考节点的X 和Y 坐标。定位引擎根据接收到的X 和Y 坐标,并结合根据参考节点的数据测量得出的RSSI 值,计算定位位置。 将定位技术纳入网络协议 一些采用定位引擎的应用可能要求放置若干个参考节点,以作为基础设施设置不可或缺的一部分。ZigBee 技术能够实现对家庭、办公以及工业等应用的无线控制。随着ZigBee 设备在楼宇基础设施中的安装数量不断增多,ZigBee 将会在家庭和办公自动化方面拥有更为广阔的应用前景。

zigbee学习笔记讲解

关于ZIGBEE技术 Zigbee的由来 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。 Zigbee是什么 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。 不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。 每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。 Zigbee技术的应用领域 Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。另外它还可以对局部区域内移动目标例如城市中的车辆进行定位. 通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多; 2.要求传输的数据量不大,而要求设备成本低; 3.要求数据传输可性高,安全性高; 4.设备体积很小,不便放置较大的充电电池或者电源模块; 5.电池供电; 6.地形复杂,监测点多,需要较大的网络覆盖; 7.现有移动网络的覆盖盲区; 8.使用现存移动网络进行低数据量传输的遥测遥控系统。 9.使用GPS效果差,或成本太高的局部区域移动目标的定位应用。 Zigbee 技术的特点 省电:两节五号电池支持长达6个月到2年左右的使用时间。 可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用

2016年度秋物联网技术基础学习知识本科试卷

2016年秋|物联网技术基础|本科(试卷) 1. 以下关于EPC-96I型编码标准的描述中错误的是( )。 (A) 用来标识是哪一类产品的对象分类字段长度为24位 (B) 用来标识产品是由哪个厂家生产的域名管理字段长度为28位 (C) 用来标识每一件产品的序列号字段长度为36位 (D) 用来标识编码标准版本的版本号字段长度为6位 分值:2 2. 以下关于入侵检测系统特征的描述中,错误的是( )。 (A) 监测和发现可能存在的攻击行为,采取相应的防护手段 (B) 重点评估DBMS系统和数据的完整性 (C) 检查系统的配置和漏洞 (D) 对异常行为的统计分析,识别攻击类型,并向网络管理人员报警 分值:2 3. 基于物联网的智能安防系统不具有的特点是( )。 (A) 覆盖范围更

小 (B) 更实时 (C) 更全面 (D) 更智慧 分值:2 4. 以下关于ADSL接入技术的描述中错误的是( )。 (A) 从互联网下载文档的信道称为上行信道 (B) 数字用户线是指从用户家庭、办公室到本地电话交换中心的一对电话线 (C) 家庭用户需要的下行信道与上行信道的带宽是不对称的 ADSL技术可以最大限度地保护电信运营商在组建电话交换网方面的投 (D) 资 分值:2 5. 以下关于数据增长特点的描述中错误的是( )。 新的数据种类与新的数据来源在不断增 (A) 长

(B) 同一类数据的数据量在快速增长 (C) 数据量单位的增长在加快 (D) 数据增长的速度在加快 分值:2 6. 基于物联网技术的环境监测网络不具有的特点是( )。 监测更加精 (A) 细 监测更加全 (B) 面 监测数据更 (C) 少 监测更加实 (D) 时 分值:2 7. 下面关于智能医疗环境中的医院信息系统的描述中错误的是( )。

ZigBee学习电子笔记

第一讲

第二讲 https://www.sodocs.net/doc/3013821670.html,2530通用I/O口有21个:P0/P1/口个8个;P2口5个,其中,P1_0、P_1 有20mA的驱动能力,其余只有4mA 2.IO口配置相关的寄存器(3个) PxSEL: P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。

IO的两种工作模式: 1.普通IO口模式:点灯、监测按键输入 2.片上外设模式:作为串口或者其他非普通IO口 PxDIR:P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出

PxINP:P0INP/P1INP/P2INP: 输入情况下,注意P2INP寄存器后3位的用法(见下图):

输出示例(以P0_0为例): 1)设置P0_0为普通IO口工作模式,非片上外设:P0SEL=0xFE(&11111110) 2)让P0_0作为输出用,非输入监测用:P0DIR=0x01(+ 00000001) 3)输出(如P0_0=0或P0_0=1等)。 输入示例(让P1_2作为输入): 1)设置P1_2为普通IO口工作模式,非片上外设:P1SEL=0xfd(11111011) 2)让P1_2作为输入检测用,非输出用P1DIR=0xfd(11111011) 3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式) 4)检测用: If (P1_2= =0 or 1) { } Else { } 总结:由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。 自己编程示例:

CC2530开发环境搭建与快速入门攻略

OHY研修笔记之“物联网应用技术”01 CC2530单片机开发技术开发环境搭建与快速入门攻略 广东职业技术学院 2017年4月15日

【引言】 在本次笔记中讲述2部分内容: 第一部分:CC2530的开发环境搭建。 第二部分:建立第一个工程-LED跑马灯程序。 通过这两部分的学习,完成掌握了CC2530单片机的开发流程,通过一个LED 跑马灯程序,快速掌握IAR开发环境下CC2530单片机的工程创建、代码编写、程序编译、仿真调试和代码烧写,达到快速入门的目的。 第一部分:CC2530的开发环境搭建 由于CC2530使用的是8051内核,需要选用IAR的IAR Embedded Workbench for 8051版本,作为开发环境。这里需要安装四个内容:IAR软件、CC Debugger 仿真器驱动、烧写软件SmartRF Flash Programmer和Z-Stack协议栈。 一、IAR开发环境的安装 1、打开“IAR-EW8051-8101”文件中的“ew8051”文件夹,运行setup.exe程序,安装8.10.1版本的IAR软件,点击下一步即可License输入界面。 2、因为在要输入License的对话框中要输入序列号,先运行“IAR-EW8051-8101”文件中keygen.exe软件,生成相关的信息。

3、先输入License number,然后下一步。 4、再输入对应的License Key,点击下一步。 5、选择Custom安装。

6、选择所需要安装的组件。 7、如有需要可以更改安装的路径。 8、然后一直下一步到Install,开始安装

ZigBee的工作原理

ZigBee得工作原理_ZigBee组网技术ZigBee就是一种高可靠得无线数传网络,类似于CDMA与GSM网络。ZigBee数传模块类似于移动网络基站。通讯距离从标准得75m到几百米、几公里,并且支持无限扩展。Zig bee技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全得数据传输等。其中低功耗就是Zigbee技术最重要得特点。由于 Zigbee得传输速率相对较低发射功率较小,使得Zig bee设备很省电,这就是 Zigbee技术能够广泛应用得基石。 ZigBee协议适应无线传感器得低花费、低能量、高容错性等得要求。Zigbee 得基础就是IEEE 802.15。4、但IEEE仅处理低级MAC层与物理层协议,因此Zigbee联盟扩展了IEEE,对其网络层协议与API进行了标准化。Zigbee就是一种新兴得短距离、低速率得无线网络技术。主要用于近距离无线连接。它有自己得协议标准,在数千个微小得传感器之间相互协调实现通信。 ZigBee组网概述 组建一个完整得zigbee网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网与通过已有父节点入网。 ZigBee网络初始化预备 Zigbee网络得建立就是由网络协调器发起得,任何一个zigbee节点要组建一个网络必须要满足以下两点要求: (1)节点就是FFD节点,具备zigbee协调器得能力; (2)节点还没有与其她网络连接,当节点已经与其她网络连接时,此节点只能作为该网络得子节点,因为一个zigbee网络中有且只有一个网络协调器。 FFD:Full Func TI on Device 全功能节点 RFD:Reduced FuncTI onDevice半功能节点

zigbee学习笔记3-通信例程之GenericApp

zigbee学习笔记3-通信例程之GenericApp 2011-09-22 11:02 刚入手的朋友,对Z-Stack 非常迷糊的时期,如果能够跑通几个例子、看几个演示,那么可以大大提高学习兴趣;另外如果知道某个例子的大致功能及实现,那么在去看具体实现过程目的性就非常明确。 首先来看看TI 究竟有哪些例子:可以看出其例子是非常丰富的。 GenericApp(设备互相绑定传送信息-hellow world),Location(定位),SampleApp(设备发送和接收LED灯信息),SimpleApp(温度和灯开关,和智能家居结合使用的,have Profile),HomeAutomation(智能家居的应用,have Profile),SerialApp(串行传输的应用),Transmit(发送应用),ZLOAD(协议文件夹中只有Source)。这样看来还是不少的。其中SampleApp 例子已经在前面的学习中有所涉及,可以说前面的所有学习都是基于这个例子的,所以这里就不测试它了。Location 是定位的测试例子,这里我的硬件是不够的,所以也不做测试。其他我都做点测试,能成功的就成功,不能成功的就失败,这个我也没办法。 1、GenericApp 这个实验是两个模块相互绑定后可以对传数据,模块绑定之后,两个模块之间相互传输字符串"Hello World"。 实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示该节点为协调者同时显示网络ID号。然后打开一个终端节点或路由器的电源,此时节点会自动加入网络。加入网络成功后,节点会显示自己的节点类型、网络地址和父节点的网络地址。 节点加入网络成功后,首先把主机模块的摇杆往右拔一下,然后把要绑定模块的RIGHT按一下,如果两边的LED4 都熄灭或是点亮后马上熄灭,表示绑定成功。绑定成功后,两个节点就开始相互定时发送数据,并在对方的LCD屏上显示出来,发送的数据为"Hello World"。此时如果把相互绑定模块中的left 按一下,可以发送Match Description Request命令,对方则显示Match Description Request信息。(以上无线龙手册提供) 2 关键函数分析: 我开始没搞清楚,功能是个啥大约浏览了下,这个例子似乎还与设备的所以还决定看看程序来判断这个例子的功能。绑定有关系,在key control 描述中发现 //***************** Key control**************************// SW2: initiates end device binding //--初始化中断设备绑定 SW4: initiates a match description request //--初始化一个匹配描述请求 2.1 按建处理程序中发现: if ( keys & HAL_KEY_SW_2 ) { HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); // Initiate an End Device Bind Request for the mandatory endpoint dstAddr.addrMode = Addr16Bit; dstAddr.addr.shortAddr = 0x0000; // Coordinator ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(), GenericApp_epDesc.endPoint, GENERICAPP_PROFID, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE ); } 很明显这里按键2(右键)是发送绑定请求的命令。 if ( keys & HAL_KEY_SW_4 ) { HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); // Initiate a Match Deion Request (Service Discovery) dstAddr.addrMode = AddrBroadcast; dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR; ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR, GENERICAPP_PROFID,

一文读懂zigbee技术的协议原理

一文读懂zigbee技术的协议原理 一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载TI公司为cc2530写的协议栈代码,毕竟,我们作为初学者,应该先不要去深究协议栈是怎么用代码编写的,毕竟zigbee已经相当成熟了,我们应该先学会使用zigbee协议栈进行通信,并能应用于实际项目中,比如说智能家具,不知道大家是不是有同感,所以下面我就先给大家介绍一下zigbee通信的原理以及体系架构。 二.ZStack 体系架构 ZStack 的体系结构由称为层的各模块组成。每一层为其上层提供特定的服务:即由数据服务实体提供数据传输服务;管理实体提供所有的其他管理服务。每个服务实体通过相应的服务接入点(SAP) 为其上层提供一个接口,每个服务接入点通过服务原语来完成所对应的功能。 ZStack 根据IEEE 802.15.4 和ZigBee 标准分为物理层,介质接入控制层,网络层,应用层。物理层提供了基础的服务,数据传输和接收,网络层提供了各个节点连入的服务,是zigbee网络通信的关键,应用层是我们关注的重点,提供了应用的框架和ZDO。大家如果想了解体系结构的具体内容,可以自己去看说明文档,下面我给大家介绍一下zigbee 工作原理。 ZStack 采用操作系统的思想来构建,采用事件轮循机制,而且有一个专门的Timer2 来负责定时。从CC2530 工作开始,Timer2 周而复始地计时,有采集、发送、接收、显示…等任务要执行时就执行。当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。 整个ZStack 的主要工作流程,如图所示,大致分为以下6 步:(1) 关闭所有中断;(2) 芯

粤嵌开发板电子相册嵌入式课程设计

课程设计说明书题目:电子相册 课程名称:嵌入式系统 学院: 专业:学号: 姓名: 指导教师: 完成日期: 2017年6月10日

目录 1. 设计的工程背景 任务阐述 设计任务: 制作一个电子相册,要求每个人一种特效,结果显示在ARM开发板上。开发平台为LINUX。 电子相册简介: 以数字照片的存储和浏览为主要功能,具有内置数据存储器、USB等卡接口、强大的文件管理等特征。 背景: 在市场需求上,随着数码相机的普及,作为一种以数字照片的保存、回放和浏

览为核心的功能产品迎合了消费者需求,嵌入式linux的电子相册比一般电子相册更具优越性和实用性。目前市场,目前主流电子相册软件普遍体积庞大、占用内存多、硬件要求高。所以开发一个运行速度快,占用空间小,对硬件要求较低的功能实用的嵌入式Linux电子相册很有意义。 Linux开发优势: Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux 是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。 Linux是我国软件的国策,尤其是在IT行业,庞大的使用群体、开放的体系和丰富资源使得Linux将是日后普及和推广的重点。Linux的优越性日益凸显Linux将是我们学习和工作实用的首选。目前,很多网络技术、服务器、网络设备都是基于Linux操作系统,并且在不少时尚的手机、PDA、媒体播放器等消费类电子产品中已经广泛使用Linux作为操作系统。 在Linux软件国策的指引下,Linux已经得到很大的普及。很多学生已经自发地通过书籍、互联网等资源学习Linux。综上所述,提高技术水平就是以市场流行需求为导向进行研发,特别是像嵌入式种工程类的技术。在条件允许的情况下,我们甚至应该时刻与国际接轨,掌握当前最领先的技术。 任务分析 设计的目标是制作5种电子相册特效,每个人负责制作一种。在制作前期,首先要查阅资料,了解电子相册的背景和制作原理,对其形成大致的设计方案。然后,根据资料安装linux和虚拟机软件,搭建开发环境,安装交叉编译。最后,根据自己设计的方案进行尝试,不断修改错误,直到达到目标。 课题项目管理计划进度表

相关主题