zigbee学习笔记3-通信例程之GenericApp
- 格式:docx
- 大小:102.80 KB
- 文档页数:8
主要解决的问题如何使用不同的命令号发送不同长度的的数据第一部分一些概念如图所示是一个节点设备上的端口号(endpoint)它是一个8位的字段,描述一个射频端所支持的不同应用。
端口0x00:用于寻址设备配置文件,这是每个ZigBee设备必须使用的端口;端点0xff:用于寻址所有活动端口;端口0xf1~0xfe:保留;端口0x01~0xf0:共支持240个应用,即一个物理信道最多支持240个虚拟链路。
图中还用另一个概念簇簇(cluster)多个属性的汇集形成了簇,簇是属性的集合,每个簇也拥有一个唯一的ID。
譬如,FS_ZStack\SimpleSwitch.cconst cId_t zb_OutCmdList[NUM_OUT_CMD_SWITCH]= //输出簇列表{TOGGLE_LIGHT_CMD_ID //簇ID, 1};FS_Zstack\SimpleController.cconst cId_tzb_InCmdList[NUM_IN_CMD_CONTROLLER] = //输入簇列表{TOGGLE_LIGHT_CMD_ID //簇ID, 1};cId_t=uint16,端口的描述第一步,定义一个结构体用来描述端口endPointDesc_t GenericApp_epDesc; //结构体类型变量第二步初始化端口参数要完整的描述一个端口,分为两部分(1)endPointDesc_t端口描述(2)简单端口描述SimpleDescriptionFormat_t其实2是包含在1里面的只是由于2比较多就单独列出来了。
下面是2的具体内容探明数据包内容1发送出去的数据是什么样子的第一步数据发送使用的是协议栈的发送函数内容包括了,目的地址目的节点上的那个端口簇里面的命令号要发送的数据长度要发送的数据地址发送的数据序列号第二步数据被接收后被解析成什么样子可以通过一个结构体看明白数据被接受过来以后到底是什么样子事件头很重要,它用来判断消息类型簇里面的命令号存储端口号链路质量数据具体位置很重要上面说到的两个很重要的成员在应用层程序里都有体现本想用两个命令号来区分不同的消息,但是好像不行!未完待续!第二部分消息队列从上面的讲解中我们了解了发送的无线数据、接收到的无线数据的样子。
zigbee基本概念及协议术语1. 逻辑设备类型协调器(coordinator),路由器(router),终端设备(end-device)•ZigBee 协调者—coord为协调者节点*–每各ZigBee网络必须有一个.–初始化网络信息.协调器是一种特殊的路由器(待确认)•ZigBee 路由器—router为路由节点*–路由信息•ZigBee 终端节点—rfd为终端节点*–没有路由功能–低价格2 . 2.4GHz射频信道分为16个独立信道。
3. 绑定应用设备之间信息流的控制机制。
有直接绑定(OTA)、间接绑定、直接绑定(通过串口)4. 配置文件profile 应用程序框架5. 端点endpoint 每个ZigBee设备支持多达240个端点6. NWK寻址地址类型:ZigBee设备有一个64位IEEE长地址(MAC地址)通常用一个16位短地址表识网络地址分配由协调器完成相关参数:5 max_depth 网络的最大深度6 Max_children 路由器或协调器节点连接子节点最大个数20 Max_router 路由器或协调器处理的具有路由能力的子节点最大个数它是max_children的子集数据包传送单点unicast 多点multicast 广播broadcast路由:经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的节点。
F8wconfig.cfg配置路由看了下面就不用纠结了。
配置文件(profile):Zigbee协议的配置文件是对逻辑组件及其相关接口的描述,是面向某个应用类别的公约、准则.通常没有程序代码与配置文件相关联.属性(attribute):设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性.每个属性可得到唯一的ID值.簇(cluster):多个属性的汇集形成了簇,每个簇也拥有一个唯一的ID.虽然个体之间传输的通常是属性信息,但所谓的逻辑组件的接口指的却是簇一级的操作,而非属性一级.终端(endpoint):每个支持一个或多个簇的代码功能块称为终端.不同的设备通过它们的终端及所支持的簇来进行通信.Cluster: is a container for one or more attributes. (一个或更多属性的集合)Attribute: a data entity which represents a physical quantity or state.(反映物理特性或状态的一个数据实体)Cluster是逻辑设备之间的事务关系Cluster定性Attribute则是某种事务关系的具体特例Attribute定量Endpoint是一个逻辑设备(个人理解为入口地址)。
1、ZigBee协议栈:ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。
协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来遵循和使用这个协议的,进而实现无线数据收发。
2、ZigBee无线网络协议层的架构:ZigBee协议分为两部分---IEEE 802.15.4和ZigBee,IEEE 802.15.4定义了PHY (物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。
ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用---学习Zigbee就是熟悉API和学习如何使用对应函数。
3、用户实现简单的无线数据通信的一般步骤:---组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。
---发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。
---接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。
4、Z-STACK协议栈工作原理:Z-stack可以看做是一个小型的操作系统(本质是大型的程序),用于实现底层和网络层的内容,Z-stack将复杂部分屏蔽掉。
用户通过API函数就可以轻易用ZigBee。
5、协调器、路由器、终端:Router----路由器Coodinator----协调器EndDevice----终端设备(1)协调器:(coordinator)每个zigbee网络只允许有一个zigbee的协调器,协调器首先选择一个信道和网络标识(PAN ID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。
关于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.使用现存移动网络进行低数据量传输的遥测遥控系统。
Zigbee学习知识重点第一章Zigbee概述1、Zigbee是一种新兴的短距离、低速率无线网络技术,主要用于近距离无线连接。
2、Zigbee的特点是功耗低、成本低、时延短、网络容量大、可靠安全。
3、常见的Zigbee芯片有CC243X系列、MC1322X系列和CC253X系列。
4、常见的Zigbee协议栈有非开源(msstatePAN)协议栈、开源(freakz)协议栈和半开源(Zstack)协议栈。
5、Zigbee软件开发平台包括IAR、Zigbee Sniffer、物理地址修改软件以及其它辅助软件。
6、Zigbee硬件开发平台采用Altium Designer进行设计。
7、简述Zigbee的定义。
答:Zigbee是一种近距离、低复杂度、低功耗、低成本的双向无线通讯技术。
主要用于距离短、功耗低且传输速率不高的各种电子设备之间,进行数据传输(包括典型的周期性数据、间歇性数据和低反应时间数据)的应用。
(Zigbee的基础是IEEE802.15.4,但是IEEE802.15.4仅处理低级的MAC(媒体接入控制协议)层和物理层协议,Zigbee联盟对网络层协议和应用层进行了标准化。
)8、简述无线传感器网络与Zigbee之间的关系。
答:从协议标准来讲:目前大多数无线传感器网络的物理层和MAC层都采用IEEE802.15.4协议标准。
IEEE802.15.4描述了低速率无线个人局域网的物理层和媒体接入控制协议(MAC 层),属于IEEE802.15.4工作组。
而Zigbee技术是基于IEEE802.15.4标准的无线技术。
从应用上来讲:Zigbee适用于通信数据量不大,数据传输速率相对较低,成本较低的便携或移动设备。
这些设备只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另外一个传感器,并能实现传感器之间的组网,实现无线传感器网络分布式、自组织和低功耗的特点。
9、Zigbee技术特点:低功耗、低成本、大容量、可靠、时延短、灵活的网络拓扑结构。
常用控制寄存器相关技巧写1操作数据发送AF-DataRequest函数:afStatus_t AF_DataRequest( afAddrType_t * dstAddr,endPointDesc_t *srcEP,uint16 cID,uint16 le n, uint8 *buf,uint8 *transID,uint8 options,uint8 radius)MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID )解释: (afIncomingMSGPacket_t *)是强制类型转换,SampleApp_TaskID包含的事件ID交给osal_msg_receive函数从消息队列上接受消息,并转换成afIncomingMSGPacket_t结构体类型并赋给MSGpkt遇到问题:1、电脑无法识别板子解决方法:电池组供电,单纯靠USB供电不足2、安装完USB转串口驱动后依然无法识别串口解决方法:去掉仿真器直接将板子与PC相连3、IAR编译问题解决办法:4、功放烧毁原因:上电顺序,先上电再装天线会烧毁功放5、自己定义头文件在IAR中编译时出现“Fatal Error[Pe1696]: cannot open source file”解决方法:在IAR提供的头文件中缺少你定义的,可以使用#include "E:\毕业设计\程序\5883L\5883L test\HMC5883.h",用具体的地址来解决这个问题6、IAR编译时出现“Error[Pe029]: expected an expression”解决方法:定义问题,检查定义语句,#defien定义是不需要加”;”,但是typedef定义是必须要加”;”7、在两个.C文件中使用同一个变量解决方法:方案1:在一个文件中定义全局变量“类型 tmp;”,注意是全局变量。
z-stack代码分析--GenericApp实例//设备绑定并传送信息(hellow world)//1、终端绑定:按Joystick右键,发起绑定请求,等待其他节点应答;如其他节点也按了Joystick右键,同样发出了绑定请求,则本节点收到一个End_Device_Bind_rsp的信息,表示绑定成功并点亮HAL_LED_4。
//2、匹配描述:按Joystick左键,发起匹配描述请求,等待其他节点应答;//终端绑定和匹配描述的区别://匹配描述绑定:Match方式。
即:一个节点可以通过调用afSetMatch函数允许或禁止本节点被Match(协议栈默认允许,可以手工关闭),然后另外一个节点在一定的时间内发起ZDP_MatchDescReq请求,允许被Match的节点会响应这个Req,发起的节点在接收到RSP的时候就会自动处理绑定。
特点:不需要别人帮忙,只要在网络中的节点互相之间就可以实现,但是前提是他们一定要Match,即一方的outcluster至少有一个是另外一方的incluster,这种方式在很多时候用起来比较方便。
注意:如果同时有多个节点(一个节点上的多个端点也一样)处于允许Match状态,那么req的这个节点可能会收到一大票满足Match条件的rsp,那么你发起req的节点要在这个处理上多下功夫了。
//终端绑定:两个节点分别通过按键机制调用ZDP_EndDeviceBindReq函数。
即:在一定时间内两个节点都通过按键(其他方式也可以)触发调用这个函数。
特点:这个函数的调用将会向协调器发出绑定请求,如果在16S(协议栈默认)时间内两个节点都执行了这个函数,协调器就会帮忙实现绑定。
绑定表应该是存在OutCluster那边,即这两个节点应该是一个输出控制命令,一个接收控制命令,绑定表存在输出控制命令这边。
注意:这种方式一定需要协调器,否则不行;但是一旦绑定成功,不再需要协调器,协调器只是帮忙绑定的一个第三方;虽然叫做EndDeviceBind,但是不局限于End Device,路由器也一样用;重复上述操作会解绑定,也就是说这是一个乒乓方式。
要试验的:1串口查看数据2用自己的温度传感器看3串口通信,该代码,发送自己想发的数据。
如果修改数据长度看路由代码。
修改路由代码弄串口这边原理。
两头拼。
要解决的问题:1温度采集代码2zigbee传输代码3串口传输数据代码4endpoint与任务的关系。
与按键串口服务关系。
已经解决的问题:1开发的流程2如何添加新任务3osal工作原理,任务调度机制。
难点:几个关键回调函数的理解关键点(总体规划):1、数据采集,这部分的关键是I-WIRE协议的理解。
传感器与51的通信问题。
自己必须先把这部分搞定,现在要解决这个问题,即在TI提供的协议栈的基础上开发自己的应用。
要弄懂温度,湿度,PH值传感器的工作原理,一般采用I-WIRE总线的协议。
2、将数据传输到协调器(控制节点),这部分关键是zigbee通信协议,要充分利用TI的Z-STACK 协议栈来进行二次开发。
主要关注数据的收发模块,数据的格式、特点。
3、数据从协调器传到PC,这部分关键是串口通信协议。
正确的将数据传到上位机。
4、PC控制显示界面,这部分关键是找到关键的API,然后取出自己想要的数据显示。
如果需要存储数据,要操纵数据库,选择数据库。
解决这几个问题这个项目就算完成了。
现在猜想:一、开发一个新的应用应该做什么呢?1获取模板标识符,簇标识符,设备标识符的相关信息,我要进一步了解这两个关键的概念。
2在1基础上我要能注册application,taskID,endpoint,以建立自己应用与操作系统交互。
这是一个关键的点。
二、必须弄懂传感器采集的原理,代码。
三、必须弄懂串口的原理,代码。
关键的概念1、PAN标识符,PAN ID2、模板标识符,profileID3、簇标识符,clusterID 8bit4、节点,ieee地址(扩展地址)网络地址(短地址)64bit/16bit5、端点,endpoint 8bit6、设备标识符,Device Description 16bit7、应用任务ID,taskID8、属性Attribute 16bit9、Taskevents envents 16bit申请到模板标识符后,可以为模板定义设备描述符、簇标识符、服务类型(KVP或MSG)属性(Attribute)。
1.基础知识 (1)1.1IEEE地址 (1)1.2簇 (2)1.3 Profile ID (4)1.4 网络地址与端点号、节点 (4)1.5 PANID (5)1.6 zigbee设备 (5)2.绑定机制 (7)2.1描述符绑定 (7)2.2设备绑定 (23)1.基础知识1.1IEEE地址IEEE地址是64位,在设备进入网络之前就分配好了的,应该在全球是唯一的,而网络地址是在网络建立后,设备加入网络时,它的父节点给它分配的,在设备通信时,首先由ieee地址找到设备的网络地址,然后根据网络地址实现设备之间的通信,这样可以减少帧头长度,多传有效数据通俗的说IEEE地址相当于你的手机号(11位的那个),短地址就相当于你们公司的小号(3、4)位,一个公司的互打电话就用小号噻。
假设你的手机号138xxxxx666,这个是唯一的,但你的小号,假设是666,在你的公司网中是唯一的,但是在另一个网中,可能别人的小号也是666。
1.2簇簇就是相当于端点房间里面的人,是接收最终的目标。
这东西是2个字节编号,在射频发送的时候,必须要指定接收模块的镞,发送模块不需要指定。
首先每一个端点可以看成是一个1个字节数字编号的开有一扇门的房间,数据最终的目标是进入到无线数据包指定的目标端点房间,而取无线数据这个相关的代码在任务事件处理函数里,TI协议栈有那么多的任务事件处理函数,所以必须要指定在哪个任务事件处理函数来取这个无线数据包里面的有用数据。
端点就相当于一个房间的门牌号!!!SimonApp_epDesc.endPoint = 10;//SimonApp_ENDPOINT; 此端点编号为10SimonApp_epDesc.task_id = &SimonApp_TaskID; 和我们应用层任务挂钩完成了簇信息表的构建,因为簇信息封装在SimonApp_SimpleDesc里面,这里面却只是起到一个信息表的作用!方便数据到来的时候查询相关信息表!const cId_t SimonApp_ClusterList[SimonApp_MAX_CLUSTERS] ={SimonApp_CLUSTERID};const SimpleDescriptionFormat_t SimonApp_SimpleDesc = {SimonApp_ENDPOINT, // int Endpoint;SimonApp_PROFID, // uint16 AppProfId[2];SimonApp_DEVICEID, // uint16 AppDeviceId[2];SimonApp_DEVICE_VERSION, // int AppDevVer:4;SimonApp_FLAGS, // int AppFlags:4;SimonApp_MAX_CLUSTERS, // byte AppNumInClusters;(cId_t *)SimonApp_ClusterList, // byte *pAppInClusterList;SimonApp_MAX_CLUSTERS, // byte AppNumInClusters;(cId_t *)SimonApp_ClusterList // byte *pAppInClusterList;};接收到数据以后,判断是属于哪一个端点、属于哪一个簇1.3 Profile ID这个是由Zigbee组织来分配的应用ID号,比如无线开关用0x0001,智能电表用ox0002,万用遥控器用0x0003等等。
zigbee学习笔记3-通信例程之GenericApp2011-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 endpointdstAddr.addrMode = Addr16Bit;dstAddr.addr.shortAddr = 0x0000; // CoordinatorZDP_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,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,FALSE );}显然按键4(左)是初始化一个匹配描述符请求,也就是发现服务,或者叫自动寻求匹配设备。
2.2在发送数据发现:void GenericApp_SendTheMessage( void ){char theMessageData[] = "Hello World";if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,(byte)osal_strlen( theMessageData ) + 1,(byte *)&theMessageData, &GenericApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){// Successfully requested to be sent.}else{// Error occurred in request to send.}}这里发送了"Hello World"字符串。
如果更改这里,是可以在接收端看到变化的。
这里调用了AF_DataRequest 函数,该函数为AF层请求发送数据函数。
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID,uint8 options, uint8 radius )我想最关心的就是几个参数:1、目标地址:&GenericApp_DstAddrtypedef struct{union{uint16 shortAddr;} addr;afAddrMode_t addrMode;byte endPoint;} afAddrType_t;//--里面定义了目标地址模式、地址、EP三个参数2、端点描述符:&GenericApp_epDesctypedef struct{byte endPoint;byte *task_id; // Pointer to location of the Application task ID.SimpleDescriptionFormat_t *simpleDesc;afNetworkLatencyReq_t latencyReq;} endPointDesc_t;3、串ID#define GENERICAPP_CLUSTERID 14、发送数据数据长度:(byte)osal_strlen( theMessageData ) + 1,数据载荷:(byte *)&theMessageData,5、发送ID:&GenericApp_TransID6、选项:AF_DISCV_ROUTE#define AF_DISCV_ROUTE 0x207、发送半径:AF_DEFAULT_RADIUS#define AF_DEFAULT_RADIUS DEF_NWK_RADIUS网络路由深度,初始化为:#define DEF_NWK_RADIUS 102.3 接收处理函数发现:void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) ///接收处理函数{switch ( pkt->clusterId ){case GENERICAPP_CLUSTERID:// "the" message#if defined( LCD_SUPPORTED )// HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );Print8(HAL_LCD_LINE_2,10," ", 1);Print8(HAL_LCD_LINE_3,10," ", 1);Print8(HAL_LCD_LINE_2,10,(INT8U*)pkt->cmd.Data, 1);Print8(HAL_LCD_LINE_3,16, "WXL Welcome", 1);break;#endif}}接收数据处理函数里居然要通过液晶显示,本人这里的液晶暂时没有移植过来,因为暂时还不具备那个实力,怪不得看不到发送数据的状况!这里本人就自作聪明的把以前SampleApp 例子里面的一句话加过来了:void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) //--修改的哦{switch ( pkt->clusterId ){case GENERICAPP_CLUSTERID:// "the" messageHalLedBlink( HAL_LED_4, 4, 50, (500) );#if defined( LCD_SUPPORTED )HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );#elif defined( WIN32 )WPRINTSTR( pkt->cmd.Data );#endifbreak;}}麽想到啊,这么一加居然就有反应了!其实这里很简单的了,就是接收到数据后闪烁4 下灯,间隔0.5S。