Presentation is loading. Please wait.

Presentation is loading. Please wait.

任务十三 基于Z-Stack的串口透传.

Similar presentations


Presentation on theme: "任务十三 基于Z-Stack的串口透传."— Presentation transcript:

1 任务十三 基于Z-Stack的串口透传

2 目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

3 实训目的 通过本实训,使学生掌握基于Z-Stack的A/D采集原理、数据传输的方法,熟练无线数据传输网络组建。

4 目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

5 实训内容 由1个光敏传感器模块、2个ZigBee模块组成该实训系统,其中ZigBee模块一个为协调器,另一个终端。协调器通过串口线与PC机相连,光敏传感器模块插到终端ZigBee模块上上,终端每隔一定时间采集一次温度,并通过无线传输给协调器;协调器接收温度信息之后,通过串口上传PC机,在PC机上的串口调试软件上显示。

6 目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

7 实训原理 详见实训4。

8 目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

9 实训步骤 第一步,编写终端程序。 1.在路径C:\Texas Instruments\ZStack-CC a\Projects\zstack\Samples\SampleApp\ CC2530DB目录下找到SampleApp.eww工程,打开该工程。 2. 新建源文件,并将其命名为EndSensors.c,保存到C:\…\Samples\SampleApp\Source目录下,并把SampleApp.c的文件内容复制到EndSensors.c中。

10 实训步骤 3. 在Workspace栏内选择“EndDeviceEB”,右击App目录下的SampleApp.c,选中“Option……”,弹出如图4.1所示的对话框,然后勾选Exclude from build,再点击【OK】,目的是把SampleApp.c 文件排除在“EndDeviceEB”工程之外,如图13.1所示。 4. 为“EndDeviceEB”工程添加文件。把get_adc.c和get_adc.h两个文件复制到C:\…\Samples\SampleApp\Source目录下,并把EndSensors.c和hal_get_adc.c两个文件添加到App目录内。

11 实训步骤 图13.1 排除不需要编译的源文件

12 实训步骤 5. 修改EndSensors.c文件。
(1)增加头文件。在EndSensors.c文件中添加#include "get_adc.h"头文件。 (2)在uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数中,当终端设备加入网络时,定时5s启动SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件。

13 实训步骤 程序说明 ① 当终端设备加入网络后,ZDO_STATE_CHANGE事件有效,由于终端设备的变量SampleApp_NwkState为DEV_END_DEVICE,所以第11行的if语句有效。则调用第14—16行的定时启动事件函数。 ② 定时5s后,SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件被启动,则第19行if语句有效,则调第20行SampleApp_SendPeriodicMessage()函数,并且再次调用定时启动事件函数,如第21—22行。目的是为了每隔5s周期性地启动SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,使得SampleApp_SendPeriodicMessage()函数被周期性地调用,该函数内定义了A/D采样相关函数。

14 实训步骤 (3)void SampleApp_SendPeriodicMessage()函数完成A/D数据采集、换算、无线发送等功能。
程序说明 ① 调用get_adc()AD转换函数后,将sensor_val的十进制值转换为ASCII码,存入数组pTxData中。 ② 第10—18行,将数据发送给协调器。 (4)uint16 get_adc(void)函数定义。

15 实训步骤 第二步,编写协调器程序。 1. 在Workspace栏内选择“CoordinatorEB”,右击App目录下的get_adc.c,选中“Option……”,在弹出对话框,然后勾选Exclude from build,再点击【OK】,目的是把get_adc.c文件排除在“CoordinatorEB”工程之外。同理,将App目录下的EndSensors.c文件排除编译。 2. 在SampleApp.c文件中,编写无线接收函数,并将无线接收的数据上传给PC机。

16 实训步骤 (1)串口初始化、任务注册、发送测试“NEWLab”测试信息。在SampleApp.c文件中,添加#include "MT_UART.h"头文件;在void SampleApp_Init( uint8 task_id )函数中输入MT_UartInit( )、MT_UartRegisterTaskID( task_id )和HalUARTWrite(0,”NEWLab\n”,7)代码。 (2)进入 MT_UartInit()函数,进行相应的串口配置,MT_UartInit()函数关键代码。 配置程序: ① 第7行是串口的流控配置,右击查看其定义,可以在mt_uart.h文件中看到: #define MT_UART_DEFAULT_OVERFLOW TRUE

17 实训步骤 默认是采用流控,本实训任务不采用流控,所以将TRUE修改为FALSE。
② 第13行到第26行,是条件编译代码,根据预先定义的ZTOOL或者ZAPP选择不同的函数。其中ZTOOL和ZAPP后面的P1和P2表示串口0和串口1。在Option->C/C++的CompilerPreprocessor中,可以看到默认添加了ZTOOL_P1预编译,即表示采用ZTOOL和串口0。并把其它不需要的MT和LCD预编译项注释掉,如图13.2所示,即在预编译项前面加一个“x”,如:xMT_TASK、xMT_SYS_FUNS、xMT_ZDO_FUNC、xLCD_SUPPORTED=DEBUG。

18 实训步骤 图13.2 预编译设置

19 实训步骤 (4)接收无线数据。在uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数中,当接收到无线数据是时,AF_INCOMING_MSG_CMD事件有效,则无线数据处理函数SampleApp_MessageMSGCB( MSGpkt )被调用,该函数代码修改如下: void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint16 flashTime; switch ( pkt->clusterId ) { case SAMPLEAPP_PERIODIC_CLUSTERID: HalUARTWrite(0, “光照电压:”,9); //发送汉字

20 实训步骤 HalUARTWrite(0,&pkt->cmd.Data[0],pkt->cmd.DataLength); //发送电压值 HalUARTWrite(0,"V\n",11); //发送电压单位和换行符 break; case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );break; }

21 实训步骤 程序说明: 当接收到无线数据时,第4行case有效,通过第5—7行代码把光照电压相关信息显示在PC机上,因为终端每隔5s周期性地向协调器发送数据,所以协调器也每隔5s周期性地接收数据,并立刻上传光照电压相关信息。 第三步,编译终端、协调器程序,并烧录测试效果。 1. 在Workspace栏内选择“CoordinatorEB”,编译程序无误后下载到协调器中。通过串口线把协调器与PC机相连,打开PC机上串口调试软件,把波特率设备为38400bps。

22 实训步骤 2. 在Workspace栏内选择“EndDeviceEB”,然后编译程序,再把程序下载到终端设备中。
3. 先给协调器上电,等网络连接指示灯亮之后,再给终端设备上电,过一会儿,终端设备上的网络连接指示也常亮,表示网络组建成功。在PC上就有如图13.3所示的效果。

23 实训步骤 图13.3 PC机显示AD采集光照电压效果

24 谢谢!


Download ppt "任务十三 基于Z-Stack的串口透传."

Similar presentations


Ads by Google