学习zigbee入门-9

来源:互联网 发布:透视手机照相机软件 编辑:程序博客网 时间:2024/06/09 23:02

【转】学习zigbee入门-9

SimpleApp 例子解读 1 :
1、实验目的
   --设置这些设备自动的进入网络    -- 创建从每一个开关到一个或多个灯的绑定    --从开关设备发送一个改变灯状态的命令    --为某个开关到不同的灯从新指派绑定   -- 之后增加新的灯或开关到该网络

2、实验原理 
关于详细的程序清单见 SAPI.C 文件。  

初始化    ZB 系统复位(zb_SystemReset)        ZB 启动请求(zb_StartRequest)   

   配   置      ZB 读配置(zb_ReadConfiguration)    ZB 写配置(zb_ WriteConfiguration)   

                  ZB 获得设备信息(zb_GetDeviceInfo)  

发现(设备,网络和服务发现)    ZB 发现设备请求(zb_FindDeviceRequest)    ZB 绑定设备请求(zb_BindDeviceRequest)               ZB 允许绑定请求(zb_AllowBindRequert)       ZB 许可加入请求(zb_PermitJoinRequest)   

数据传输    ZB 发送数据请求(zb_SendDataRequest)    ZB 接收数据指示(zb_ReceiveDataIndication)

2.1、网络形成 
      协调器将扫描所有被ZCD_NV_CHANLIST 参数指定的通道和选择一个最少能量的通道。如果有两个及以上的最小能量通道,协调器选择在 ZB网络中存在的序号最小的通道。协调器将选择用 ZCD_NV_PANID 参数指定的网络 ID。路由器和终端设备将扫描用ZCD_NV_CHANLIST 配置参数制定的通道和试图发现 ID为 ZCD_NV_PANID 参数指定的网络。 
       协调器格式化网络 
可以调用下面函数来格式化网络: 
NLME_NetworkFormationRequest( 
                                                      zgConfigPANID, 
                                                      zgDefaltChannelList, 
                                                      zgDefaultStartingScanDuration, 
                                                      beaconOrder, 
                                                      superframeOrder,  
                                                       false                                               ); 
一般不直接调用上面的函数形成网络,ZDO_StartDevice()函数来启动一个设备

       路由器和终端设备加入网络 
发现一个网络将调用下面函数: 
NLME_NetworkDiscoveryRequest( 
                                                     uint32 ScanChannels, 
                                                     byte scanDuration        ); 
发现网络存在后,就调用下面函数加入该网络: 
NLME_OrphanJoinRequest( 
                                           uint32 ScanChannels,   
                                            byte ScanDuration                  ); 
ZDO_StartDevice()启动该设备。 
最好也不要用这两个函数去发现/加入网络,而是用ZDO_StartDevice()启动该设备。 
ZDO_StartDevice 
        功能描述:在该,在网络中启动设备,协调器、路由器、终端设备都可以用该函数启动,启动之后,
设备根据自身的类型去建立或发现和加入网络。 
函数原型: 
ZDO_StartDevice( 
                            byte logicalType,                   //--设备逻辑类型
                            devStartModes_t startMode, //--启动模式
                            byte beaconOrder,                //--信标时间
                            byte superframeOrder );    //--超帧长度

注意其模式如下:

typedef enum
{
MODE_JOIN,          //--加入
MODE_RESUME,    //--恢复
//MODE_SOFT,       // Not supported yet 注意了,在我得到的无线龙的协议栈,该句话被标示为目前尚不支持
MODE_HARD,       //--硬件启动
MODE_REJOIN    //--在加入
} devStartModes_t;

2.2、绑定 
       绑定是控制信息从一个应用层到另一个应用层流动的一种机制。在 ZigBee 06 版本中,绑定机制在所有的设备中被执行。

绑定建立-----这里可以直接调用函数 zb_BindDeviceRequest()发起绑定请求: 
zb_BindDevice (   
                         uint8 create,             //是否创建绑定,TRUE 创建,FALSH解除 
                          uint16 commandId, //命令 ID,基于某命令的绑定 
                         uint8 *pDestination //指向扩展地址指针                           ); 
函数 APSME_BindRequest 函数创建绑定。 
绑定解除 ----解除绑定和建立绑定请求函数都是 zb_ BindDeviceRequest(),但是参数不一样(第一个参数为 FALSH)

2.3 命令 
         命令就是为了实现某中特定的通信,而指定的一种强制性的通信方式。

3 实验介绍

设备(Devices) 
        该示范例子有两种应用设备类型----开关和灯。 
        应用例子工程有作为终端设备(end-device)的简单开关配置和作为协调器或路由器设备的简单管理器配置。 
       当这个设备第一次开启的时候,它进入一个保持状态 ,LEDx 闪烁。 
       对于灯管理器设备,在该状态下,按下 UP它将使该设备作为协调器启动,期间要是按下RIGHT 她将使该设备作为路由器启动。 
       对于开关设备而言,在该状态下,无论是按下 UP还是 RIGHT 都将作为终端设备启动。 
命令:有一个单一的应用命令----一个“ (TOGGLE)命令。对于开关该命令作为输
出被定义,对于管理器却作为输入别定义。该命令信息除了命令标志符之外没有其他参数。 
绑定:“按钮”绑定被使 用。 
       在一个开关和一个管理器间绑定被创建,首先是这个管理器要进入允许绑定模式。接着是开关(在一定时间内)发出一个绑定请求。这就将从开关到管理器之间创建一个绑定。 
       重复上面的过程,一个开关可以与多个管理器绑定。 
        为某个开关重新分配绑定,这个绑定请求与同一个删除参数被发出。这就将该开关的所有绑定移除。现在就可以用上面的绑定方法重新与其他的管理器进行绑定操作。 
        针对简单管理器和简单开关的配置编程有详细的描述。确保只能有一个管理器作为协调器,其他都作为路由器。

        设备自动加入网络之后(R 闪亮---开关设备,协调器建立网络 R 点亮,路由器加入网络 R 闪烁),采用下面的控制方式来创建绑定:   

        ---通过按某个管理器的 UP使它进入允许绑定模式。---在某个灯开关上按下 UP(10 秒之内)发出绑定请求。----- 这就将使该开关设备绑定到该(处于绑定模式下的)管理器设备上。---当开关绑定成功时,(开关设备上的)G闪亮。---之后,开关设备上的 RIGHT 被按下就将发送“切换”命令,设备上的 G状态切换。--- 如果开关设备上的 DOWN按下,它将移除该设备上所有的绑定。

4.实验操作:

       1)、用两个模块选择管理器编译,下载SimpleController EB程序(作为选择管理器灯)

       2)、在选一个模块选择开关设备编译,SimpleSwitch EB

       3)、选择适当的类型启动,这里三个模块,管理器两个分别作为协调器和路由器启动,开关设备作为终端设备启动。

      4)、 建立绑定。可以在协调器和终端设备之间建立绑定,或可以在路由器和终端设备间建立绑定,开关也可以同时绑定所有的管理器设备,其绑定方法如前介绍。 
       5)、 绑定之后,就可以在建立绑定之间的设备发送命令,可以观察管理设备灯 G的显示状态的变化。 
       6)、 按下 DOWN 可以解除开关上的所有绑定,从而可以按照 4~5 步从新绑定和传输命令。

5、API 开发一个应用的方法

1)、确定应用中的所有的设备 
– 如:温度传感器,占有传感器,自动调温器,加热单元和遥控 
– 为他们中的每一个设备都分配一个设备ID(唯一的16位ID)  

2)、 确定“ 16位命令ID,为每个设备在设备之间交互信息分配的的16位命令ID 例如: 
– 读温度 
– 读自动调温器设置 
– 加热/制冷单元的控制  

3)、为每个“ 命令”,确定设备“引起”(输出)和“吸引”(输入)的命令。
– 温度读是“ 输出”从占有传感器设备到“输入”自动调温器
–    等等  

4)、为每个设备创建简单描述符结构。这个包括: 
– 为每个设备分配设备ID和版本 
– 为设备指定“输出”“输入”的 命令列表 
– 指定一个模式(profile)ID。这个是唯一的应用模式16位的身份识别码,由ZB联盟分配。

5)、   为每一个“命令”
– 定义信息交换格式和它的解释 
– 例如:温度值能被交换作为 
   ( 格式 ) “一个8位值” 
( 解释 ) “0 指示0C 和 255指示 64 C 步长为 0.25 C ”

学习zigbee入门-9 - qwrwrwet - F-117-C的博客

0 0