This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教:Z-Stack3.0.2 ZNP的应用

Expert 1395 points
Other Parts Discussed in Thread: Z-STACK, CC2530

芯片型号:CC2530F256

协议栈:Z-Stack3.0.2

测试:通过Z-TOOL2.0

Start Time: 2019/9/4 2:16:49

*** WARNING ***
Expected Z-Stack version (2.7.1) does not match with actual Z-Stack version (2.7.2). Z-Tool may not work properly.

<TX>02:18:31.78 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0003
Offset: 0x00
Len: 0x01
Value: . (0x03)

<RX>02:18:31.81 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: SUCCESS (0x0)

<TX>02:18:57.53 COM1 SYS_RESET (0x4100)
Type: 0x00 (HARD RESET) (0x0)

<RX>02:19:00.64 COM1 SYS_RESET_RESPONSE (0x4180)
Reason: 0x02
TransportRev: 0x02
Product: 0x00
MajorRel: 0x02
MinorRel: 0x07
HwRev: 0x02

<TX>02:21:17.02 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:21:17.06 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:35:40.69 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:35:40.73 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:39:32.9 COM1 APP_CNF_BDB_START_COMMISSIONING (0x2F05)
CommissioningMode: (0x04) Network Formation (0x4)

<RX>02:39:39.26 COM1 APP_CNF_BDB_START_COMMISSIONING_SRSP (0x6F05)
Status: SUCCESS (0x0)

<RX>02:39:39.26 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.27 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 1 (0x1)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0x04 (Network Formation) (0x4)

<RX>02:39:39.53 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.79 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.06 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.32 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.59 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:41.15 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 9 (0x9)

<RX>02:39:41.15 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 0x00 (Success) (0x0)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0 (0x0)

<TX>02:40:35.8 COM1 UTIL_GET_DEVICE_INFO (0x2700)

<RX>02:40:35.81 COM1 UTIL_GET_DEVICE_INFO_RESPONSE (0x6700)
Status: SUCCESS (0x0)
IEEEAddr: 0x00124B0007665581
ShortAddress: 0x0000
DeviceType: COORDINATOR, ROUTER, END_DEVICE (0x7)
DeviceState: DEV_ZB_COORD (0x9)
NumAssocDevices: 0x00
AssocDevicesList

做了以上操作,也可以获取设备信息

看论坛帖子说下来该注册端点和发送数据。问题如下:

1、端点注册AF_REGISTER

EndPoint: 
AppProfID: 
AppDeviceId: 
AppDevVer: 
LatencyReq: 
AppNumInClusters:
AppInClusterList: 
AppNumOutClusters: 
AppOutClusterList: 

2、AF_DATA_REQUEST (0x2401)

DstAddr: 
DestEndpoint: 
SrcEndpoint: 
ClusterID: 
TransID: 
Options: 
Radius: 
Len: 
Data: 

以上参数怎么获取?该怎么填,有那些资料可以参考?

3、终端用的是Z-Stack 3.0.2  SampleLight例程,把控制回路增加到三路,目前用SampleSwitch作协调器

可以控制其中的一路,若用ZNP协调器控制是不是要注册三个端点?谢谢!

  • 1. 可以參考SampleSwitch例程裡面的zclSampleSw_SimpleDesc是怎麼填的
    2. 可以參考SampleSwitch例程裡面的zclGeneral_SendOnOff_CmdToggle是怎樣調用AF_DATA_REQUEST 並填入相關參數
    3. 是Z-Stack 3.0.2 SampleLight例程要注册三个端点,协调器只要針對不同的端点下命令就好
  • 您好!谢谢您的指导和回复,但是目前还有问题,估计是数据或端点错误,但不知道哪部分出了问题,请多指教!抓图如下:

    抓包文件:0906_Test.rar

    另外有几个问题请教:

    1、昨天终端是可以入网的,今天就不行了,后来重新烧写程序,以后每次都要这样么?

    2、想用CC2530ZNP+MCU的方式来实现网关这种方案可行不?有没参考代码?

    谢谢!

  • 你SrcEndpoint 為什麼是0xFE?你用AF_REGISTER時用的是0x07不是嗎?

    另外

    1. 如果你使能NV_RESTORE照理不需每次重新入網

    2. 可以參考

  • 您好!首先感谢您的回复和帮助,目前注册端点、发送数据在Z-TOOl客户端都能看到成功,但是发送数据终端的LED没变化,抓包也看不到开关数据,截图

    及数据包如下:

    数据包:0906_Test2.rar

    再次谢谢您的指导和帮助!

  • 你用AF_REGISTER時用的是0x07, 發送命令的SrcEndpoint要用0x07,目的是SampleLight 的Endpoint 是0x08,所以DstEndpoint 該用0x08
  • 您好!十分感谢您的指导帮助和快速回复!我刚刚试了下:

    若:SrcEndpoint: 0x07   

          DestEndpoint:= 0x08或者0x9

    会在客户端显示发送不成功,另外我把三个端点都分别注册了。图截如下:

    再次感谢您的指导帮助!

  • 請附上抓包檔,抓包要包含入網過程

  • 你好!十分感谢您的帮助、指导和回复!刚刚抓了从入网开始的数据包这次的数据包里有“格式错误的

    数据包”提示,下午测试时也出现过一次,由于发帖失误没上来,数据包见附件,Z-Tool收发数据如下:

    <TX>11:48:35.84 COM1 UTIL_GET_DEVICE_INFO (0x2700)

    <RX>11:48:35.86 COM1 UTIL_GET_DEVICE_INFO_RESPONSE (0x6700)

       Status: SUCCESS (0x0)

       IEEEAddr: 0x00124B0007665581

       ShortAddress: 0x0000

       DeviceType: COORDINATOR, ROUTER, END_DEVICE (0x7)

       DeviceState: DEV_ZB_COORD (0x9)

       NumAssocDevices: 0x01

       AssocDevicesList: 0x3B3B

    <TX>11:49:56.75 COM1 AF_REGISTER (0x2400)

       EndPoint: 0x07

       AppProfID: 0x0104

       AppDeviceId: 0x0103

       AppDevVer: 0x01

       LatencyReq: NO_LATENCY_REQS (0x0)

       AppNumInClusters: 0x03

       AppInClusterList: 0x0000, 0x0003, 0x0007

       AppNumOutClusters: 0x03

       AppOutClusterList: 0x0003, 0x0006, 0x0004

    <RX>11:49:56.76 COM1 AF_REGISTER_SRSP (0x6400)

       Status: afStatus_SUCCESS (0x0)

    <TX>11:50:02.85 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x07

       SrcEndpoint: 0x07

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:50:02.85 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

    <RX>11:50:03.78 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x07

       TransID: 0xFF

    <TX>11:50:21.32 COM1 AF_REGISTER (0x2400)

       EndPoint: 0x08

       AppProfID: 0x0104

       AppDeviceId: 0x0103

       AppDevVer: 0x01

       LatencyReq: NO_LATENCY_REQS (0x0)

       AppNumInClusters: 0x03

       AppInClusterList: 0x0000, 0x0003, 0x0007

       AppNumOutClusters: 0x03

       AppOutClusterList: 0x0003, 0x0006, 0x0004

    <RX>11:50:21.32 COM1 AF_REGISTER_SRSP (0x6400)

       Status: afStatus_SUCCESS (0x0)

    <TX>11:50:29.72 COM1 AF_REGISTER (0x2400)

       EndPoint: 0x09

       AppProfID: 0x0104

       AppDeviceId: 0x0103

       AppDevVer: 0x01

       LatencyReq: NO_LATENCY_REQS (0x0)

       AppNumInClusters: 0x03

       AppInClusterList: 0x0000, 0x0003, 0x0007

       AppNumOutClusters: 0x03

       AppOutClusterList: 0x0003, 0x0006, 0x0004

    <RX>11:50:29.73 COM1 AF_REGISTER_SRSP (0x6400)

       Status: afStatus_SUCCESS (0x0)

    <TX>11:50:38.12 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x08

       SrcEndpoint: 0x07

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:50:38.13 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

    <RX>11:50:39.07 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x07

       TransID: 0xFF

    <TX>11:50:49 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x09

       SrcEndpoint: 0x07

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:50:49.01 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

    <RX>11:50:49.24 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x07

       TransID: 0xFF

    <TX>11:50:58.06 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x09

       SrcEndpoint: 0x09

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:50:58.07 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

    <RX>11:50:58.41 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x09

       TransID: 0xFF

    <TX>11:51:09.91 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x08

       SrcEndpoint: 0x08

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:51:09.92 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

     

    <RX>11:51:10.58 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x08

       TransID: 0xFF

    <TX>11:51:35 COM1 AF_DATA_REQUEST (0x2401)

       DstAddr: 0x3B3B

       DestEndpoint: 0x07

       SrcEndpoint: 0x07

       ClusterID: 0x0006

       TransID: 0xFF

       Options: 0x10

       Radius: 0x1E

       Len: 0x01

       Data: . (0x02)

    <RX>11:51:35.01 COM1 AF_DATA_REQUEST_SRSP (0x6401)

       Status: afStatus_SUCCESS (0x0)

    <RX>11:51:35.81 COM1 AF_DATA_CONFIRM (0x4480)

       Status: afStatus_SUCCESS (0x0)

       Endpoint: 0x07

       TransID: 0xFF

    0906_Test_3.rar

    再次感谢!谢谢!

  • 試試

    <TX>09:50:34.49 COM4 AF_DATA_REQUEST (0x2401)
    DstAddr: xxxx
    DestEndpoint: 0xxx
    SrcEndpoint: 0xxx
    ClusterID: 0x0006
    TransID: 0x00
    Options: 0x00
    Radius: 0x00
    Len: 0x03
    Data: ... (0x01, 0x01, 0x02)

  • 您好!非常感谢您的耐心指导和帮助!刚才试了下,按您给的数据格式目前端点7可以控制,端点8

    和9不行,现端点7的数据会自动变成5位,我设置时是一样的端点8和9显示的是3位,截图及数据包

    如下:

    端点7:

    端点8:

    端点9:

    抓包文件:0907_Test_3.rar

    再次感谢您的支持和帮助!谢谢!

  • 你要控制的SampleLight 例程端点是?

  • 您好!非常感谢您的帮助和支持!我用Z-Stack 3.0.2  SampleLight的例程添加了两个回路后作为协调器内存不足报错

    我就把SampleLight设置为终端,源代码端点是8,新添加的端点是7和9,截图如下:

    谢谢!

  • 你的0907_Test_3.rar抓包檔沒有入網過程,我沒有辦法解碼,感覺上是你的SampleLight有問題,你再重做一次包含重新入網過程的抓包讓我看看
  • 您好!十分感谢您的帮助和支持!我刚刚看了下SampleLight的代码感觉是有点问题,我先把代码检查一遍然后再试下看还有什么问题再抓包,然后回帖请教您!再次致以由衷的感谢!谢谢!
  • 您好!首先感谢您的帮助和支持!现在的问题是这样;端点7开关没问题,端点8和9只能开,不能关。

    我昨晚和今天上午查了几遍代码没发现明显错误,还要麻烦您帮分析下是什么问题,Z-Tool截图如下,

    抓包档:0908_Test_1.rar

    设备信息:

    端点7开关操作:

    端点8开关操作:

    端点9开关操作:

    再次致以由衷的感谢!谢谢!

  • 抓包看來送給端点8和9的toggle命令是正確的,應該還是你端点8和9處理toggle命令的應用程序有問題,建議你調適看看

  • 您好!谢谢您的帮助和支持!我回头按您的建议再查下代码,现在仿真器出了点问题,我到时调试下看看。再次致以由衷的感谢!谢谢!
  • 您好!首先感谢您的帮助和支持!现在端点7、8、9都可以控制了,我想让开关状态回馈给协调器

    并且在端点7的代码上做了如下添加:

    static void zclSampleLight_OnOffCB( uint8 cmd )
    {
    afIncomingMSGPacket_t *pPtr = zcl_getRawAFMsg();
    uint8 OnOff;
    zclSampleLight_DstAddr.addr.shortAddr=pPtr->srcAddr.addr.shortAddr;
    //////////////////////////////////////////////////////////////////////////////
    zclReportCmd_t rptcmd;//
    //////////////////////////////////////////////////////////////////////
    // Turn on the light
    if ( cmd == COMMAND_ON )
    {
    OnOff = LIGHT_ON;
    }
    // Turn off the light
    else if ( cmd == COMMAND_OFF )
    {
    OnOff = LIGHT_OFF;
    }
    // Toggle the light
    else if ( cmd == COMMAND_TOGGLE )
    {
    #ifdef ZCL_LEVEL_CTRL
    if (zclSampleLight_LevelRemainingTime > 0)
    {
    if (zclSampleLight_NewLevelUp)
    {
    OnOff = LIGHT_OFF;

    }
    else
    {
    OnOff = LIGHT_ON;
    }
    }
    else
    {
    if (zclSampleLight_OnOff == LIGHT_ON)
    {
    OnOff = LIGHT_OFF;
    }
    else
    {
    OnOff = LIGHT_ON;
    }
    }
    #else
    if (zclSampleLight_OnOff == LIGHT_ON)
    {
    OnOff = LIGHT_OFF;
    }
    else
    {
    OnOff = LIGHT_ON;
    }
    #endif
    }
    #ifdef ZCL_LEVEL_CTRL
    zclSampleLight_LevelChangeCmd = (OnOff == LIGHT_ON ? LEVEL_CHANGED_BY_ON_CMD : LEVEL_CHANGED_BY_OFF_CMD);
    zclSampleLight_DefaultMove(OnOff);
    #else
    zclSampleLight_OnOff = OnOff;
    #endif
    //////////////////////////////////回馈/////////////////////////////////////// 

    rptcmd.numAttr = 1;
    rptcmd.attrList[0].attrID = ATTRID_ON_OFF;
    rptcmd.attrList[0].dataType = ZCL_DATATYPE_BOOLEAN;
    rptcmd.attrList[0].attrData = (uint8*)&zclSampleLight_OnOff;
    zcl_SendReportCmd(SAMPLELIGHT_ENDPOINT,&zclSampleLight_DstAddr,ZCL_CLUSTER_ID_GEN_ON_OFF,
    &rptcmd,ZCL_FRAME_CLIENT_SERVER_DIR, false, 0 );
    zclSampleLight_UpdateLedState();

    //////////////////////////////////////////////////////////////////////////
    }

    但是在Z-Tool客户端看不到变化,客户端截图如下,端点9是没加回馈的,请帮忙分析下是什么原因,附抓包档:0909_Test_1.rar

    再次致以由衷的感谢!谢谢!

  • 你的抓包檔沒有入網過程,我沒辦法解碼,你可以用下面的範例程序報on/off 狀態

    zclReportCmd_t *pReportCmd;
    
      pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) );
      if ( pReportCmd != NULL )
      {
        pReportCmd->numAttr = 1;
        pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
        pReportCmd->attrList[0].dataType = ZCL_DATATYPE_UINT8;
        pReportCmd->attrList[0].attrData = (uint8*)&zclSampleLight_OnOff;
    
        zcl_SendReportCmd(SAMPLELIGHT_ENDPOINT, 0,ZCL_CLUSTER_ID_GEN_ON_OFF,
                                         pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, SeqNum++ );
      }
    
      osal_mem_free( pReportCmd );

  • 您好!首先感谢您的帮助和支持!我在代码端点7中做了您给的范例程序的添加,如下:

    static void zclSampleLight_OnOffCB( uint8 cmd )
    {
    afIncomingMSGPacket_t *pPtr = zcl_getRawAFMsg();
    uint8 OnOff;
    zclSampleLight_DstAddr.addr.shortAddr=pPtr->srcAddr.addr.shortAddr;
    /////////////////////////////状态回馈/////////////////////////////////////////////////
    zclReportCmd_t *pReportCmd;
    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    // Turn on the light
    if ( cmd == COMMAND_ON )
    {
    OnOff = LIGHT_ON;
    }
    // Turn off the light
    else if ( cmd == COMMAND_OFF )
    {
    OnOff = LIGHT_OFF;
    }
    // Toggle the light
    else if ( cmd == COMMAND_TOGGLE )
    {
    #ifdef ZCL_LEVEL_CTRL
    if (zclSampleLight_LevelRemainingTime > 0)
    {
    if (zclSampleLight_NewLevelUp)
    {
    OnOff = LIGHT_OFF;

    }
    else
    {
    OnOff = LIGHT_ON;
    }
    }
    else
    {
    if (zclSampleLight_OnOff == LIGHT_ON)
    {
    OnOff = LIGHT_OFF;
    }
    else
    {
    OnOff = LIGHT_ON;
    }
    }
    #else
    if (zclSampleLight_OnOff == LIGHT_ON)
    {
    OnOff = LIGHT_OFF;
    }
    else
    {
    OnOff = LIGHT_ON;
    }
    #endif
    }
    #ifdef ZCL_LEVEL_CTRL
    zclSampleLight_LevelChangeCmd = (OnOff == LIGHT_ON ? LEVEL_CHANGED_BY_ON_CMD : LEVEL_CHANGED_BY_OFF_CMD);
    zclSampleLight_DefaultMove(OnOff);
    #else
    zclSampleLight_OnOff = OnOff;
    #endif
    ///////////////////////////////状态回馈///////////////////////////////////////
    pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) );
    if ( pReportCmd != NULL )
    {
    pReportCmd->numAttr = 1;
    pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
    pReportCmd->attrList[0].dataType = ZCL_DATATYPE_UINT8;
    pReportCmd->attrList[0].attrData = (uint8*)&zclSampleLight_OnOff;
    zcl_SendReportCmd(SAMPLELIGHT_ENDPOINT, 0,ZCL_CLUSTER_ID_GEN_ON_OFF,
    pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR,TRUE,zclSampleLightSeqNum++);
    }
    osal_mem_free( pReportCmd );
    //////////////////////////////////////////////////////////////
    zclSampleLight_UpdateLedState();
    //////////////////////////////////////////////////////////////////////////
    }

    不知添加的正确与否?但还是看不到变化,附入网过程抓包档:0909_Text_2.rar

    Z-Tool截图:

    再次致以由衷的感谢!谢谢!

  • zcl_SendReportCmd的第二個參數是afAddrType_t *dstAddr,你要填目的地的資訊,不是用0

  • 您好!首先感谢您的帮助和支持!我对代码进行了如下修改:

    zcl_SendReportCmd(SAMPLELIGHT_ENDPOINT,&zclSampleLight_DstAddr,ZCL_CLUSTER_ID_GEN_ON_OFF,
    pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR,TRUE,zclSampleLightSeqNum++);

    这样是对的吧?我的预编译配置为:

    BDB_REPORTING
    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    xPOWER_SAVING
    NWK_AUTO_POLL
    xZTOOL_P1
    xMT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_ZDO_MGMT
    xMT_APP_CNF_FUNC
    LCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_DISCOVER
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_ON_OFF
    ZCL_SCENES
    ZCL_GROUPS
    xZCL_LEVEL_CTRL
    xZCL_REPORT_DESTINATION_DEVICE

    其中对:ZCL_REPORT_DESTINATION_DEVICE进行了不同的设置,使能和非使能,抓包档0909_Test_1F02.rar里有几次入网分别是使能和非使能的状态,但是现在貌似还看不到状态。Z-Tool截屏如下:

    再次致以由衷的感谢!谢谢!

  • 你zclSampleLight_DstAddr理面是填什麼資料?
  • 您好!首先感谢您的帮助和支持!zclSampleLight_DstAddr的值如下,两种都测试了,第一个没赋值,第二个是

    赋值0x0000;

    再次致以由衷的感谢!谢谢!

  • 應該用

    zclSampleSw_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;

    zclSampleSw_DstAddr.endPoint = Coordinator’s endpoint ;

    zclSampleSw_DstAddr.addr.shortAddr = 0;

  • 您好!首先感谢您的帮助和支持!已经按您的指导修改了代码,现在3路都实现了回馈功能。

    1、我若用网关判断终端某一通道的开关状态,判断最后一位(如下图红圈里)数据的状态就可以了吧?其它数据我不需要理会了吧?

    2、我在预编译项里设置了:POWER_SAVING

    在void zclSampleLight_Init( byte task_id )初始化函数里末尾调用了

    osal_pwrmgr_device(PWRMGR_BATTERY);  

    设置了:-DRFD_RCVC_ALWAYS_ON=FALSE

    现在的现象是:电流是降下来了,我发送数据,LED不会切换,但是返回的状态显示已经切换了,请帮分析下我少了什么步骤,或者有什么设置不对的。

    再次致以由衷的感谢!谢谢!

  • 1. 可以

    2. 可以用這個帖子継續

  • 您好!首先十分感谢您的帮助和支持!

    现在有几个问题请教:

    1、接下来我打算开发PM2.5检测(主要需要串口,通过串口采集数据)。

    2、温湿度采集(通过IIC协议实现)。

    请问用哪些例程比较合适?

    3、网关部分若用BeagleBone Black Development Board AM335x系列开发板+CC2530这种方式可行不?

    若后期作为商品化是否存在版权,或有什么限制吗?

    再次致以由衷的感谢!谢谢!

  • 1&2.建議用SampleTemperazure sensor
    3. 可以

    沒有版权或什么限制
  • 您好!十分感谢您的帮助和支持!

              谢谢您的指导和建议,我接下来先做开关的测试,然后会用SampleTemperazure sensor例程做PM2.5和温湿度采集开发,会继续在这里跟贴向您请教!

                                                                                                                                                 再次致以由衷的感谢!谢谢!

  • 你好,
    1.首次 启动znp时候,设置nv ZCD_NV_STARTUP_OPTION 0x03 是清楚配置和清楚网络,那么下次启动网络已经组建好了,需要修改成0x04自动启动吗?否则每次都是0x03不是把协调器都恢复出厂了吗?
    2.默认f8wZCL.cfg中zcl的宏都没有打开,例如读写汇报,基本开关灯泡安防等等。那么使用af指令注册端点01时候带上了常用所有的cluster,那么这些cluster的数据能通过终端设备上报给网关吗,网关可以使用af函数控制终端设备吗
    3.网关使用znp接口初始化一个新的znp协调器后。以后上电过程还需要再次配置类型,创建网络,注册端点号吗,等等每一步操作吗
    4.f8wZCL.cfg -DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B 但是#define BDB_DEFAULT_PRIMARY_CHANNEL_SET DEFAULT_CHANLIST //BDB specification default is: 0x02108800,初始化过程没有配置信道默认只有11呀
  • 1. 設置过下次重启就不用再調用ZCD_NV_STARTUP_OPTION 0x03

    2. 可以

    3. 只需重新注册端点号

    4. 不懂你的問題

    你的問題大部分跟這個討論串沒什麼關係建議你重新開一個討論串

  • 谢谢

    也是3.0znp使用问题了。

    4.初始化znp过程没有配置信道指令,但我查询代码默认只有11.那么其他信道呢

  • 可以用 APP_CNF_BDB_SET_CHANNEL配置信道

  • 您好!十分感谢您的指导和帮助!前段时间忙于硬件开发,就没有继续代码的优化;目前是这样
    想通过按键长按、短按来实现恢复出厂设置和入网功能,代码如下:
    static uint32 keyPressTime = 0;
    if ( keys & HAL_KEY_SW_5)
    {
    keyPressTime=osal_getClock();
    }
    else
    {
    if ( keyPressTime )
    {
    keyPressTime =(osal_getClock() - keyPressTime);
    if ( keyPressTime <= 3 )
    {
    if (zclSampleLight_OnOff == LIGHT_ON)
    {
    OnOff = LIGHT_OFF;
    HalLedSet ( HAL_LED_5, HAL_LED_MODE_ON );
    }
    else
    {
    OnOff = LIGHT_ON;
    HalLedSet ( HAL_LED_5, HAL_LED_MODE_OFF );
    }
    zclSampleLight_OnOff=OnOff;

    }
    else if( keyPressTime >12 )
    {
    HalLedBlink(HAL_LED_5,12,50,1000);//12次1S
    bdb_resetLocalAction();//恢复
    HalLedBlink(HAL_LED_5,12,50,1000);//12次1S
    zdpExternalStateTaskID = zclSampleLight_TaskID;
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); //终端绑定
    HalLedSet ( HAL_LED_5, HAL_LED_MODE_OFF);
    }
    keyPressTime = 0;
    }
    }
    目前的问题是:
    可以实现通过按键长按、短按来实现恢复出厂及入网功能,但是LED5没有闪烁标识,请帮指导下是哪里的问题。
    再次感谢您的指导帮助!

  • LED5設置是什麼?
  • 您好!十分感谢您的指导和帮助!现在LED5的设置如下:

    hal_led.h//文件里
    #define HAL_LED_5 0x10//P1.4
    hal_board_cfg.h//文件里
    #define LED5_BV BV(4)
    #define LED5_SBIT P1_4
    #define LED5_DDR P1DIR
    #define LED5_POLARITY ACTIVE_HIGH
    还有,如果把HalLedBlink(HAL_LED_5,12,50,1000);//12次1S
    这一句放在程序初始化部分是可以闪烁指示,但是放在目前的位置就不行。
    再次感谢您的指导帮助!

  • 檢查看看你的P1.4設置是不是被其他驅動給覆蓋了
  • 您好!十分感谢您的回复、指导和帮助!

            刚刚查了下代码,貌似没看到P1.4有另外占用的地方;看了下硬件Debugger端口CSN引脚是P1.4。也测试了P1.0引脚可以实现闪烁功能,我随后打样板子时把状态指示的I/O改成P1.3再试下看。

                         再次由衷感谢您的指导和帮助!谢谢!

  • 找到問題就好,不客氣
  • 您好!首先感谢您的大力支持和无私帮助!我现在在用Sample Temperature Sensor 的例程来写温湿度及PM2.5数据采集,目前写了温湿度采集部分的驱动,如图:

    问题如下:

    1、这种写法可行不?我是不在zclSampleTemperatureSensor_event_loop( uint8 task_id, uint16 events )函数里直接调用读取温度,并发送给协调器即可?

    2、应该在函数zclSampleTemperatureSensor_event_loop( uint8 task_id, uint16 events )里的什么位置调用读取、发送?

    3、若后续开发门磁、热释红外传感器,请指点下用哪个例程比较合适?

    再次对您的回复及支持和帮助致以由衷的感谢!谢谢!

  • 1&2.建議你自己開個週期事件去讀取PM2.5資料

    3. 可以參考

  • 您好!首先感谢您的回复和帮助。我按您说的先自己尝试去实现下,有什么问题再来请教!

            再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。

    目前有几个问题请教如下:

    1、环境监测,我打算检测的数据有:温度、湿度、PM2.5;官方库SAMPLETEMPERATURESENSOR_ENDPOINT 8,我是不是要另外设置两个端点、另外开两个周期事件用来传送另外两个数据呢?周期一般设置多少比较合适?

    2、之前SampleLight的板子装在灯上实际测试了下,可能是由于平台或者其它原因,出现了掉线的现象,现在想用TCP透传测试一段时间;可能需要增部分功能就是加把开关的实时开关状态回传给协调器。这样做对系统的稳定性会不会有影响?

                                                            再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 可以开两个周期事件用来传送另外两个数据呢,周期一般可以由你自行權衡
    2. 实时开关状态回传给协调器不要太頻繁一般不会有影响
  • 好的!我去尝试下看,谢谢!再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。

    目前有几个问题请教如下:

    1、我建立了3个周期事件其中温度和湿度的周期事件可以起到作用(附:在周期事件中串口输出的数据截图),PM2.5周期事件不起作用,建立方法是一样的,我还需要设置哪里呢?

    2、在协调器能看到终端设备已入网,我读把读取到传感器的数据用语句:uint8 status = bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,Temperature);发送给协调器,但是在Z-Tool工具端看不到数据,是不是我发送数据的方法是错误的?该用哪种方式发送呢?

                                                                          再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. PM2.5周期事件是怎樣定義的

    2. 建議先用sniffer查看封包有沒有送出

  • 您好!首先感谢您的回复和帮助。
    1、我周期事件的建立是在"zcl_sampletemperaturesensor.h"文件中做如下定义:
    // Application Events
    #define SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT 0x0001
    #define SAMPLEAPP_END_DEVICE_REJOIN_EVT 0x0002
    #define WD_END_EVT 0x0003//温度事件
    #define SD_END_EVT 0x0004//湿度事件
    #define PM_END_EVT 0x0005//PM2.5事件
    在"zcl_sampletemperaturesensor.c"文件中
    void zclSampleTemperatureSensor_Init( byte task_id )函数里添加:
    osal_start_timerEx(zclSampleTemperatureSensor_TaskID,WD_END_EVT,3000);
    osal_start_timerEx(zclSampleTemperatureSensor_TaskID,SD_END_EVT,6000);
    osal_start_timerEx(zclSampleTemperatureSensor_TaskID,PM_END_EVT,9000);
    在:uint16 zclSampleTemperatureSensor_event_loop( uint8 task_id, uint16 events )
    函数里添加:
    if (events&PM_END_EVT)
    {
    uint8 uff[6];
    uff[0] ='P';
    uff[1] ='M';
    uff[2] ='2';
    uff[3] ='.';
    uff[4] ='5';
    uff[5] =':';
    HalUARTWrite(0,uff,6);
    osal_start_timerEx(zclSampleTemperatureSensor_TaskID,PM_END_EVT,9000);
    return (events^PM_END_EVT);
    }
    现在,PM2.5值获取的代码还没写进去,只有温度湿度有串行输出,PM2.5没打印输出。
    2、目前我给协调器发送的是16进制数据,串行输出是转为ASCII码的,代码如下。
    uint16 Temperature;
    SHT20_GetValue();
    Temperature=sht20_info.tempreture;
    buff [0] ='T';
    buff [1] ='e';
    buff [2] ='m';
    buff [3] ='p';
    buff [4] ='e';
    buff [5] ='r';
    buff [6] ='a';
    buff [7] ='t';
    buff [8] ='u';
    buff [9] ='r';
    buff [10] ='e';
    buff [11] =':';
    ZHSJ[0]=(Temperature%100)/10;
    ZHSJ[1]=Temperature/10;
    buff[12]=ZHSJ[0]+0x30;
    buff[13]=ZHSJ[1]+0x30;
    HalUARTWrite(0,buff,14);
    HalUARTWrite(0,"\n",2);
    uint8 status = bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,Temperature);
    3、现在温湿度值串行输出如下:抓包档如附件:20200103.rar
    Humidity:66
    Temperature:22

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!