"); //-->
在seniorDemo中传感器节点负责采集温度数据,将采集得到的数据发送到协调器,协调器接收到数据包之后通过对数据做加工后发往PC机。我们将传感器采集的数据成为环境数据。
static void sendGtwReport(gtwData_t *gtwData)
{
uint8 pFrame[ZB_RECV_LENGTH];
// //起始标志pFrame[0]=FE,
pFrame[FRAME_SOF_OFFSET] = CPT_SOP;
// 数据(源地址+环境数据)长度
pFrame[FRAME_LENGTH_OFFSET] = 6+SENSOR_REPORT_LENGTH;//6+9=F pFrame[1]=F
// 数据类型为无线网络数据
pFrame[FRAME_CMD0_OFFSET] = LO_UINT16(ZB_RECEIVE_DATA_INDICATION); //pFrame[2]=46
pFrame[FRAME_CMD1_OFFSET] = HI_UINT16(ZB_RECEIVE_DATA_INDICATION); // pFrame[3]=87
// 源地址
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET] = LO_UINT16(gtwData->source); //pFrame[4+0]
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET+ 1] = HI_UINT16(gtwData->source);//pFrame[4+0+1]
// 数据类型为传感器数据反馈
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET] = LO_UINT16(SENSOR_REPORT_CMD_ID); //pFrame[4+2],SENSOR_REPORT_CMD_ID=2
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET+ 1] = HI_UINT16(SENSOR_REPORT_CMD_ID);//pFrame[4+2+1]
// 环境数据的长度
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET] = LO_UINT16(SENSOR_REPORT_LENGTH); //9
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET+ 1] = HI_UINT16(SENSOR_REPORT_LENGTH);//0
// 环境数据实体
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET] = gtwData->temp;//温度的整数部分pFrame[4+6]
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 1] = gtwData->voltage; //电压
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 2] = LO_UINT16(gtwData->parent); //父节点地址低16位
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 3] = HI_UINT16(gtwData->parent);//父节点地址高16位
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_TEMP2_OFFSET] = gtwData->temp_2;//温度的小数部分
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_HUMIDITY_OFFSET] = gtwData->Humidity;//湿度,为0
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_X_OFFSET] = gtwData->X_Sensor;//3D重力加速度速度,以下3项为0
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_Y_OFFSET] = gtwData->Y_Sensor;
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_Z_OFFSET] = gtwData->Z_Sensor;
//帧校验序列
pFrame[ZB_RECV_LENGTH - 1] = calcFCS(&pFrame[FRAME_LENGTH_OFFSET], (ZB_RECV_LENGTH - 2) );
// Write report to UART
HalUARTWrite(HAL_UART_PORT_0,pFrame, ZB_RECV_LENGTH);
}
由上述代码可以总结出,协调器与PC机通信的数据格式为:
D19 | 帧校验 |
|
D18 | 3D加速度Z轴 |
|
D17 | 3D加速度Y轴 |
|
D16 | 3D加速度X轴 |
|
D15 | 温度值小数部分 |
|
D14 |
湿度 |
|
D13 | 父地址高8位 |
|
D12 | 父地址低8位 |
|
D11 | 电压值 |
|
D10 | 温度值整数部分 |
|
D9 | 环境数据长度高8位 | 0 |
D8 | 环境数据长度低8位 | 9 |
D7 | 数据类型高8位 | 0 |
D6 | 数据类型低8位 | 2 |
D5 | 源地址高8位 |
|
D4 | 源地址低8位 |
|
D3 | 数据类型高8位 | 87 |
D2 | 数据类型低8位 | 46 |
D1 | 数据长度 | F |
D0 | 起始标志 | FE |
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。