通信实训JennicWSN.docx

上传人:b****7 文档编号:9130492 上传时间:2023-02-03 格式:DOCX 页数:59 大小:1.59MB
下载 相关 举报
通信实训JennicWSN.docx_第1页
第1页 / 共59页
通信实训JennicWSN.docx_第2页
第2页 / 共59页
通信实训JennicWSN.docx_第3页
第3页 / 共59页
通信实训JennicWSN.docx_第4页
第4页 / 共59页
通信实训JennicWSN.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

通信实训JennicWSN.docx

《通信实训JennicWSN.docx》由会员分享,可在线阅读,更多相关《通信实训JennicWSN.docx(59页珍藏版)》请在冰豆网上搜索。

通信实训JennicWSN.docx

通信实训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:

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文件。

否则,出错信息会显示在信息窗口中,根据出错信息调试程序。

JennicJN51xxFlash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。

JennicJN51xxFlash可编程器的用户界面如图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)和PANID(JZS_sConfig.u16PanId);2.调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee协议栈;3.调用函数vInit()对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;4.调用bBosRun(TRUE)来启动操作系统BOS。

用户可根据具体的应用设计该函数。

AppWarmStart()

结点从内存供电的休眠模式唤醒的时候将进入这个函数。

启动后所有的内存数据都没有丢失。

如果设备不需要休眠唤醒功能,这个函数可以为空。

用户可根据具体的应用设计该函数。

一般情况下,该函数会调用AppColdStart()重新启动设备。

应用程序调用协议栈的函数如下:

JZS_u32InitSystem()

初始化JennicZigBee协议栈。

JZS_vStartStack()

设备将作为Coordinator、Router或者EndDevice启动。

如果是Coordinator将启动网络,如果是Router或者EndDevice将加入网络。

JZS_vStartNetwork()

手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为JZS_EVENT_NWK_STARTEDJZS_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)和PANID(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()函数,设置信道号和PANID;

②调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;

③调用JZS_vStartStack()函数,启动网络,启动成功后,灭灯0;

④调用JZA_vAppEventHandler()函数(BOS时钟周期性调用函数),如果网络启动成功,则读取按键值,若有键按下,则将按键允许标志去掉,然后调用按键子程序,最后周期性调用vAppTick()函数,用于按键消抖;

⑤调用按键子程序vProcessSplashKeyPress(),执行按键指令,控制相应LED灯亮灭,以达到设计要求。

2.实现LED自动闪烁,周期1秒。

(1)流程图:

(2)工作过程:

①执行AppColdStart()函数,设置信道号和PANID;

②调用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()函数,设置信道号和PANID;

②调用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(AFSub-layerDataEntity)类函数,用来向网络层发出数据发送的请求。

2.收到MsgObject调用的函数JZA_bAfMsgObject()

该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。

在程序设计中可对接收到的数据进行处理,也可根据接收的指令进行操作。

3.简单设备描述函数afmeAddSimpleDesc()

该函数属于AFME(AFSub-layerManagementEntity)类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(simpledescriptor)。

如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。

三、软件设计

1.分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。

如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。

(1)流程图:

Coordinator:

Enddevice:

(2)工作过程:

Coordinator:

执行AppColdStart()函数,设置信道号和PANID;调用vInit()函数,初始化按键、LED灯和协议栈,并且启动BOS时钟;调用JZS_vStartStack()函数,启动网络,启动后,灭灯0,若有新结点加入,灭灯1;判断是否SW3被按下,若按下了则调用vSendData()函数向enddevice发送一个数据2;在程序运行过程中若接收到MSG信息,则调用vLedControl(0,bToggle)控制coord的灯0亮灭。

Enddevice:

执行AppColdStart()函数,设置信道号和PANID;调用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()函数,设置信道号和PANID;调用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()函数,设置信道号和PANID;调用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负责建立网络和分配短地址。

按下EndDeviceA的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDeviceB的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDeviceA收到应答后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位短地址

在基于JennicZigBee协议栈中,每个设备必须知道对方的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地址后,则可以通过

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

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

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