zigbee 案例实验

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 实验 HomeAutomation

可以一个灯与多个开关绑定,实现多个开关控制一个灯。
可以一个开关与多个灯绑定,实现一个开关控制多个灯。
如果协调器不参与绑定,即绑定建立在多个终端设备之上,比如多个灯终端和开关终端,此时协调器下载灯或者开关的程序都行,只要它能建立网络就行,其实下载其他项目的协调器程序也行。
如果协调器参与绑定,需要按照协调器的功能来下载灯或者开关的程序。

比如

下载sampleswitch coordinatoreb-pro到板子,开关作为协调器。
下载samplelight enddeviceeb-pro到板子,灯作为终端。
两个板子依次按下right键,建立绑定,绑定成功时,sampleswitch的LED1亮。解除绑定也是两个板子依次按right键。多个灯终端与开关协调器绑定也是这个步骤。

按下协调器的up键可以对已经绑定的灯终端进行控制,其LED1。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
忻州师范学院计算机科学与技术系 实 验 报 告 学号: 姓名: 班级: 1302班 "课程名称 "无线网络技术 "实验课时 " 2 " "实验项目 "Zigbee实验 "实验时间 "2015.12.14 " "指导老师 " "实验成绩 " " "实验目的( "了解并认识Zigbee; " "本次上机实 "掌握Zigbee的配置方法及实现; " "验所涉及并 "利用Zigbee完成无线点灯实验。 " "要求掌握的 " " "知识点) " " "实验环境( "硬件部分: " "本次上机实 "PC机;Zigbee模块; " "验所使用的 "软件部分: " "平台和相关 "keil u Vision4开发环境、J-Link驱动程序。 " "软件) " " "实验内容( "一.配置路由: " "算法、程序 "1. 取出J-link仿真器,将转接口插到J-link仿真器的JTAG端,通过转接 " "、步骤和方 "线将J-link与转接板连接,通过10pin转接线将转接板与节点连接,通过J" "法) "-link的标配USB线,将J-link与电脑相连。 " " " " " "将转接口插到J-link仿真器的JTAG端 Zigbee模块 " " "2 . 将转接板与节点相连,将路由器代码下载到Zigbee模块中。 " " "配置协调: " " "将转接板与节点相连,将协调器代码下载到Zigbee模块中。 " " "先给协调器上电,再上电路由器。 " " "在节点上按SW1按键可让另一节点的指示灯亮。 " " "五.再按一次SW1按键,灯灭。 " "调试过程及 " " "实验结果( " " "详细记录程 " " "序在调试过 " " "程中出现的 " " "问题及解决 " " "方法,记录 " " "程序执行的 " " "结果) " " "总结(对上 "通过本次实验,了解并认识Zigbee;掌握Zigbee的配置方法及实现;利用" "机实验结果 "Zigbee完成无线点灯实验。每次实验都需要团队的合作,在合作中进步。" "进行分析, " " "上机心得体 " " "会及改进意 " " "见) " " "附录 "(附源程序清单可另附页) " ----------------------- zigbee实验报告全文共2页,当前为第1页。 zigbee实验报告全文共2页,当前为第2页。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值