基于zstack 的zigbee3.0 第一个例程

z-stack,zigbee 2019-08-23 3588 次浏览 次点赞


zstack first sample

Z-Stack 3.0 Sample Application User's Guide.pdf->1.2 Sample Projects 详细介绍了例程的功能,这里我们选择跑通SampleLight / SampleSwitch 描述的功能,中间可能涉及led和key的驱动移植,同时通过抓包详细了解其网络建立、设备加入网络以及数据交互,至此,对zigbee和z-stack有个感性认识。

Z-Stack 3.0 Sample Application User's Guide.pdf->3 Using the Sample Applications->3.2.1 SampleLight, SampleSwitch 详细介绍了该样例的功能。从描述来看,SampleLight 作为常供电设备扮演协调器角色,同时通过LED1用以指示灯开关,可以通过菜单导航,确认按键本地开关LED1,SampleSwitch因为是电池设备工作在终端设备模式,同时通过液晶的菜单导航能够远程开关 SampleLight的LED1。

  • 烧写SampleLight 观测网络流程,并且移植按键和和可能的LED指示,通过按键能够翻转LED1;
  • 烧写SampleSwitch 样例,观察设备加入流程,移植按键远程开关作为协调器的SampleLight的LED1;

I. porting

  • 为了方便抓包观察,更改SampleLight/SampleSwtich 样例中信道到一个干净信道,通过ubiqua信道扫描,这里选择17信道。

    //f8wConfig.cfg line 45
    -DDEFAULT_CHANLIST=0x00020000  // 17 - 0x11
  • 运行抓包,编译下载 SampleLight 运行程序;

    从抓包上来,这里没有任何数据,可能的网络的建立、设备加入网络都需要通过液晶交互吧。

  • 移植LED/KEY用以网络状态指示;

    对比了网蜂zigbee节点.pdfswru208b_CC2530 Development Kit User’s Guide.pdf 原理图确定LED指示灯是一一对应的,但是缺少LED4,对于按键smartrf05eb采用的5键摇杆,通过一个io通知按键事件发生,通过adc采样确定按键的值,由于我们底板只有两个按键,所以这里直接模拟5键摇杆的确认和右键。

    如下表所示为使用底板的外设接口:

    | item | value |

LED1、2、3P1_0、P1_1、P1_4
BTN1、2P0_4 P0_5

增加按键定义

//Components/hal/target/CC2530EB/hal_key.c line 135
/* s1 as joy stick  enter*/
#define HAL_KEY_BTN_OK_PORT     P0
#define HAL_KEY_BTN_OK_BIT      BV(0)
#define HAL_KEY_BTN_OK_SEL      P0SEL
#define HAL_KEY_BTN_OK_DIR      P0DIR

/* s1 as joy stick  right*/
#define HAL_KEY_BTN_MOVE_PORT   P0
#define HAL_KEY_BTN_MOVE_BIT    BV(1)
#define HAL_KEY_BTN_MOVE_SEL    P0SEL
#define HAL_KEY_BTN_MOVE_DIR    P0DIR

完成按键初始化

//Components/hal/target/CC2530EB/hal_key.c line 211  function.HalKeyInit

HAL_KEY_BTN_OK_SEL &= ~(HAL_KEY_BTN_OK_BIT); /* Set pin function to GPIO */
HAL_KEY_BTN_OK_DIR &= ~(HAL_KEY_BTN_OK_BIT); /* Set pin direction to Input */
HAL_KEY_BTN_MOVE_SEL &= ~(HAL_KEY_BTN_MOVE_BIT); /* Set pin function to GPIO */
HAL_KEY_BTN_MOVE_DIR &= ~(HAL_KEY_BTN_MOVE_BIT); /* Set pin direction to Input */

修改按键功能,屏蔽原来摇杆adc采样功能,增加直接io输入

//  if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT))  /* Key is active HIGH */
//  {
//    keys = halGetJoyKeyInput();
//  }
if (!(HAL_KEY_BTN_OK_PORT & HAL_KEY_BTN_OK_BIT)) { /* Key is active LOW */
    keys |= HAL_KEY_SW_5;
} else if (!(HAL_KEY_BTN_MOVE_PORT & HAL_KEY_BTN_MOVE_BIT)) {
    keys |= HAL_KEY_SW_2;
}
  • 由于默认使能了网络安全功能,为了方便抓包分析,需要预定义网络密钥,否则会随时生成,导致抓包不能完成。

    //f8wConfig.cfg line 142
    /* -DDEFAULT_KEY="{0}" */
    -DDEFAULT_KEY="{0x06, 0x03, 0x06, 0x04, 0x09, 0x04, 0x02, 0x06, 0x04, 0x05, 0x04, 0x02, 0x05, 0x03, 0x05, 0x04}"

II. test

参考如上步骤移植后就可以通过Z-Stack 3.0 Sample Application User's Guide.pdf->7 Quick Start Guide 测试观察现象了,因为没有液晶,所以这里需要阅读代码后盲测。大概流程如下:

提示:完整固件保存在files/release_bin/,完整抓包文件保存在 files/sniffer/

sample light

  • 编译SampleLight CoordinatorEB 并烧写到协调器,连续三次按下右键后(S2),进入界面4—远程LED测试页面,通过确认按键(S1)可以连续开关LED1(红色)指示灯状态。
  • 复位后,连续两次按下右键后(S2)进入界面3—网络测试页面,通过确认确认按键(S1)进入组网模式。

    协调器建立网络

sample switch

  • 编译 SampleLight EndDeviceEB 并烧写到终端设备,连续两次(界面)按下右键后(S2),通过确认(S1)按键进入LED测试页面,可以连续按键确认键翻转LED2(红色)指示灯状态。
  • 复位后,连续两次按下右键后(S2)进入界面3—网络测试页面,通过确认确认按键(S1)进入组网模式。

    终端设备加入网络

  • 按一次右键,进入界面4—远程LED测试页面,,通过确认按键(S1)可以远程开关协调器LED1(红色)指示灯状态。

    远程开关操作


本文由 Jay 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处,点赞21

还不快抢沙发

添加新评论