ImageVerifierCode 换一换
格式:DOCX , 页数:59 ,大小:1.59MB ,
资源ID:9130492      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9130492.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通信实训JennicWSN.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通信实训JennicWSN.docx

1、通信实训JennicWSN目 录实验一 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: JN51

2、39系列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: 液晶接口; Po

3、wer: 电源指示灯; 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快捷键或选

4、择主菜单Build下的Build子菜单或点击图标建立可执行二进制代码文件。 若工程编译(Build)成功,则可在C:JenniccygwinjennicSDKApplicationtestJN5139_ BuildRelease目录下生成test.bin文件。否则,出错信息会显示在信息窗口中,根据出错信息调试程序。Jennic JN51xx Flash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。Jennic JN51xx Flash可编程器的用户界面如图1-18所示,它可以将* .bin文件下

5、载到目标板或模块中,下载步骤如下: 用串口线连接PC机和目标板或模块。运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。 将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。 在图1-18所示的Flash可编程界面上点击Browse按钮(图中处)查找并选择要下载的目标文件。 选择好目标文件后,点击Progrm按钮(图中处)开始下载。在下载的过程中会显示一个下载的进度条,如图1-19所示。当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。如果遇到错误,请尝试重新下载。 成功下载后,关掉Flash可编程器再给目标板或

6、模块上电、或按Reset按钮,则刚下载的代码自动运行。(3)常用API接口函数介绍 应用程序初始化函数如下:AppColdStart( ) 应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。该函数需要完成以下功能:1. 通过设置函数中的参数值来设置信道号(JZS_sConfig.u32Channel)和PAN ID(JZS_sConfig.u16PanId); 2. 调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee 协议栈;3. 调用函数vInit( )对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;4. 调用

7、bBosRun(TRUE)来启动操作系统BOS。用户可根据具体的应用设计该函数。AppWarmStart( ) 结点从内存供电的休眠模式唤醒的时候将进入这个函数。启动后所有的内存数据都没有丢失。如果设备不需要休眠唤醒功能,这个函数可以为空。用户可根据具体的应用设计该函数。一般情况下,该函数会调用AppColdStart( )重新启动设备。应用程序调用协议栈的函数如下:JZS_u32InitSystem( ) 初始化Jennic ZigBee协议栈。JZS_vStartStack ( ) 设备将作为Coordinator、Router或者End Device启动。如果是Coordinator将启

8、动网络,如果是Router或者End Device将加入网络。JZS_vStartNetwork ( ) 手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为JZS_EVENT_NWK_STARTED JZS_EVENT_FAILED_TO_START_NETWORK 。vAppSaveContexts ( ) 保存网络参数以及用户的数据,如果你的应用是固定点的话,建议你进行网络参数的保存。u16AppGetContextSize ( ) 用来获取保存的网络参数以及用户数据的尺寸。

9、vAppGetContexts ( ) 读取保存的网络参数的内容。协议栈调用应用函数的函数如下:JZA_boAppStart( ) 让用户可以在协议栈启动前定义endpoint的descriptor,通常开发人员应该在这个函数中调用JZS_vStartStack启动协议栈。JZA_vStartEvent( ) 协议栈将通过这个函数反馈网络层的一些网络事件,比如网络启动成功、结点加入成功或者数据发送完成等。JZA_vPeripheralEvent( ) 该函数主要用来处理外部的硬件中断,比如按钮、定时器、UART等。JZA_vAppEventHandler( ) BOS周期性地调用该函数处理硬件

10、中断。用户可以利用它进行网络状态的判断和按钮的检查等,也可以在这个函数中,写入自己的应用程序。在设计该函数时,要尽可能地使其运行时间短,以便BOS调度其他活动事件。JZA_vAppDefineTasks( ) 该函数用于向BOS注册自己的用户任务,一般很少使用该函数。JZA_bAfMsgObject( ) 收到其他结点发送来的MSG帧的处理函数。 实验二 GPIO及LCD使用实验一、实验内容1. 运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮/灭状态。2. 设计一个程序,实现LED自动闪烁,周期1秒。3. 设计一个程序,按下按键SW0,LCD显示数据加1;按下按键SW1,LC

11、D显示数据减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( )

12、作用: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亮

13、/灭状态。(1)流程图:(2)工作过程:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动成功后,灭灯0;调用JZA_vAppEventHandler( )函数(BOS时钟周期性调用函数),如果网络启动成功,则读取按键值,若有键按下,则将按键允许标志去掉,然后调用按键子程序,最后周期性调用vAppTick()函数,用于按键消抖;调用按键子程序vProcessSplashKeyPress( ),执行按键指令,控制相应LED灯亮灭,以达到设计要求。

14、2. 实现LED自动闪烁,周期1秒。(1)流程图:(2)工作过程:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动成功后,灭灯0;调用JZA_vAppEventHandler( )函数(BOS时钟周期性调用函数),如果网络启动成功,则用bBosCreateTimer()函数周期性调用vAppTick()函数,周期为1s;调用vAppTick()函数,定义一个标志位变量LED,LED从02循环变化,利用vLedControl(LED,TRUE)

15、,并且在函数结尾再自己调用自己,使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)函数写影子内存vLc

16、dRefresh()函数液晶显示,若有键按下,则将按键允许标志去掉,然后调用按键子程序,最后周期性调用vAppTick()函数,用于按键消抖;调用按键子程序vProcessSplashKeyPress( ),执行case语句:按键0,调用jia() 函数,对液晶显示的数进行加1;按键1,调用jian() 函数,对液晶显示的数进行减1;四、实验结果与分析1. SW0SW3分别控制LED0LED3,按下对应的键,就能使对应的灯改变当前状态,如果亮的就灭,如果灭的就亮,符合设计要求。2. 网络启动成功(LED0灭)后,LED灯从03以周期1秒的速度自动闪烁,符合设计要求。 3. 网络启动成功后,液晶

17、上显示初始数据“0001”,此时按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。符合设计要求。五、存在问题和解决方法1. 在做第二个设计的时候,发现自动从03自动闪烁不能实现。解决方法:在周期性调用的vAppTick()函数中,在将LED赋值后还要调用函数自身,这也才能达到此函数不停的执行,LED灯自动闪烁。2. 第三个设计中,数据不能正常显示,显示的是一些乱码。解决方法:将4位数据转换成四个字符显示,这样就可以正常显示了。实验三 简单点对点无线通信实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭

18、状态。如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( )

19、该函数属于AFDE(AF Sub-layer Data Entity) 类函数,用来向网络层发出数据发送的请求。2. 收到MsgObject调用的函数JZA_bAfMsgObject ( ) 该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。在程序设计中可对接收到的数据进行处理,也可根据接收的指令进行操作。3. 简单设备描述函数afmeAddSimpleDesc( ) 该函数属于AFME(AF Sub-layer Management Entity) 类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(sim

20、ple descriptor)。如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。三、软件设计1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。(1)流程图:Coordinator:Enddevice:(2)工作过程:Coordinator:执行AppColdStart( )函数,设置信道号和PAN I

21、D;调用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 ( )函数,加入

22、网络,加入成功后,灭灯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上,同时再次发

23、送给EndDevice,如此重复运行。(1)流程图:Coordinator:Enddevice:(2)工作过程:Coordinator:执行AppColdStart( )函数,设置信道号和PAN ID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack ( )函数,启动网络,启动后,灭灯0,若有新结点加入,灭灯1;判断是否SW0被按下,若按下了,则调用vLcdShadowClear()函数清除影子内存, display(y, SIZE,2)函数写影子内存,再写影子内存前将数据转换成字符,vLcdRefresh()函数将影子内存的内容复制

24、到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 ( )

25、函数,加入网络,加入成功后,灭灯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亮。可见能够达到按

26、键控制对方的效果,符合设计要求。2. 网络启动成功后,即coordinator灯0,1熄灭,enddevice灯1熄灭;按下coordinator的SW0液晶上显示初始数据“0011”,接下来enddevice的LED3状态变化,1s后coordinatorLED3状态改变,且显示数据加11,这样循环下去。可见符合设计要求。分析:在网络启动后,有新结点加入时coordinator可以获得其短地址,因此可以将数据发送给enddevice,enddevice在接收到coordinator的消息后也相应获得了其短地址,接下去就可以相互发送数据。五、存在问题和解决方法1. 在下载完程序运行时,coor

27、dinator的灯0无法熄灭,从而导致所有操作无效。解决方法:coordinator的LED0不灭,说明无法启动网络,此时应该考虑信道干扰问题,所以我将信道改了一下,改了16号信道,再运行就成功了。2. 液晶不能正常显示。解决方法:经考虑发现,发送接收的数据,显示的是字符,所以不能直接将接收的数据写入影子内存,所以我在display()函数中最前面加入了数据转换成字符的语句,接下来再进行写影子内存,这样显示就正常了。实验四 两个EndDevice之间的无线通信实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短

28、地址。按下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负责建立网络和分配短地址及绑定的媒介。按动E

29、ndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3

30、秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。二、实验原理1. 通过对方的MAC地址获得它的16位短地址在基于Jennic ZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。如果一个设备(请求者)知道另一个设备的MAC地址时,则请求者可通过调用zdpNwkAddrReq( )函数广播查寻与该MAC地址相匹配的结点,当匹配的结点收到该数据包则返回自己的短地址给请求者,请求者即可用该短地址与其进行通信。2. 通过广播请求对方绑定

31、获得它的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地址后,则可以通过

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1