物联网实验报告
(实验一)
姓 名:吴传伟
班 级: K0312418
学 号: K031241826
指导老师: 邱老师
一、实验目的
1、用户第一次使用感知RF2-CC2530-WSN
2、节点测试
二、实验原理
1、安装必要软件
2、确定各程序成功下载至各节点,并修改物理地址使其各不相同。把下载CoordinatorEB-Pro程序的ZigBee模块安插到节点底板上当作网关使用,网关通过USB连接线把计算机与网关连接起来。
三、实验步骤
安装必要软件
1)安装ZigBee开发集成环境IAR7.51A,详细请参考“\C51RF-CC2530-WSN使用说明书\”目录下的“IAR安装与使用”。
2)安装传感器网络PC显示软件环境,软件位于“\C51RF-CC2530-WSN开发软件\C51RF-CC2530-WSN监控软件”目录下的“Framework Version 2.0.exe”
3)安装网关与计算机USB连接驱动,驱动位于“\C51RF-CC2530-WSN开发软件\”目录下的“CP2102”。
4)安装ZigBee开发辅助软件,软件位于“\C51RF-CC2530-WSN开发软件\”目录下的(程序下载软件)“Setup_SmartRF04Progr_1.3.0.exe”与(物理地址读写工具软件) “Setup_IEEE_Address_Prog_1.0.0.exe”。
5)安装其它辅助开发软件,如位于“\C51RF-CC2530-WSN开发软件\”目录下的“串口调试助手.exe”。或且其它用户以为对开发有帮助的软件。
节点测试
1)温度/光敏节点
为安装温度/光敏传感器模块的节点安装电池或外接电源,打开电源开关,一会儿,ZigBee模块的右侧LED灯亮起表示节点成功加入由网关创建的ZigBee无线传感网,液晶上显示传感器模块的类型。
2)振动节点
为安装振动传感器模块的节点安装电池或外接电源,打开电源开关,一会儿,ZigBee模块的右侧LED灯亮起表示节点成功加入由网关创建的ZigBee无线传感网,液晶上显示传感器模块的类型。
3)三维加速度节点
为安装三维加速度传感器模块的节点安装电池或外接电源,打开电源开关,一会儿,ZigBee模块的右侧LED灯亮起表示节点成功加入由网关创建的ZigBee无线传感网,液晶上显示传感器模块的类型。
四、实验结果及分析
IAR 变异环境的安装
Framework Version 2.0安装
节点的测试
第二篇:物联网实验报告-实验二
实验报告
实验名称 利用LED的HelloWorld实例
课程名称 无线传感器网络实验
院 系 部: 电气与电子工程学院
专业班级:电网1101班
学生姓名:张雪垠 赵炳强 张鸣祚
学 号: 1111600130 1111600132 1111600129
指导教师:武昕
成 绩:
实验日期: 20##-4-8
华北电力大学(北京)
一、实验目的及要求:
本章将应用前面所学习的LED控制组件及Timer组件,对安装在ZigbeX上的LED的On/Off进行摩尔斯编码并输出单词“hello, world”的实例进行学习。
二、仪器用具:
主电脑、1个Mote设备、ISP工具、打印机连接线、USB连接线
三、实验原理:
HelloWorld应用程序是把“hello, world”文字转换为摩尔斯电码并显示在LED中的程序。
在HelloWorld实例中,设置Timer并按指定的时间打开/关闭LED,可以用摩尔斯电码表示所需的英文单词。为了控制时间设置和LED的On/Off,在HelloWorld.nc文件中声明TimerC组件及LedsC组件,与自身的模块HelloWorldM组件进行连接。
在HelloWorld实例中使用的各组件的声明及连接结构,可以在配置文件HelloWorld.nc中进行确认。
Helloworld为了能够运行一个完整的应用程序,把必需的Main组件放在下层组件中,对其它组件及自身的模块部分进行连接。
通过Main组件最先运行的是HelloWorldM的StdControl.Init()函数。在该函数中执行对LED的初始化及有关Off的指令。在此之后调用的函数为StdControl. Start函数,通过Timer组件,设置为每秒(1000)只调用一次警报(TIMER_ONE_SHOT)。Timer组件按设置,在1秒后通过Signal,调用HelloWorldM内的Timer.fired()函数。在Timer.fired()函数中,根据保存在static指针变量morse中的“helloes, world"摩尔斯值,命令RED LED的On/Off。例如,在摩尔斯电码空格“ ”中,在2*MORSE_ UNIT期间内LED无任何变化,摩尔斯电码“.”中,在MORSE_ UNIT期间内打开RED LED后,然后在MORSE_ UNIT期间内关闭RED LED,通过current++跳到下一个摩尔斯电码。摩尔斯电码“-”中 , 3*MORSE_ UNIT期间内打开RED LED后,同样在MORSE_ UNIT期间内关闭RED LED,通过current++跳到下一个摩尔斯电码。通过这样的计算方法,安装了Helloworld程序的ZigbeX传感器节点,通过RED LED输出“Hello, world”摩尔斯电码。
将HelloWorldM中使用的多个组件的连接结构以图形结构显示如下:
四、实验步骤(包括原理图、实验结果与数据处理)
<利用Ponyprog工SP程序下载到ZigbeX中>
首先运行Cygwin。如下输入命令,进入实例文件夹。
cd /opt/tinyos-1.x/contrib/zigbex/helloworld
接下来,输入“Make Zigbex”进行编译。
<利用USB工SP板下载到ZigbeX中>
①运行AVR Studio
②在AVR Studio中选择Tools->Program AVR->Auto Connect菜单,连接到USB-ISP上。
③连接完成后,出现如下下载画面。
④点击“…”按钮,选择所需的Hex文件后,点击“Program”按钮运行程序。
⑥按相应功能进行适当设置后,点击“Program”按钮。
在进行上述步骤之前,与ZigbeX连接的USB工SP板上的开关必须设为“ISP ”模式,而且己通过USB连接线与计算机进行连接。
<在例程基础上修改程序为实验要求的程序>
修改后的程序如下:加粗出为修改处
#define MORSE_WPM 1 /* speed, in words per minute */
/* we'd like to say 1000 * 60 / 50 / MORSE_WPM here, but that generates
compiler warnings when producing 16-bit code */
#define MORSE_UNIT ( 1000000 / MORSE_WPM ) /* milliseconds per unit */修改比例,让小灯闪烁变慢
。。。。。。
implementation {
int m=0,t,tt=800,ttt=300;//m为绿灯状态变量,m=0表示等灭;tt控制‘-’和‘.’时的周期;ttt控制‘ ’时的快闪周期
command result_t StdControl.init() {
call Leds.init();
/* The TinyOS code tries to turn off the LEDs in the init routine,
but TOSSIM doesn't seem to clear them unless we reset them
explicitly: */
call Leds.redOff();
call Leds.yellowOff();
call Leds.greenOff();
return SUCCESS;
}
。。。。。。
event result_t Timer.fired() {
/* A nesC compiler bug prevents us from declaring
static char morse[], so we need static char *morse. */
static char *morse = "--.. .... . - -. --."
"-..- .. - ."
"-.-- .. -.";//‘张雪垠’对应的莫斯码
。。。。。。
switch( *current ) {
case ' ': /* pause: off for two units */
dbg( DBG_USR1, "Morse: pause\n" );
call Leds.redOn();
for(t=0;t<ttt;t++)
{
TOSH_uwait(1000);
}//红灯点亮周期800ms
call Leds.redOff();
for(t=0;t<ttt;t++)
{
TOSH_uwait(1000);
}//红灯熄灭周期800ms
call Leds.redOn();
for(t=0;t<ttt;t++)
{
TOSH_uwait(1000);
}
call Leds.redOff();
for(t=0;t<ttt;t++)
{
TOSH_uwait(1000);
}
call Timer.start( TIMER_ONE_SHOT, 0 );//已用for循环延时,此处跳转延时设置为0
current++;
break;
case '.': /* dot: on for one unit, off for one unit */
if( m==0 ) {
dbg( DBG_USR1, "Morse: dot\n" );
call Leds.greenOn();
m=1;//用m=0时点亮绿灯,m=1时熄灭绿灯
for(t=0;t<tt;t++)
{
TOSH_uwait(1000);
}
call Timer.start( TIMER_ONE_SHOT, 0);
}
else {
dbg( DBG_USR1, "Morse: dot\n" );
call Leds.greenOff();
for(t=0;t<tt;t++)
{
TOSH_uwait(1000);
}
m=0;
call Timer.start( TIMER_ONE_SHOT, 0 );
}
current++;
break;
//下面程序思路和之前的思路相近
case '-': /* dash: on for three units, off for one unit */
dbg( DBG_USR1, "Morse: dash\n" );
call Leds.yellowOn();
for(t=0;t<tt;t++)
{
TOSH_uwait(1000);
}//call Timer.start( TIMER_ONE_SHOT, MORSE_UNIT );
call Leds.yellowOff();
for(t=0;t<tt;t++)
{
TOSH_uwait(1000);
}
call Timer.start( TIMER_ONE_SHOT, 0);
current++;
break;
default: /* illegal character: ignore */
dbg( DBG_USR1, "Morse: illegal character!\n" );
break;
}
/* wrap around string if end reached */
if( !*current )
current = morse;
return SUCCESS;
}
}
五、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。)
把HelloWorld程序下载到设备后,可以看到设备通过三个LED反复显示“Hello, world"摩尔斯电码。实验过程中主要问题是延时上的问题,之前一直想用call Timer.start( TIMER_ONE_SHOT, MORSE_UNIT )这条语句中的MORSE_UNIT来延时,后来发现call Timer.start( TIMER_ONE_SHOT, MORSE_UNIT )语句是一条跳转语句,执行完后就跳到程序开始event result_t Timer.fired()处去了,没法执行下一行程序,故改用TOSH_uwait(1000);语句延时,但是该语句以us为单位,所以只能用for循环延长周期。本想自己定义一个delay()函数。但是发现编译器不允许。所以只能for(t=0;t<tt;t++){TOSH_uwait(1000);}反复粘贴此语句,程序显得繁琐。