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