TinyOS 实验报告

时间:2024.4.20

实验一.Downloading and installing TinyOS                       

一、安装JDK (在平台ubuntu12.10搭建)

  1.编译一个源文件

  终端收入命令:sudo gedit/etc/apt/sources.list.d/partner.list 

  2.在partner.list文件中添加:

  终端输入命令:deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse 

  3.保存该文件并退出,执行下列程序:

  终端输入命令:sudo apt-get update 

  4.下载JDK 

  终端输入命令: sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk 

  5.配置JDK环境变量

 在主文件下的.bashrc 或者.profile中添加下面语句,或者在终端输入。(关于路径参照自己解压 路径)

    export JAVA_HOME=/usr/lib/jvm/java-6-sun 

    export PATH=$JAVA_HOME/bin:$PATH 

    export classPath=/usr/lib/jvm/java-6-sun 

  

6.在终端中输入 java,javac看是否配置正确

  终端输入命令:java 或者javac

二、安装tinyOS-2.1.1 

   

1.安装 python-dev g++

  终端输入命令:sudo apt-get install python-dev g++ 

  

 2.查看 python的版本

  终端输入命令:python –version    (本机是Python 2.7.3) 

    

3.安装 tinyos       

①.在主文件夹/etc/apt/sources.list中添加一下两行:

    deb http://tinyos.stanford.edu/tinyos/dists/ubuntu natty main 

     deb http://hinrg.cs.jhu.edu/tinyos oneiric main 

     

终端输入命令:sudo gedit  /etc/apt/sources.list  (sources.list 是只读文件,所以必须有root权限)

②.下载安装tinyos-2.1.1 

终端输入命令:sudo apt-get install tinyos-2.1.1 

     

安装完成后,打开/opt/tinyos-2.1.1/support/make/sim.extra, 找到 PYTHON_VERSION=2.5(本 机),将2.5换成2.7    

③.终端输入命令:sudo gedit /opt/tinyos-2.1.1/tinyos.env ,在tinyos.env中添加

④.在主文件夹/.bashrc 中添加:

  source /opt/tinyos-2.1.1/tinyos.env 

      export CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.  

⑤.在/etc/profile.d/tinyos.env 同样添加:

  终端输入命令:sudo gedit /etc/profile.d/tinyos.env

 

⑥.安装 JNI 

      终端输入命令:tos-install-jni 

      终端输入命令:tos-check-env 

      会出现java 和graphviz版本报错,可以忽略。如下图:

⑦.进入目录 /opt/tinyos-2.1.1/apps/Blink中,进行make micaz sim如果出现下面图片证明,安装成功。

 


第二篇:无线传感器网络综合实验报告


无线传感器网络

综合实验报告

小组成员: 

一.实验名称:光照强度信息采集实验

二.实验内容

传感器节点采集光照强度信息(如果没有光传感器,则采集电压参数),采用静态路由(指定父节点),通过多跳传到基站节点,基站节点通过串口与PC连接,将采集到的光照强度、节点ID、采样时间存入数据库,用户可以按照节点、时间或逻辑条件查询该数据库。本小组实验稍作简化之后,将数据改为自动生成一个文本文档,然后记录在内。

三.实验目的

1、 了解如何运用节点上的传感器采集数据。

2、 掌握Sense和Oscilloscope程序,实现数据采集。

3、 利用上课介绍的PC与节点之间的通信工具,把采集到的数据显示出来。

4、了解TinyOS中的永久数据存储方法。

四.实验原理

1、基本介绍

传感(Sensing)是传感器网络应用中不可或缺的部分。它涉及到两个任务:

配置传感器:配置会因平台的不同而不同

读传感器数据

在TinyOS 2.0平台上,独立的sensing应用程序不再使用像ADCControl这样的配置接口。取而代之地,它们使用标准的数据获取接口:Read, ReadStream或ReadNow,来收集传感器数据。

2、Sense应用程序

2.1. 功能:周期性地对默认传感器采样并用LEDs显示低位

2.2. Sense实现过程:

Sense.nc用Boot启动周期性计时器

计时器一到时间,Sense.nc就signal一个timer事件

读数据是分相操作的

读完用LEDs显示数据

2.3.DemoSensorC组件

DemoSensorC为Sense提供了Read<uint16_t>接口

Sense.nc无法知道他所连接的传感器,甚至无法知道是否从传感器得到数据,因为它能导通到任何提供Read<uint16_t>接口的组件

事实上DemoSensorC在不同的平台下是不一样的。平台依赖于DemoSensorC组件来定义应用程序从哪个传感器来采样。

DemoSensorC组件:

generic configuration DemoSensorC(){

provides interface Read<uint16_t>;

}

实现部分因平台不同而不同。

DemoSensorC是一种间接获取传感器数据的方式,它会根据不同的平台实例化使用不同组件来获取传感器数据。

运行Sense应用:

make telosb install

3、Oscilloscope 应用程序

3.1. 功能:使传感器读来的数据在PC上可视化

3.2. 运行java GUI:type make->./run

五.实验环境

1、JDK1.6 for windows

2、Cygwin with TinyOS 2.x

3、UltraEdit / EditPlus

六.源程序代码

import net.tinyos.message.*;

import net.tinyos.util.*;

import java.io.*;

import java.util.*;

public class Oscilloscope implements MessageListener

{

MoteIF mote;

Data data;

Window window;

int interval = Constants.DEFAULT_INTERVAL;

int version = -1;

/* Main entry point */

void run() {

data = new Data(this);

window = new Window(this);

window.setup();

mote = new MoteIF(PrintStreamMessenger.err);

mote.registerListener(new OscilloscopeMsg(), this);

}

/* The data object has informed us that nodeId is a previously unknown

mote. Update the GUI. */

void newNode(int nodeId) {

if(nodeId == 9)

{

window.newNode(nodeId);

}

}

void writefile(OscilloscopeMsg omsg)

{

try{

int id = omsg.get_id();

if(id == 9)

{

FileWriter f = new FileWriter("e:\\output.txt",true);

BufferedWriter buffer = new BufferedWriter(f);

int [] a = omsg.get_readings();

buffer.write("id:" + id);

buffer.write(" 数据:");

for(int i = 0;i < 10;i++)

{

buffer.write(a[i]+" ");

}

buffer.write(" 时间:");

Calendar time = Calendar.getInstance();

int year = time.get(Calendar.YEAR);

int month = time.get(Calendar.MONTH)+1;

int day = time.get(Calendar.DAY_OF_MONTH);

int dayweek = time.get(Calendar.DAY_OF_WEEK);

int hour = time.get(Calendar.HOUR_OF_DAY);

int minute = time.get(Calendar.MINUTE);

int second = time.get(Calendar.SECOND);

buffer.write(year+"."+month+"."+day);

buffer.write(" "+hour+":"+minute+":"+second);

buffer.newLine();

buffer.close();

}

}

catch(IOException e)

{

e.printStackTrace();

}

}

public synchronized void messageReceived(int dest_addr,

Message msg) {

if (msg instanceof OscilloscopeMsg) {

OscilloscopeMsg omsg = (OscilloscopeMsg)msg;

/* Update interval and mote data */

periodUpdate(omsg.get_version(), omsg.get_interval());

data.update(omsg.get_id(), omsg.get_count(), omsg.get_readings());

writefile(omsg);//修改的

/* Inform the GUI that new data showed up */

window.newData();

}

}

/* A potentially new version and interval has been received from the

mote */

void periodUpdate(int moteVersion, int moteInterval) {

if (moteVersion > version) {

/* It's new. Update our vision of the interval. */

version = moteVersion;

interval = moteInterval;

window.updateSamplePeriod();

}

else if (moteVersion < version) {

/* It's old. Update the mote's vision of the interval. */

sendInterval();

}

}

/* The user wants to set the interval to newPeriod. Refuse bogus values

and return false, or accept the change, broadcast it, and return

true */

synchronized boolean setInterval(int newPeriod) {

if (newPeriod < 1 || newPeriod > 65535) {

return false;

}

interval = newPeriod;

version++;

sendInterval();

return true;

}

/* Broadcast a version+interval message. */

void sendInterval() {

OscilloscopeMsg omsg = new OscilloscopeMsg();

omsg.set_version(version);

omsg.set_interval(interval);

try {

mote.send(MoteIF.TOS_BCAST_ADDR, omsg);

}

catch (IOException e) {

window.error("Cannot send message to mote");

}

}

/* User wants to clear all data. */

void clear() {

data = new Data(this);

}

public static void main(String[] args) {

Oscilloscope me = new Oscilloscope();

me.run();

}

}

七.实验步骤及结果显示

1、取两个节点,其中一个作基站,另一个作发送节点,分别将程序下载到节点。

1.1、作基站节点

1.2、作发送节点

实习报告

2、开始接收发送数据

八.实验总结

通过本学期的无限传感器网络的课程和实验的学习,我们对无线传感器网络有了初步的了解与认识,同时对于TinyOS系统与nesC语言也有了初步的了解。实验也从刚开始的似懂非懂到最后综合实验的初步掌握。通过这些学习,再加上老师和研究生学长的指导,以及小组内部的讨论,最终能顺利完成最后的综合实验。

实验中更重要的是小组成员的合理的分工合作以及有效的讨论,实验过程应当细心耐心,虽然对于nesC和TinyOS没有达到非常熟练的程度。但是小组内部的逐步操作以及对实验的逐渐深入的理解,也使得实验最后得以成功。

由于时间,能力等各方面的因素,我们小组还有很多需要改进的地方和以及诸多不足之处。如多跳数据传输还未完成,实验数据写入数据库被简化成写入文档。如果有机会,我们还会深入学习的。

更多相关推荐:
linux实验报告

实验二Linux常用命令使用一、实验目的1.掌握Linux一般命令格式。2.掌握有关文件和目录操作的常用命令。3.掌握有关进程操作的常用命令。4.熟练使用man命令。二、实验内容1.熟悉cd、date、pwd、…

Linux实验报告

Linux操作系统实验报告实验编号实验编号实验名称实验名称实验1Linux安装实验2掌握虚拟机的使用实验目的1熟练掌握Linux系统的安装实验目的实验任务1虚拟机的使用实验任务2安装RedHatLinux90操...

Linux基础操作实验报告

实验项目名称Linux基础操作实验项目编号一学号组号上机实践日期20xx919上机实践时间2学时一目的本次实验所涉及并要求掌握的知识点1熟悉启动Linux虚拟机与同时使用多个控制台登录Linux的基本操作2熟练...

Linux 实验报告(一)系 统 常 用 命 令

专业计算机科学与技术学号姓名Linux操作系统报告单名称系统常用命令任课教师专业计算机科学与技术班级姓名学号完成日期成绩123456789

linux实验报告

实验一Linux的基本操作命令一实验目的了解Linux的基本命令实现Linux的文件系统操作二实验内容1在Linux字符环境下练习使用基本的文件操作命令2学会察看Linux的环境设置以及系统信息三实验仪器安装R...

Linux实验报告

课程编号B080103040Linux操作系统实验报告东北大学软件学院实验一熟悉Linux环境实验内容一练习常用的Shell命令当用户登录到字符界面系统或使用终端模拟窗口时就是在和称为shell的命令解释程序进...

linux实验报告

学生实验报告20xx20xx学年第二学期一实验目的1掌握Linux操作系统中多线程编程的基本原理和方法2学会利用创建多线程实现单词统计二实验原理1多线程编程线程在进程的基础上作进一步抽象也就是说一个进程分为两个...

linux实验报告

西安郵電學院Linux实验报告题目1进程题目2线程题目3互斥系部名称专业名称班级学号计算机学院软件工程080204085047学生姓名指导教师时王晶晶陈莉君20xx年10月29号11月9号间实验1进程11实验目...

linux设计实验报告

重庆交通大学信息学院Linux操作系统设计实验报告成绩班级学号姓名实验所属课程Linux操作系统实验室中心信息学院机房指导教师闫果实验时间1一课程设计题目在Linux操作系统下实现C语言版本的学生信息管理系统要...

linux网络编程实验报告

河南师范大学设计性实验报告Linux网络编程实验河南师范大学综合性、设计性实验项目简介学院名称(公章):软件学院20##-20##学年第一学期填表日期:20##年12月10日注:开课时间填本实验项目所有实验班的…

操作系统实验报告-Linux操作、使用、编程)

实验报告20xx20xx学年第二学期课程名称实验名称实验时间指导单位操作系统ALinux操作使用编程20xx年5月6日计算机学院计算机科学与技术系指导教师徐小龙学生姓名学院系陈坤通达学院班级学号专业100029...

linux操作系统指令实验报告

实验一Linux的基本操作和常用命令的使用一实验目的1学会安装Linux操作系统2掌握Linux系统的一些基本操作3掌握常用Linux命令的使用方法4了解Linux命令中参数选项的用法和作用二实验环境1Linu...

linux实验报告(22篇)