物联网实验报告
学院:
班级:
学号:
姓名:
指导教师:
2013/12/8
目录
实验一 RFID的读与写................................................................................................. 3
一、实验目的............................................................................................................ 3
二、实验内容............................................................................................................ 3
三、基本原理............................................................................................................ 3
四、所需仪器............................................................................................................ 3
五、实验步骤............................................................................................................ 3
实验二 RFID 防撞系统实验.......................................................................................... 5
一、实验目的............................................................................................................ 5
二、实验内容............................................................................................................ 5
三、基本原理............................................................................................................ 5
实验三 CC2530 LED 组件实验.................................................................................. 9
一、实验目的............................................................................................................ 9
二、实验设备............................................................................................................ 9
三、准备知识............................................................................................................ 9
四、实验原理............................................................................................................ 9
五、实验步骤............................................................................................................ 9
六、实验注意事项................................................................................................... 11
八、参考程序.......................................................................................................... 12
九、实验总结.......................................................................................................... 12
实验四 CC2530 定时器组件实验................................................................................. 13
一、实验目的.......................................................................................................... 13
二、实验设备.......................................................................................................... 13
三、准备知识.......................................................................................................... 13
四、实验原理.......................................................................................................... 13
五、实验步骤.......................................................................................................... 13
八、参考程序.......................................................................................................... 14
九、实验总结.......................................................................................................... 15
实验一 RFID的读与写
一、实验目的
熟悉和学习 ISO/IEC 18000-3,ISO15693 标准规范第三部分协议和指令内容
中的读取和写入标签数据操作部分内容。
二、实验内容
通过发送不同的基本指令,观察返回的数据,了解指令的作用。
三、基本原理
ISO15693 标准规范第三部分。
四、所需仪器
供电电源、电子标签。
五、实验步骤
1、读取UID
将 1 个标签放于仪器天线之上,给系统上电,打开系统软件PracticeSystem.exe,正确
设置串口,设置操作同防碰撞实验部分的设置操作。
运行“寻卡”command,得到正常标签的UID。操作如图3.1 所示:
2、读取单个BLOCK 数据
确认系统已经得到了单个标签的 UID,在“ISO 15693 命令”处,运行“读取单个数据
块”command,即可得到确定UID 标签的相应Block 里面的数据。操作如图3.2 所示:
查看“响应数据”里面的“数据显示栏”处和信息栏里的数据,上图为放置1 个标签(卡
片)时读写器读到这个标签存储器内地址为0 里面存储的数据。
可以在 BlkAdd 处更改地址,选择读取需要地址的数据
3、写单个BLOK 数据
确认系统已经得到了单个标签的 UID,在“ISO 15693 命令”处选择写入单个数据块,
在BlkAdd 处输入想要写入数据的存储器地址数值,再在BlkBit 处输入需要写入存储器内这
个地址的数据,运行“写入单个数据块”command,即可把需要的数据写入到当前标签指定
地址的Block 存储器里。操作如图3.3 所示
查看“响应数据”里面的“Status”处的信息。上图为放置1 个标签(卡片)时读写器向标
签的存储器00 位置写入12 34 12 34 这4 个字节数据的响应。
写入数据后,可以再通过“读取单个数据块” command 读取相应地址的数据,与刚才
写入的数据比较来验证是否写入正确。
详细操作可以参考北京泰格瑞德科技有限公司的RFID 教学系列基本使用说明和
RFID_Reader PC 软件命令使用说明相关文档。
实验二 RFID 防撞系统实验
一、实验目的
熟悉和学习 ISO/IEC 18000-3,ISO15693 标准规范第三部分协议的第8 节
Anticollision 内容,理解它的原理、流程和软件实现方法。
二、实验内容
通过使用带 anticollison 处理过程的指令和不带anticollison 处理过程的指令读
取多个标签,以及使用不带anticollison 处理过程的指令读取单个标签,比较其
指令和读取的结果。分析实验数据,总结防冲撞机理,掌握指令产生的作用。
三、基本原理
ISO15693 标准规范第三部分第8 节。
四、 所需仪器
1、设置
供电电源、多张电子标签。
加电运行系统,在系统的天线范围内放置多个标签。打开系统软件 PracticeSystem.exe,
正确设置串口,操作如图4.1 所示:
选择确定当前使用的串口,操作如图4.2 所示:
按“Confirm”确认后,然后按“Connect”连接串口。连接正确时信息栏显示如图4.3 所示:
2、操作
(1) Anticollision 操作
在系统软件下,“测试命令”处,选择运行“测试防冲突”,“发送使用防冲突算法的寻
卡命令”动作。操作如图4.4 所示:
查看“响应数据”里面的“数据显示栏”处和信息栏里的数据,上图为放置3 个标签(卡
片)时“Anticollision”命令读到的数据响应。
注意“Command data”里面的“数据显示栏”处的数据。
(2) Non-Anticollision 操作
保 持 多 张 标签数量不变, 在系统软件下,“ ISO 15693 命令” 处, 选择运行
“Non-Anticollision”动作。操作如图4.5 所示:
查看“响应数据”里面的“数据显示栏”处和信息栏里的数据,上图为放置3 个标签(卡
片)时“Non-Anticollision”命令读到的数据响应。
注意此时“Command data”里面的“数据显示栏”处的数据。
在系统的射频磁场内保留一张电子标签,拿出多余的标签,在系统软件下,“ISO
15693 命令”处,再次选择运行“Non-Anticollision”动作。操作如图4.6 所示:
查看“响应数据”里面的“数据显示栏”处和信息栏里的数据,上图为放置1 个标签(卡
片)时“Non-Anticollision”命令读到的数据响应。
注 意 此 时 “Command data ” 里面的“ 数据显示栏” 处的数据。把这个数据和
“Non-Anticollision”操作多个标签时以及“Anticollision”操作时“Command data”里
面的“数据显示栏”处的数据比较,结合ISO/IEC 15693 标准协议,分析实现现象和结
果,体会实验过程,加深对RFID 防冲撞的理解。
实验三 CC2530 LED 组件实验
一、实验目的
掌握CC2530 芯片LED 对应的GPIO 引脚,并且熟练掌握LED 的使用。
二、实验设备
1. 实验箱中的基站
2. 烧录线一根
三、准备知识
熟读文件/opt/atos/tos/lib/antc5/common/atosled.h 的内容。在这个代码文件中
详细定义了各个LED 对应的引脚,已经定义了各个LED 的点灯和灭灯的操作。
四、实验原理
目前节点上有红、蓝、黄3 个LED 灯,其中,红灯是工作指示灯,蓝灯和
黄灯主要用于程序调试。现在对LED 灯的操作有三种:点亮、关闭、闪烁(由
亮变暗或者由暗变亮), 相对应的命令分别为: LED_BLUE_ON 、
LED_BLUE_OFF 、LED_BLUE_TOGGLE 、LED_YELLOW_ON 、
LED_YELLOW_OFF、LED_YELLOW_TOGGLE。在CC2530 芯片中蓝灯对应
P1.2,黄灯对应P1.3,对P1.2 的操作会反映在蓝灯上,将P1.2 置高,蓝灯就会
亮,否则蓝灯就会灭掉。下面是CC2530 中LED 部分的原理图。
五、实验步骤
1. 将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨
上去
2. 打开Cygwin 开发环境
3. 在Cygwin 界面中执行cd apps/Demos/Basic/Led,进入到LED 实验目录下,如下图。
4. 在LED 实验目录下执行make antc5 install 进行编译和烧录,烧录成功如下图。
5. 可以看到实验现象为黄灯和蓝灯交替闪烁。
六、实验注意事项
要达到LED 等闪烁的效果,在每次LED 等状态改变之后要有一定时间的延
时,否则状态切换太快超出人眼的反应时间就看不到闪烁的效果了。
七、流程图
八、参考程序
以下代码为主要部分代码,详细代码请参考该实验的源程序,源程序的目录如下:
$(安装目录)\cygwin\opt \atos\apps\Demos\Basic\Led
module LedM
{
uses interface Boot;
}
implementation
{
/* LED 灯演示*/
task void DemoLed()
{
/** 目前节点上提供两个LED 灯
LED_BLUE -> 蓝灯
LED_YELLOW -> 黄灯
*/
int i,j;
while(1)
{
for(i=0;i<1000;i++)
for(j=0;j<500;j++);
LED_BLUE_OFF; /* 熄灭蓝色LED 灯*/
LED_YELLOW_ON; /* 点亮黄色LED 灯*/
for(i=0;i<1000;i++)
for(j=0;j<500;j++);
LED_BLUE_ON; /* 熄灭蓝色LED 灯*/
LED_YELLOW_OFF; /* 点亮黄色LED 灯*/
}
}
/** 启动事件处理函数,在LED.nc 已经关联到MainC.Boot 接口
系统启动后会调用此函数
*/
event void Boot.booted()
{
post DemoLed();
}
}
九、实验总结
该实验完成了对CC2530 芯片的LED 进行控制,实际上是对CC2530 芯片的
GPIO 的控制。掌握芯片LED 控制之后,在复杂的程序中可以用LED 作为一种
很好的调试手段。
实验四 CC2530 定时器组件实验
一、实验目的
1. 了解CC2530 芯片的定时器
2. 学会使用CC2530 芯片的定时器
二、实验设备
1. 实验箱中的基站
2. 烧录线一根
三、准备知识
查看CC2530 的芯片手册中定时器部分的文档,对定时器有一定的了解。同
时要能够理解定时器中断的概念。可以找一些其它平台的关于定时器的代码进行
阅读。
四、实验原理
CC2530 芯片包含四个定时器(Timer1、Timer2、Timer3、Timer4)和一个
休眠定时器(Sleep Timer)。
Timer1 是16 位的定时器,支持典型的定时/计数功能以及PWM 功能,该定
时器共有三个捕捉/比较通道,每个通道使用一个单独的I/O 引脚。Timer1 的时
钟频率是由系统时钟分频得到,首先由寄存器中的CLKON.TICKSPD 分频,系
统时钟是32MHz 的情况下,CLKON.TICKSPD 可以将该时钟频率分频到32MHz
(TICKSPD 为000)、16MHz(TICKSPD 为001)、8MHz(TICKSPD 为010)、
4MHz(TICKSPD 为011)、2MHz(TICKSPD 为100)、1MHz(TICKSPD 为101)、
0.5MHz(TICKSPD 为110)、0.25MHz(TICKSPD 为111);分频后的时钟频率
可以被T1CTL.DIV 分频,分频数为1、8、32、128。因此,在32MHz 的系统频
率下,Timer1 的最小时钟频率为1953.125Hz,最大时钟频率为32MHz。详见
CC2530.pdf 第99 页。
Timer2 主要用于为802.15.4 标准中的CSMA/CA 算法提供定时。该定时器
即使在节点处于低功耗状态下仍然运行。
Timer3 和Timer4 是两个8 位的定时器,主要用于提供定时/计数功能。
Sleep Timer 主要将节点从超低功耗工作状态唤醒。
TinyOS 系统下,定时器组件一般为通用组件(generic components),通用组
件类似于C++中的类,可以通过new 来实例化最多255 个定时器,类似于类实
例化的对象。在Antc5 下,定时器通用组件为TimerMilliC, 是Timer1 提供的,
此外,Timer1 还提供了Alarm32khzC 等组件。
定时器向上层提供的接口分为Timer 和Alarm 两种,使用Timer 接口需要指
定定时器的精度,分为TMilli(毫秒)、T32kHz(32KHz)、TMicro(微秒)三种;
使用Alarm 接口既要指定定时精度,还要指定定时器的位宽。
五、实验步骤
1. 将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨
上去
2. 打开Cygwin 开发环境
3. 在Cygwin 界面中执行cd apps/Demos/Basic/ Timer,进入到定时器实验目录下。
4. 在定时器代码目录下执行make antc5 install,进行编译和烧录。
5. 实验现象为蓝灯1 秒闪一次,黄灯3 秒闪一次。
六、实验注意事项
在开启一个定时器的时候有两种方式,一种启动方式是只超时一次,另外一
种是循环超时。所以在开启的时候要根据具体的需求选择具体的启动方式。
七、流程图
八、参考程序
以下代码为主要部分代码,详细代码请参考该实验的源程序,源程序的目录如下:
$(安装目录)\cygwin\opt \atos\apps\Demos\Basic\Timer
#define DBG_LEV 5
module TimerLedM
{
uses interface Boot;
/* Timer 为系统接口TMilli 指明了定时器的精度为毫秒*/
uses interface Timer<TMilli> as Timer1; /* as 关键字为接口别名*/
uses interface Timer<TMilli> as Timer2;
}
implementation
{
/** 任务: 切换黄色LED 灯*/
task void ToggleLedYellow()
{
LED_YELLOW_TOGGLE;
}
/** 启动事件处理函数,在TimerLed.nc 已经关联到MainC.Boot 接口
系统启动后会调用此函数
*/
event void Boot.booted()
{
/** 定时器1: 持续工作,每隔1s 触发一次*/
call Timer1.startPeriodic(1000);
/** 定时器2: 持续工作,每隔3s 触发一次*/
call Timer2.startPeriodic(5000);
}
/** 定时器1 的事件处理函数*/
event void Timer1.fired()
{
/** 事件处理中直接切换蓝色LED 灯*/
ADBG(5, "led blue toggle.\r\n");
LED_BLUE_TOGGLE;
}
/** 定时器2 的事件处理函数*/
event void Timer2.fired()
{
ADBG(5, "led yellow toggle.\r\n");
post ToggleLedYellow();
}
}
九、实验总结
该实验完成了对CC2530 芯片的定时器的使用,通过LED 来表现定时器的工
作过程。在这个实验中用的定时器的精度为毫秒。在这个实验中只使用了定时器
的几个最重要的功能, 还有好多接口都没有使用, 比如
timer.stop(),timer.isRunning()等,我们可以在课后自己动手尝试使用这些接口的功
能。