通信实训Jennic-WSN
更新时间:2023-07-24 08:59:01 阅读量: 实用文档 文档下载
- 通信行程卡推荐度:
- 相关推荐
目 录
实验一 Jennic-WSN开发环境 ............................................................... 1
实验二 GPIO及LCD使用实验 ............................................................... 4
实验三 简单点对点无线通信实验 ........................................................ 8
实验四 两个EndDevice之间的无线通信实验 .................................. 13
实验五 DIO中断实验 ........................................................................... 21
实验六 定时器实验 .............................................................................. 25
实验七 UART实验 ................................................................................. 29
实验八 ADC及数据采集实验 ............................................................... 34
实验九 休眠和掉电保护实验 .............................................................. 40
心得体会 ................................................................................................... 47
实验一 Jennic-WSN开发环境
一、实验内容
1. 熟悉基于JN5139芯片所设计的WSN开发板及其部件。
2. 软件的安装于调试。
3.熟悉常用API接口函数。
二、实验原理
1. 基于JN5139芯片所设计的WSN开发板,其部件如下:
U1: JN5139系列Zigbee模块;
U2: 板载光照度传感器;
U3: 板载温湿度一体传感器;
J3: 外供电(5VDC)接口;
Swith: 供电开关;
J7: 编程与运行状态选择,左跳并给传感器板加电,则进入可编程状态,或者在加电的
情况下,按住RESET按钮,左跳J7,然后放开RESET按钮,再右跳J7,也可进入可编程状态,退出可编程状态,只需要按一下RESET按钮即可;
J8: Flash写保护跳选,编程与运行都跳选到RUN(右跳);
DB9: RS232编程接口;
UART0: 串口0;
JP6: 模块所有管脚的引出排线(引脚编号如图1-4所示,功能如表1-1所示);
LCD: 液晶接口;
Power: 电源指示灯;
REST: 复位按键;
LED3,LED2,LED1,LED0:可编程LED,分别对应DIO19、DIO18、DIO17、DIO16;
SW3,SW2,SW1,SW0:可编程按键,分别对应DIO20、DIO11、DIO10、DIO9;
GND: 地。
2. 软件的安装与调试
(1)建立开发环境
在光盘中找到software文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司网站上获得该文件)并运行。在安装过程中,最简单的方法是按默认设置安装。
(2)编写程序代码并进行下载与调试
编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子菜单或点击图标建立可执行二进制代码文件。
若工程编译(Build)成功,则可在C:\Jennic\cygwin\jennic\SDK\Application\test\JN5139_ Build\Release目录下生成test.bin文件。否则,出错信息会显示在信息窗口中,根据出错信息调试程序。
Jennic JN51xx Flash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx
模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。
Jennic JN51xx Flash可编程器的用户界面如图1-18所示,它可以将* .bin文件下载到目标板或模块中,下载步骤如下:
① 用串口线连接PC机和目标板或模块。
②运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。
③ 将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。
④ 在图1-18所示的Flash可编程界面上点击Browse按钮(图中①处)查找并选择要下载的目标文件。
⑤ 选择好目标文件后,点击Progrm按钮(图中②处)开始下载。在下载的过程中会显示一个下载的进度条,如图1-19所示。当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。如果遇到错误,请尝试重新下载。
⑥ 成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。
(3)常用API接口函数介绍
应用程序初始化函数如下:
AppColdStart( )
应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。该函数需要完成以下功能:1. 通过设置函数中的参数值来设置信道号(JZS_sConfig.u32Channel)和PAN ID(JZS_sConfig.u16PanId); 2. 调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee 协议栈;3. 调用函数vInit( )对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;4. 调用bBosRun(TRUE)来启动操作系统BOS。用户可根据具体的应用设计该函数。
AppWarmStart( )
结点从内存供电的休眠模式唤醒的时候将进入这个函数。启动后所有的内存数据都没有丢失。如果设备不需要休眠唤醒功能,这个函数可以为空。用户可根据具体的应用设计该函数。一般情况下,该函数会调用AppColdStart( )重新启动设备。
应用程序调用协议栈的函数如下:
JZS_u32InitSystem( )
初始化Jennic ZigBee协议栈。
JZS_vStartStack ( )
设备将作为Coordinator、Router或者End Device启动。如果是Coordinator将启动网络,如果是Router或者End Device将加入网络。
JZS_vStartNetwork ( )
手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为JZS_EVENT_NWK_STARTED JZS_EVENT_FAILED_TO_START_NETWORK 。
vAppSaveContexts ( )
保存网络参数以及用户的数据,如果你的应用是固定点的话,建议你进行网络参数的保存。
u16AppGetContextSize ( )
用来获取保存的网络参数以及用户数据的尺寸。
vAppGetContexts ( )
读取保存的网络参数的内容。
协议栈调用应用函数的函数如下:
JZA_boAppStart( )
让用户可以在协议栈启动前定义endpoint的descriptor,通常开发人员应该在这个函数中调用JZS_vStartStack启动协议栈。
JZA_vStartEvent( )
协议栈将通过这个函数反馈网络层的一些网络事件,比如网络启动成功、结点加入成功或者数据发送完成等。
JZA_vPeripheralEvent( )
该函数主要用来处理外部的硬件中断,比如按钮、定时器、UART等。
JZA_vAppEventHandler( )
BOS周期性地调用该函数处理硬件中断。用户可以利用它进行网络状态的判断和按钮的检查等,也可以在这个函数中,写入自己的应用程序。在设计该函数时,要尽可能地使其运行时间短,以便BOS调度其他活动事件。
JZA_vAppDefineTasks( )
该函数用于向BOS注册自己的用户任务,一般很少使用该函数。
JZA_bAfMsgObject( )
收到其他结点发送来的MSG帧的处理函数。
通信新技术综合训练报告
实验二 GPIO及LCD使用实验
一、实验内容
1. 运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮/灭状态。
2. 设计一个程序,实现LED自动闪烁,周期1秒。
3. 设计一个程序,按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。
二、实验原理
1. AppColdStart( )
作用:应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。该函数需要完成以下功能:a.通过设置函数中的参数值来设置信道号(JZS_sConfig.u32Channel)和PAN ID(JZS_sConfig.u16PanId); b.调用初始化子程序。
2. AppWarmStart( )
作用:该函数会调用AppColdStart( )重新启动设备。
3. JZS_vStartStack ( )
作用:启动网络,设备作为Coordinator启动。
4. JZA_vAppEventHandler( )
作用:BOS周期性地调用该函数处理硬件中断。进行网络状态的判断和按钮的检查。检查若有按键,则调用按键程序。
5. 按键子程序vProcessSplashKeyPress( )
作用:通过调用该程序,对按键进行处理,利用case语句:按键0,LED0亮灭;按键1,LED1亮灭;按键2,LED2亮灭;按键3,LED3亮灭。
6. vInit()
作用:a.初始化LED和按键; b. 调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee 协议栈; c. 调用bBosRun(TRUE)来启动操作系统BOS。
三、软件设计
1. 运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮/灭状态。
(1)流程图:
(2)工作过程:
①执行AppColdStart( )函数,设置信道号和PAN ID;
②调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;
③调用JZS_vStartStack ( )函数,启动网络,启动成功后,灭灯0;
④调用JZA_vAppEventHandler( )函数(BOS时钟周期性调用函数),如果网络启动成功,则读取按键值,若有键按下,则将按键允许标志去掉,然后调用按键子程序,最后周期性调用vAppTick()函数,用于按键消抖;
⑤调用按键子程序vProcessSplashKeyPress( ),执行按键指令,控制相应LED灯亮灭,以达到设计要求。
2. 实现LED自动闪烁,周期1秒。
(1)流程图:
(2)工作过程:
①执行AppColdStart( )函数,设置信道号和PAN ID;
②调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;
③调用JZS_vStartStack ( )函数,启动网络,启动成功后,灭灯0;
④调用JZA_vAppEventHandler( )函数(BOS时钟周期性调用函数),如果网络启动成功,则用bBosCreateTimer()函数周期性调用vAppTick()函数,周期为1s;
⑤调用vAppTick()函数,定义一个标志位变量LED,LED从0~2循环变化,利用vLedControl(LED,TRUE),并且在函数结尾再自己调用自己,使LED灯实现周期性闪烁。
3.按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。
(1)流程图:
(2)工作过程:
①执行AppColdStart( )函数,设置信道号和PAN ID;
②调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;
③调用JZS_vStartStack ( )函数,启动网络。
④调用JZA_vAppEventHandler( )函数(BOS时钟周期性调用函数),如果网络启动成功,则读取按键值,接下来调用vLcdShadowClear()函数清除影子内存,display(shu, SIZE,2)函数写影子内存vLcdRefresh()函数液晶显示,若有键按下,则将按键允许标志去掉,然后调用按键子程序,最后周期性调用vAppTick()函数,用于按键消抖;
⑤调用按键子程序vProcessSplashKeyPress( ),执行case语句:按键0,调用jia() 函数,对液晶显示的数进行加1;按键1,调用jian() 函数,对液晶显示的数进行减1;
四、实验结果与分析
1. SW0~SW3分别控制LED0~LED3,按下对应的键,就能使对应的灯改变当前状态,如果亮的就灭,如果灭的就亮,符合设计要求。
2. 网络启动成功(LED0灭)后,LED灯从0~3以周期1秒的速度自动闪烁,符合设计要求。
3. 网络启动成功后,液晶上显示初始数据“0001”,此时按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。符合设计要求。
五、存在问题和解决方法
1. 在做第二个设计的时候,发现自动从0~3自动闪烁不能实现。
解决方法:在周期性调用的vAppTick()函数中,在将LED赋值后还要调用函数自身,这也才能达到此函数不停的执行,LED灯自动闪烁。
2. 第三个设计中,数据不能正常显示,显示的是一些乱码。
解决方法:将4位数据转换成四个字符显示,这样就可以正常显示了。
通信新技术综合训练报告
实验三 简单点对点无线通信实验
一、实验内容
1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。
2. 分别为Coordinator和EndDevice设计一个程序,其功能为:按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。
二、实验原理
1. 创建和发送数据请求函数afdeDataRequest( )
该函数属于AFDE(AF Sub-layer Data Entity) 类函数,用来向网络层发出数据发送的请求。
2. 收到MsgObject调用的函数JZA_bAfMsgObject ( )
该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。在程序设计中可对接收到的数据进行处理,也可根据接收的指令进行操作。
3. 简单设备描述函数afmeAddSimpleDesc( )
该函数属于AFME(AF Sub-layer Management Entity) 类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(simple descriptor)。如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。
三、软件设计
1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。
(1)流程图:
Coordinator:
Enddevice:
(2)工作过程:
Coordinator:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动后,灭灯0,若有新结点加入,灭灯1;判断是否SW3被按下,若按下了则调用vSendData()函数向enddevice发送一个数据2;在程序运行过程中若接收到MSG信息,则调用vLedControl(0,bToggle)控制coord的灯0亮灭 。
Enddevice:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断是否SW0被按下,若按下了则调用vSendData()函数向coordinator发送一个数据2;在程序运行过程中若接收到MSG信息,则调用vLedControl(3,bToggle)控制enddevice的灯3亮灭 。
2. 分别为Coordinator和EndDevice设计一个程序,其功能为:按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。
(1)流程图:
Coordinator:
Enddevice:
(2)工作过程:
Coordinator:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动后,灭灯0,若有新结点加入,灭灯1;判断是否SW0被按下,若按下了,则调用vLcdShadowClear()函数清除影子内存, display(y, SIZE,2)函数写影子内存,再写影子内存前将数据转换成字符,vLcdRefresh()函数将影子内存的内容复制到LCD并显示,调用函数vSendData()向enddevice发送x;在程序运行过程中若接收到enddevice发送的数据,则调用vLedControl(3,bToggle)控制coordinator的灯3亮灭,再调用vLcdShadowClear()、display(y, SIZE,2)、 vLcdRefresh()三个函数显示,再调用函数vSendData()向enddevice发送x。
Enddevice:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断若接收到coordinator发送的数据,则调用vLedControl(3,bToggle)控制coordinator的灯3亮灭,再将接收的数据加11(本人学号),最后调用BOS时钟周期性调用vAppTick函数,函数中调用vSendData()向coordinator发送x,这样就能实现定时发送。
四、实验结果与分析
1. 网络启动成功后,即coordinator灯0,1熄灭,enddevice灯1熄灭;按下coordinator的SW3,则enddevice的LED3亮,按下enddevice的SW0,则coordinator的LED0亮。可见能够达到按键控制对方的效果,符合设计要求。
2. 网络启动成功后,即coordinator灯0,1熄灭,enddevice灯1熄灭;按下coordinator的SW0液晶上显示初始数据“0011”,接下来enddevice的LED3状态变化,1s后coordinatorLED3状态改变,且显示数据加11,这样循环下去。可见符合设计要求。
分析:在网络启动后,有新结点加入时coordinator可以获得其短地址,因此可以将数据发送给enddevice,enddevice在接收到coordinator的消息后也相应获得了其短地址,接下去就可以相互发送数据。
五、存在问题和解决方法
1. 在下载完程序运行时,coordinator的灯0无法熄灭,从而导致所有操作无效。
解决方法:coordinator的LED0不灭,说明无法启动网络,此时应该考虑信道干扰问题,所以我将信道改了一下,改了16号信道,再运行就成功了。
2. 液晶不能正常显示。
解决方法:经考虑发现,发送接收的数据,显示的是字符,所以不能直接将接收的数据写入影子内存,所以我在display()函数中最前面加入了数据转换成字符的语句,接下来再进行写影子内存,这样显示就正常了。
通信新技术综合训练报告
实验四 两个EndDevice之间的无线通信实验
一、实验内容
1. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址。按下EndDevice A的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDevice B的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDevice A收到应答后LED0也处于点亮状态,表示双方绑定成功。之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。
2. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址及绑定的媒介。按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
二、实验原理
1. 通过对方的MAC地址获得它的16位短地址
在基于Jennic ZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。如果一个设备(请求者)知道另一个设备的MAC地址时,则请求者可通过调用zdpNwkAddrReq( )函数广播查寻与该MAC地址相匹配的结点,当匹配的结点收到该数据包则返回自己的短地址给请求者,请求者即可用该短地址与其进行通信。
2. 通过广播请求对方绑定获得它的16位短地址
在使用afdeDataRequest( )函数发送数据包时,将16位的目标地址设置为0xffff,即可以广播的形式将数据包发送出去。一个设备(请求者)想获取另一个设备的16位短地址的方法是:发送一个广播请求绑定指令数据包,符合条件的结点(如判断指令包内容,按下按钮等)发送应答包(含自己的短地址)给请求者,请求者即可用该短地址与其进行通信。
3. 通过发送请求/应答绑定信息给Coordinator获得对方的16位短地址
按动EndDevice或Router按钮,调用afdeDataRequest( )函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest( )函数向Coordinator发送绑定应答信息,在有效定时时间内若
Coordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。
4. 网络地址请求函数zdpNwkAddrReq( )
在Coordinator与EndDevice实现的点对点实验介绍了Coordinator获取16位短地址的方法,而对于EndDevice和Router,当一个结点知道另一个结点的MAC地址后,则可以通过网络地址请求函数zdpNwkAddrReq( )以广播的方式发送数据包,查找与该MAC地址相匹配的结点在网络中的短地址。协议栈可通过调用JZA_vZdpResponse( )函数处理响应消息。
5.网络地址请求响应函数JZA_vZdpResponse( )
JZA_vZdpResponse( )是一个协议栈调用应用程序的函数,当一个结点通过zdpNwkAddrReq( )发送查找另一个结点的短地址后,匹配的结点发送的应答消息可通过请求者的协议栈调用JZA_vZdpResponse( )处理。
三、软件设计
1. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址。按下EndDevice A的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDevice B的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDevice A收到应答后LED0也处于点亮状态,表示双方绑定成功。之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。
(1)流程图:
Coordinator:
通信新技术综合训练报告 EnddeviceA: nddeviceA:
实验四 两个 EndDevice 之间的无线通信实验
第 15 页,共 48 页
(2)工作过程:
Coordinator:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动后,灭灯0。只是负责建网。
EnddeviceA:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断若按下SW0键,则调用vSendData(0)函数发送广播信息(我发送的为数据0,目标地址为0xffff);判断是否收到应答信息(EnddeviceB发送的数据0),若收到,则调用vLedControl(1,TRUE)控制灯0亮,并且获取对方短地址,此时能够与EnddeviceB进行通信;读取按键值,若读取成功,调用vProcessSplashKeyPress()函数进行按键处理;同时若收到目标地址的MSG信息,则执行对应控制指令。
EnddeviceB:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断若接收到广播信息(为数据0),获取对方短地址,则现在若按下SW0,则调用vLedControl(1,TRUE)控制LED0亮,并且调用vSendData(0)函数发送应答信息(数据0),此时与EnddeviceA建立通信 ;读取按键值,若读取成功则调用vProcessSplashKeyPress()函数进行按键处理;同时若收到目标地址的MSG信息,则执行对应控制指令。
2. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址及绑定的媒介。按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
(1)流程图:
Coordinator:
通信新技术综合训练报告 enddeviceA:
实验四 两个 EndDevice 之间的无线通信实验
开始
初始化子程序否 是否成功加入网络是
读取按键值是否按下SW0 是
否
调用vSendData()函数发送绑定请求信息(数据0)
调用vAppTickLED1函数定时闪烁10s
否
是否收到短地址是
点亮LED0 将收到的短地址保存为目标地址
读取按键值
否
有MSG信息? 是
是否有按键按下 数据1 SW0 SW1 SW2 SW3 发送3 取消绑定
数据2 控制LED2
SW3 控制LED3
取消绑定
发送2
调用vAppTickLED函数定时闪烁3s
第 18 页,共 48 页
(2)工作过程:
Coordinator:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动后,灭灯0。判断若收到enddeviceA的绑定应答信息(数据0),保存其短地址为addr1, BOS时钟周期性调用vAppTickLED函数定时闪烁10s;在10s内若收到enddeviceB的绑定应答信息,调用vLedControl(0,TRUE)控制灯0亮,保存其短地址给addr2,并发送给enddeviceA,再将addr1发送给enddeviceB。此时coordinator完成任务。
EnddeviceA:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断若按下SW0键,则调用vSendData(0)函数向coordinator发送绑定请求信息(数据0),BOS时钟周期性调用vAppTickLED1函数定时闪烁10s;若收
到coordinator发送的短地址,则保存短地址为目标地址,并调用vLedControl(1,TRUE)控制灯1亮;读取按键值,若读取成功,调用vProcessSplashKeyPress()函数进行按键处理;同时若收到目标地址的MSG信息,则执行对应控制指令。
EnddeviceB:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,加入网络,加入成功后,灭灯0;判断若按下SW0键,则调用vSendData(0)函数向coordinator发送绑定应答信息(数据9),BOS时钟周期性调用vAppTickLED1函数定时闪烁5s;若收到coordinator发送的短地址,则保存短地址为目标地址,并调用vLedControl(1,TRUE)控制灯1亮;读取按键值,若读取成功,调用vProcessSplashKeyPress()函数进行按键处理;同时若收到目标地址的MSG信息,则执行对应控制指令。
四、实验结果与分析
1. 当coordinator的LED0灭掉后,按下enddeviceA的SW0,enddeviceB的LED0闪烁,此时按下其SW0,两个enddevice的LED0都点亮,之后按下每个EndDevice的按钮SW2、SW3可分别切换对方对应LED2、LED3亮/灭状态。如果按下任何EndDevice的SW1,各EndDevice的LED0灭,且LED1闪烁3秒,此时所有操作无效。
分析:coordinator的LED0熄灭后,建网成功,enddevice获得各自短地址,按下enddeviceA的SW0,发送广播消息,enddeviceB收到后同时获得对方短地址,此时按下SW0向enddeviceA发送应答消息(数据0),enddeviceA也获得了enddeviceB的短地址,此时就能进行通信,当按下其中一个的SW1时,将各自短地址初始化为0,就解除了绑定关系。
2. 当coordinator的LED0灭掉后,按下enddeviceA的SW0,此时enddeviceA与coordinator的LED0同时闪烁,在10s内按下enddeviceB的SW0,coordinator的LED0灭,接着enddeviceA与enddeviceB的LED0点亮,此时按下enddeviceA的SW2或SW3,enddeviceB的对应LED2和LED3改变当前状态(由亮变灭或由灭变亮),按下enddeviceB的SW2或SW3也是如此。若按下其中一个的SW1,对应的LED0闪烁3s,此时所有操作无效。
分析:按下enddeviceA的SW0后coordinator接收绑定请求信息,当enddeviceB按下SW0后,coordinator确定绑定应答信息,给enddeviceA与enddeviceB建立绑定关系,此时两者就能正常通信了。当按下其中一个的SW1时,将各自短地址初始化为0,就解除了绑定关系。
五、存在问题和解决方法
1. enddeviceA与enddeviceB不能建立绑定关系。
解决方法:经过分析知道原因是coordinator不能成功发送短地址给enddevice,我将原来vSendData(uint8 data)改成了vSendData(uint8 data,uint16 addr16),这样就能发送16位短地址了。
正在阅读:
通信实训Jennic-WSN07-24
北京市东城区(北区)普通中学2016届第一学期初三物理期中试卷含答案10-08
10、无机化学万题库(填空题)(1-3)12-21
5.10 说课稿03-19
房屋建筑施工组织设计05-23
退役军人事务局2021年上半年工作总结和下半年工作谋划08-08
部编版语文三上逗号也可用于并列词语之间03-16
建东职业技术学院优秀个人简历07-18
实验室生物安全程序化文件及SOP05-17
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 信实
- Jennic
- WSN
- 能量朗读让世界因我而美丽—采购师报考咨询姬老师
- 数字示波器的波形测量方法
- 第四讲_人力资源培训与开发
- 浅析影响大学生英语口语能力的因素及教学策略
- 出生登记入户申请表
- 2012年南通市中小学教师培训工作计划表(省`市级)
- 鲁教版八年级英语上册(初三)单词表unit1-12(带音标)
- 成本会计案例分析作业
- 入党申请书 最新版
- 基于快速傅里叶变换的四种相位解包裹算法
- 新完整word版苏科苏教初二物理下学期期中考试试题
- 第三次作业:逻辑综合练习题-1
- 努力工作快乐生活-主题演讲
- 高铁施工冬季施工方案
- 高等煤化学考试题
- 经济学专业实践教体系改革
- 高二数学教学工作总结
- 河南质量工程职业学院机电系优秀 毕业论文
- 综合实践活动课程的现状研究
- 5.2 自主创新能力的培养和提升