实验一.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没有达到非常熟练的程度。但是小组内部的逐步操作以及对实验的逐渐深入的理解,也使得实验最后得以成功。
由于时间,能力等各方面的因素,我们小组还有很多需要改进的地方和以及诸多不足之处。如多跳数据传输还未完成,实验数据写入数据库被简化成写入文档。如果有机会,我们还会深入学习的。