程序2011.8.6

 1.协调器

PRIVATE void vTxSerialDataFrame(uint16 u16NodeId,
                                uint16 u16Humidity,
                                uint16 u16Temperature,
                                uint16 u16BattVoltage,
                                uint16  sensorname,
                                uint8 q1,uint8 q2,uint8 q3,uint8 q4,uint8 q5,uint8 q6,uint8 q7,uint8 q8,uint8 q9,uint8 q10,
                                uint8 q11,uint8 q12,uint8 q13,uint8 q14,uint8 q15,uint8 q16,uint8 q17,uint8 q18);

PRIVATE void vTxSerialDataFrame(uint16 u16NodeId,
                                uint16 u16Humidity,
                                uint16 u16Temperature,
                                uint16 u16BattVoltage,
                                uint16  sensorname,
                                uint8 q1,uint8 q2,uint8 q3,uint8 q4,uint8 q5,uint8 q6,uint8 q7,uint8 q8,uint8 q9,uint8 q10,
                                uint8 q11,uint8 q12,uint8 q13,uint8 q14,uint8 q15,uint8 q16,uint8 q17,uint8 q18)
{
    #ifndef GDB
        vPrintf("\n\r\n\rA %x", u16NodeId);
        vPrintf("\n\rH %d", u16Humidity);
      vPrintf("\n\rT %f", (double)((double)u16Temperature/10));
        vPrintf("\n\rV %d", u16BattVoltage);
        vPrintf("\n\rSN %d", sensorname);
        vPrintf("\n\r%c",q1);
        vPrintf("%c",q2);
        vPrintf(" %c",q3);
        vPrintf("%c",q4);
        vPrintf(" %c",q5);
        vPrintf("%c",q6);
        vPrintf(" %c",q7);
        vPrintf("%c",q8);
        vPrintf(" %c",q9);
       vPrintf("%c",q10);
        vPrintf(" %c",q11);
        vPrintf("%c",q12);
        vPrintf(" %c",q13);
        vPrintf("%c",q14);
        vPrintf(" %c",q15);
        vPrintf("%c",q16);
        vPrintf(" %c",q17);
        vPrintf("%c",q18);
 #endif
}

PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode,
                               uint16 u16AddrSrc,
                               uint8 u8SrcEP,
                               uint8 u8LQI,
                               uint8 u8DstEP,
                               uint8 u8ClusterID,
                               uint8 *pu8ClusterIDRsp,
                               AF_Transaction_s *puTransactionInd,
                               AF_Transaction_s *puTransactionRsp)
{
 uint16 u16Humidity;
 uint16 u16BattVoltage;
 uint16 u16Temperature;
 uint16 sensorname;
    uint8 q1;
    uint8 q2;
    uint8 q3;
    uint8 q4;
    uint8 q5;
    uint8 q6;
    uint8 q7;
    uint8 q8;
    uint8 q9;
    uint8 q10;
    uint8 q11;
    uint8 q12;
    uint8 q13;
    uint8 q14;
    uint8 q15;
    uint8 q16;
    uint8 q17;
    uint8 q18;
    if ((eAddrMode == APS_ADDRMODE_SHORT) && (u8DstEP == WSN_DATA_SINK_ENDPOINT))
    {
        if(u8ClusterID == WSN_CID_SENSOR_READINGS)
        {//发送至PC控制软件显示信息格式
            u16BattVoltage  = puTransactionInd->uFrame.sMsg.au8TransactionData[1];//电压高八位
            u16BattVoltage  = u16BattVoltage << 8;
            u16BattVoltage |= puTransactionInd->uFrame.sMsg.au8TransactionData[0];//电压低八位

            u16Temperature  = puTransactionInd->uFrame.sMsg.au8TransactionData[3];//温度高八位
            u16Temperature  = u16Temperature << 8;
            u16Temperature |= puTransactionInd->uFrame.sMsg.au8TransactionData[2];//温度低八位

            u16Humidity  = puTransactionInd->uFrame.sMsg.au8TransactionData[5];//湿度高八位
            u16Humidity  = u16Humidity << 8;
            u16Humidity |= puTransactionInd->uFrame.sMsg.au8TransactionData[4];//湿度低八位

            sensorname  = puTransactionInd->uFrame.sMsg.au8TransactionData[7];//节点号高八位
            sensorname  = sensorname << 8;
            sensorname |= puTransactionInd->uFrame.sMsg.au8TransactionData[6];//节点号低八位
            q1= puTransactionInd->uFrame.sMsg.au8TransactionData[8];

            q2=puTransactionInd->uFrame.sMsg.au8TransactionData[9];

            q3= puTransactionInd->uFrame.sMsg.au8TransactionData[10];

            q4=puTransactionInd->uFrame.sMsg.au8TransactionData[11];

            q5= puTransactionInd->uFrame.sMsg.au8TransactionData[12];

            q6=puTransactionInd->uFrame.sMsg.au8TransactionData[13];

            q7= puTransactionInd->uFrame.sMsg.au8TransactionData[14];

            q8=puTransactionInd->uFrame.sMsg.au8TransactionData[15];

            q9= puTransactionInd->uFrame.sMsg.au8TransactionData[16];

            q10=puTransactionInd->uFrame.sMsg.au8TransactionData[17];

            q11= puTransactionInd->uFrame.sMsg.au8TransactionData[18];

            q12=puTransactionInd->uFrame.sMsg.au8TransactionData[19];

            q13= puTransactionInd->uFrame.sMsg.au8TransactionData[20];

            q14=puTransactionInd->uFrame.sMsg.au8TransactionData[21];

            q15= puTransactionInd->uFrame.sMsg.au8TransactionData[22];

            q16=puTransactionInd->uFrame.sMsg.au8TransactionData[23];

            q17= puTransactionInd->uFrame.sMsg.au8TransactionData[24];

            q18=puTransactionInd->uFrame.sMsg.au8TransactionData[25];

            vTxSerialDataFrame(u16AddrSrc, u16Humidity, u16Temperature, u16BattVoltage,sensorname,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18);
        }
    }
    return 0;
}

 

PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEventId,
                            tuJZS_StackEvent *puStackEvent)
{
    if (eEventId == JZS_EVENT_NWK_STARTED)
    {

  // load the simple descriptor now that the network has started
  uint8 u8InputClusterCnt      = 1;
  uint8 au8InputClusterList[]  = {WSN_CID_SENSOR_READINGS};
  uint8 u8OutputClusterCnt     = 0;
  uint8 au8OutputClusterList[] = {};

  (void)afmeAddSimpleDesc(WSN_DATA_SINK_ENDPOINT,
        WSN_PROFILE_ID,
        0x0000,
        0x00,
        0x00,
        u8InputClusterCnt,
        au8InputClusterList,
        u8OutputClusterCnt,
        au8OutputClusterList);

        bNwkStarted = TRUE;
    }
}

 

2.节点

PUBLIC void vUART0_Init(void)
{
    // Enable UART 0: 19200-8-N-1
    vAHI_UartEnable(E_AHI_UART_0);
    vAHI_UartReset(E_AHI_UART_0, TRUE, TRUE);
    vAHI_UartReset(E_AHI_UART_0, FALSE, FALSE);
    vAHI_UartSetClockDivisor(E_AHI_UART_0, E_AHI_UART_RATE_19200);
    vAHI_UartSetControl(E_AHI_UART_0, FALSE, FALSE, E_AHI_UART_WORD_LEN_8, TRUE , FALSE);
    vAHI_UartSetInterrupt(E_AHI_UART_0,FALSE,FALSE,FALSE,TRUE,E_AHI_UART_FIFO_LEVEL_1);

}


 

PRIVATE void vSendData(void)
{
    // vTxSerialDataFrame(command0,command1,command2,command3,command4,command5,
     //                               command6,command7);//向气体传感器发送命令
     const uint16 SensornameNO = 1;//小节点号
   // AF_Transaction_s asTransaction[1];
   //发送到公共节点的信息格式
    asTransaction[0].u8SequenceNum = u8AfGetTransactionSequence(TRUE);
    asTransaction[0].uFrame.sMsg.u8TransactionDataLen = 26;//数据长度为18
//数据格式与协调器 程序中取出数据的格式对应
    asTransaction[0].uFrame.sMsg.au8TransactionData[0] = sBattSensor.u16Reading;//电池电量低八位
 asTransaction[0].uFrame.sMsg.au8TransactionData[1] = sBattSensor.u16Reading >> 8;//电池电量高八位
    asTransaction[0].uFrame.sMsg.au8TransactionData[2] = sTempHumiditySensor.u16TempReading;//温度低八位
 asTransaction[0].uFrame.sMsg.au8TransactionData[3] = sTempHumiditySensor.u16TempReading >> 8;//温度高八位
    asTransaction[0].uFrame.sMsg.au8TransactionData[4] = sTempHumiditySensor.u16HumidReading;//湿度低八位
 asTransaction[0].uFrame.sMsg.au8TransactionData[5] = sTempHumiditySensor.u16HumidReading >> 8;//湿度高八位
 asTransaction[0].uFrame.sMsg.au8TransactionData[6] = SensornameNO;//节点号低八位
 asTransaction[0].uFrame.sMsg.au8TransactionData[7] = SensornameNO >> 8;//节点号高八位
    asTransaction[0].uFrame.sMsg.au8TransactionData[8] =uCommandBuffer[0];//高位
    asTransaction[0].uFrame.sMsg.au8TransactionData[9] =uCommandBuffer[1];//低位
    asTransaction[0].uFrame.sMsg.au8TransactionData[10] =uCommandBuffer[2];
    asTransaction[0].uFrame.sMsg.au8TransactionData[11] =uCommandBuffer[3];
    asTransaction[0].uFrame.sMsg.au8TransactionData[12] =uCommandBuffer[4];
    asTransaction[0].uFrame.sMsg.au8TransactionData[13] =uCommandBuffer[5];
    asTransaction[0].uFrame.sMsg.au8TransactionData[14] =uCommandBuffer[6];
    asTransaction[0].uFrame.sMsg.au8TransactionData[15] =uCommandBuffer[7];
    asTransaction[0].uFrame.sMsg.au8TransactionData[16] =uCommandBuffer[8];
    asTransaction[0].uFrame.sMsg.au8TransactionData[17] =uCommandBuffer[9];
    asTransaction[0].uFrame.sMsg.au8TransactionData[18] =uCommandBuffer[10];
    asTransaction[0].uFrame.sMsg.au8TransactionData[19] =uCommandBuffer[11];
    asTransaction[0].uFrame.sMsg.au8TransactionData[20] =uCommandBuffer[12];
    asTransaction[0].uFrame.sMsg.au8TransactionData[21] =uCommandBuffer[13];
    asTransaction[0].uFrame.sMsg.au8TransactionData[22] =uCommandBuffer[14];
    asTransaction[0].uFrame.sMsg.au8TransactionData[23] =uCommandBuffer[15];
    asTransaction[0].uFrame.sMsg.au8TransactionData[24] =uCommandBuffer[16];
    asTransaction[0].uFrame.sMsg.au8TransactionData[25] =uCommandBuffer[17];

 


    (void)afdeDataRequest(APS_ADDRMODE_SHORT,       /* Address type */
                          0x0000,                   /* Destination address */
                          WSN_DATA_SINK_ENDPOINT,   /* destination endpoint */
                          WSN_DATA_SOURCE_ENDPOINT, /* Source endpoint */
                          WSN_PROFILE_ID,           /* Profile ID */
                          WSN_CID_SENSOR_READINGS,  /* Cluster ID */
                          AF_MSG,                   /* Frame type */
                          1,                        /* Transactions */
                          asTransaction,            /* Transaction data */
                          APS_TXOPTION_NONE,        /* Transmit options */
                          SUPPRESS_ROUTE_DISCOVERY, /* Route discovery mode */
                          0);                       /* Radius count */
}

 

PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEventId,
                            tuJZS_StackEvent *puStackEvent)
{
   if (eEventId == JZS_EVENT_NWK_JOINED_AS_ROUTER)
    {
        uint8 u8InputClusterCnt      = 1;
  uint8 au8InputClusterList[]  = {WSN_CID_SENSOR_READINGS};
  uint8 u8OutputClusterCnt     = 1;
  uint8 au8OutputClusterList[] = {WSN_CID_SENSOR_READINGS};

  (void)afmeAddSimpleDesc(WSN_DATA_SINK_ENDPOINT,
        WSN_PROFILE_ID,
        0x0000,
        0x00,
        0x00,
        u8InputClusterCnt,
        au8InputClusterList,
        u8OutputClusterCnt,
        au8OutputClusterList);

        bNwkJoined = TRUE;
    }
}


3.显示结果

 

A 0x1

H 159

T 79.7

V 1939

SN 1

00 03 04 02 20 05 DA 68 4A

 

4.气体传感器 通过串口数据 发给节点,节点发给协调器通过串口发给PC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ANTRK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值