概述
ZStack-CC2530-2.3.0-1.4.0
/* Switches (keys) */
#define HAL_KEY_SW_1 0x01 // Joystick up
#define HAL_KEY_SW_2 0x02 // Joystick right
#define HAL_KEY_SW_5 0x04 // Joystick center
#define HAL_KEY_SW_4 0x08 // Joystick left
#define HAL_KEY_SW_3 0x10 // Joystick down
#define HAL_KEY_SW_6 0x20 // Button S1 if available
#define HAL_KEY_SW_7 0x40 // Button S2 if available
/* Joystick */
#define HAL_KEY_UP 0x01 // Joystick up
#define HAL_KEY_RIGHT 0x02 // Joystick right
#define HAL_KEY_CENTER 0x04 // Joystick center
#define HAL_KEY_LEFT 0x08 // Joystick left
#define HAL_KEY_DOWN 0x10 // Joystick down
zigbee 实验 SampleApp
实验采用按键(joystick)来控制工作组内模块 LED 灯闪烁,模块在一个工作组内时,它以下的节点可以控制此模块的 LED灯闪烁。
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。加入网络后会自动加入工作组。
节点与协调器、路由器加入同一工作组后,就可以控制协调器和路由器的 D1灯闪烁了;按joystick的 UP键,可以控制协调器和路由器的 D1灯闪烁。同样,按路由器的 UP键,也可以控制主机的 D1灯闪烁。协调器和路由器也可以随时退出工作组或加入工作组,
当协调器或路由器在工作组内时, 按下 RIGHT 键,就可以退出工作组,反之则加入工作组 ,一旦退出工作组,终端节点就无法控制主机或路由器了.
zigbee 实验 SerialApp
程序实现两个节点之间的绑定与通讯,同时每个节点可与其“上位机”的串口终端进行通讯
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
两个节点就开始相互定时给对方发送数据,此时用串口延长线连接节点和PC,在PC端启动串口调试助手。设置对应的COM口和波特率38400。即可监视串口数据。
但是一般需要更改SerialApp.c的函数SerialApp_Init的 uartConfig.flowControl = FALSE。
zigbee 实验 GenericApp
该实验是将两个模块相互绑定后,进行数据对传,两个模块之间默认相互发送字符串“Hello World”。
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
两个节点就开始相互定时给对方发送数据,并在对方的液晶屏上显示出来(发送的数据为"Hello World")
zigbee 实验 TransmitApp
这个实验是一个无线传输数据速度测试实验,主要是完成模块间的绑定、测试两个模块之间相互传输数据的速度实验
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
按下其中一个板子的up键可以进行无线数据传输速度测试了。停止发送也按up键。
LCD 第一排显示此模块接收数据的速度和总字节数,第二排 显示此模块发送数据的速度与总字节数。
按下 down,可以清除收发数据的计数值。
可以一个开关与多个灯绑定,实现一个开关控制多个灯。
如果协调器不参与绑定,即绑定建立在多个终端设备之上,比如多个灯终端和开关终端,此时协调器下载灯或者开关的程序都行,只要它能建立网络就行,其实下载其他项目的协调器程序也行。
如果协调器参与绑定,需要按照协调器的功能来下载灯或者开关的程序。
比如
zigbee 实验 sensordemo
下载collectoreb-pro到板子,按up键板子自动重启并设置为协调器而建立网络,此时 按下right键,开启接收报告功能,lcd显示 GATEWAY MODE
下载sensoreb-pro到板子,此时板子自动加入网络,而成为终端节点,按down键开始发送报告。
下载collectoreb-pro到板子,,此时板子自动加入网络,而成为路由器,按down键开始发送报告。
终端会选择信号最好的路由器(协调器)作为其父设备。
节点发出的数据是:温度电压和父地址
协调器接收到节点数据
协调器通过串口发出
上位机从串口接收到
zigbee 实验 SimpleApp
数据收集实验:
下载SimpleCollectorEB-pro,按up键板子自动重启并设置为协调器而建立网络,此时 按下up键允许绑定
下载SimpleSensorrEB-pro,按up键板子自动重启并 设置为终端,自动加入网络,加入成功之后,自动请求绑定,绑定成功之后,自动发送传感器数据
灯控制器实验:
下载SimpleControllerEB-pro,按up键板子自动重启并设置为协调器而建立网络,此时按下up键允许绑定
下载SimpleSwitchEB-pro,按up键板子自动重启并设置为终端,自动加入网络,加入成功之后,按up键请求绑定,绑定成功之后,使用right键控制协调器的led1
/* Switches (keys) */
#define HAL_KEY_SW_1 0x01 // Joystick up
#define HAL_KEY_SW_2 0x02 // Joystick right
#define HAL_KEY_SW_5 0x04 // Joystick center
#define HAL_KEY_SW_4 0x08 // Joystick left
#define HAL_KEY_SW_3 0x10 // Joystick down
#define HAL_KEY_SW_6 0x20 // Button S1 if available
#define HAL_KEY_SW_7 0x40 // Button S2 if available
/* Joystick */
#define HAL_KEY_UP 0x01 // Joystick up
#define HAL_KEY_RIGHT 0x02 // Joystick right
#define HAL_KEY_CENTER 0x04 // Joystick center
#define HAL_KEY_LEFT 0x08 // Joystick left
#define HAL_KEY_DOWN 0x10 // Joystick down
zigbee 实验 SampleApp
实验采用按键(joystick)来控制工作组内模块 LED 灯闪烁,模块在一个工作组内时,它以下的节点可以控制此模块的 LED灯闪烁。
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。加入网络后会自动加入工作组。
节点与协调器、路由器加入同一工作组后,就可以控制协调器和路由器的 D1灯闪烁了;按joystick的 UP键,可以控制协调器和路由器的 D1灯闪烁。同样,按路由器的 UP键,也可以控制主机的 D1灯闪烁。协调器和路由器也可以随时退出工作组或加入工作组,
当协调器或路由器在工作组内时, 按下 RIGHT 键,就可以退出工作组,反之则加入工作组 ,一旦退出工作组,终端节点就无法控制主机或路由器了.
zigbee 实验 SerialApp
程序实现两个节点之间的绑定与通讯,同时每个节点可与其“上位机”的串口终端进行通讯
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
两个节点就开始相互定时给对方发送数据,此时用串口延长线连接节点和PC,在PC端启动串口调试助手。设置对应的COM口和波特率38400。即可监视串口数据。
但是一般需要更改SerialApp.c的函数SerialApp_Init的 uartConfig.flowControl = FALSE。
zigbee 实验 GenericApp
该实验是将两个模块相互绑定后,进行数据对传,两个模块之间默认相互发送字符串“Hello World”。
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
两个节点就开始相互定时给对方发送数据,并在对方的液晶屏上显示出来(发送的数据为"Hello World")
zigbee 实验 TransmitApp
这个实验是一个无线传输数据速度测试实验,主要是完成模块间的绑定、测试两个模块之间相互传输数据的速度实验
下载coordinatoreb-pro到板子,
下载enddeviceeb-pro到板子,其会自动加入网络。
两个板子依次按下right键,建立绑定,绑定成功时,两个板子的LED1都亮。解除绑定也是两个板子依次按right键。
按下其中一个板子的up键可以进行无线数据传输速度测试了。停止发送也按up键。
LCD 第一排显示此模块接收数据的速度和总字节数,第二排 显示此模块发送数据的速度与总字节数。
按下 down,可以清除收发数据的计数值。
zigbee 实验 HomeAutomation
可以一个灯与多个开关绑定,实现多个开关控制一个灯。可以一个开关与多个灯绑定,实现一个开关控制多个灯。
如果协调器不参与绑定,即绑定建立在多个终端设备之上,比如多个灯终端和开关终端,此时协调器下载灯或者开关的程序都行,只要它能建立网络就行,其实下载其他项目的协调器程序也行。
如果协调器参与绑定,需要按照协调器的功能来下载灯或者开关的程序。
比如
下载sampleswitch coordinatoreb-pro到板子,开关作为协调器。
下载samplelight enddeviceeb-pro到板子,灯作为终端。
两个板子依次按下right键,建立绑定,绑定成功时,sampleswitch的LED1亮。解除绑定也是两个板子依次按right键。多个灯终端与开关协调器绑定也是这个步骤。
zigbee 实验 sensordemo
下载collectoreb-pro到板子,按up键板子自动重启并设置为协调器而建立网络,此时 按下right键,开启接收报告功能,lcd显示 GATEWAY MODE
下载sensoreb-pro到板子,此时板子自动加入网络,而成为终端节点,按down键开始发送报告。
下载collectoreb-pro到板子,,此时板子自动加入网络,而成为路由器,按down键开始发送报告。
终端会选择信号最好的路由器(协调器)作为其父设备。
节点发出的数据是:温度电压和父地址
uint8 pData[SENSOR_REPORT_LENGTH];
static uint8 reportNr=0;
uint8 txOptions;
// Read and report temperature value
pData[SENSOR_TEMP_OFFSET] = readTemp();
// Read and report voltage value
pData[SENSOR_VOLTAGE_OFFSET] = readVoltage();
pData[SENSOR_PARENT_OFFSET] = HI_UINT16(parentShortAddr);
pData[SENSOR_PARENT_OFFSET + 1] = LO_UINT16(parentShortAddr);
协调器接收到节点数据
gtwData.parent = BUILD_UINT16(pData[SENSOR_PARENT_OFFSET+ 1], pData[SENSOR_PARENT_OFFSET]);
gtwData.source=source;
gtwData.temp=*pData;
gtwData.voltage=*(pData+1);
// Flash LED 2 once to indicate data reception
HalLedSet ( HAL_LED_2, HAL_LED_MODE_FLASH );
// Update the display
#if defined ( LCD_SUPPORTED )
HalLcdWriteScreen( "Report", "rcvd" );
#endif
// Send gateway report
sendGtwReport(>wData);
协调器通过串口发出
uint8 pFrame[ZB_RECV_LENGTH];
// Start of Frame Delimiter
pFrame[FRAME_SOF_OFFSET] = CPT_SOP; // Start of Frame Delimiter
// Length
pFrame[FRAME_LENGTH_OFFSET] = 10;
// Command type
pFrame[FRAME_CMD0_OFFSET] = LO_UINT16(ZB_RECEIVE_DATA_INDICATION);
pFrame[FRAME_CMD1_OFFSET] = HI_UINT16(ZB_RECEIVE_DATA_INDICATION);
// Source address
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET] = LO_UINT16(gtwData->source);
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET+ 1] = HI_UINT16(gtwData->source);
// Command ID
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET] = LO_UINT16(SENSOR_REPORT_CMD_ID);
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET+ 1] = HI_UINT16(SENSOR_REPORT_CMD_ID);
// Length
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET] = LO_UINT16(4);
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET+ 1] = HI_UINT16(4);
// Data
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET] = gtwData->temp;
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 1] = gtwData->voltage;
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 2] = LO_UINT16(gtwData->parent);
pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 3] = HI_UINT16(gtwData->parent);
// Frame Check Sequence
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);
上位机从串口接收到
//-----------------------------------------------------------------------------
/** brief Pops a single packet from the local data buffer
*
* Search for Start Of Packet(SOP) in Local UART buffer.
* If SOP found, check if the complete packet is given in the buffer.
* The total packet is given in the following format:
* SOP(1) + COMMAND(2) + LENGTH(1) + PACKET(n) + FCS(1)
*
*
* param[out] pLength
* Length of current data packet.
* param[out] pData
* Pointer to data buffer.
*
* return
* b bool. TRUE when the returned data is valid, otherwise FALSE.
*/
//-----------------------------------------------------------------------------
bool ComPortThread::PopUartBuffer(int *pLength, BYTE *pData)
{
// search for sop
if( SearchForSop() ){
// Fetch the data length
*pLength = uartBuffer.pData[uartBuffer.outPos + 1] + LEN_CMD + LEN_LEN;
int totalPacketLength = LEN_SOP + *pLength + LEN_FCS;
if(uartBuffer.outPos + totalPacketLength - 1 < uartBuffer.inPos)
{
// check CRC
if( CrcValid( &uartBuffer.pData[uartBuffer.outPos + 1], totalPacketLength - LEN_SOP) )
{
// if CRC ok then extract data. Copy all data from SOP byte
memcpy(pData, uartBuffer.pData + uartBuffer.outPos + LEN_SOP, *pLength);
uartBuffer.outPos += totalPacketLength;
uartBuffer.bufferedCount -= totalPacketLength;
return true;
}
else
{
// Invalid CRC, Continue with the first byte after the invalid SOP
uartBuffer.outPos++;
}
}
else
{
if (*pLength > m_maxDataLength)
{
// Packet to long and can be seen as corrupted. Continue with the first byte after
// the invalid SOP.
uartBuffer.outPos++;
}
}
}
return false;
} // PopUartBuffer
zigbee 实验 SimpleApp
数据收集实验:
下载SimpleCollectorEB-pro,按up键板子自动重启并设置为协调器而建立网络,此时 按下up键允许绑定
下载SimpleSensorrEB-pro,按up键板子自动重启并 设置为终端,自动加入网络,加入成功之后,自动请求绑定,绑定成功之后,自动发送传感器数据
灯控制器实验:
下载SimpleControllerEB-pro,按up键板子自动重启并设置为协调器而建立网络,此时按下up键允许绑定
下载SimpleSwitchEB-pro,按up键板子自动重启并设置为终端,自动加入网络,加入成功之后,按up键请求绑定,绑定成功之后,使用right键控制协调器的led1
refer to qiujie zigbee, thanks
转载于:https://www.cnblogs.com/-song/archive/2013/02/26/3331822.html
最后
以上就是风趣野狼为你收集整理的zigbee 案例实验的全部内容,希望文章能够帮你解决zigbee 案例实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复