无线传感器网络技术及应用六_第1页
无线传感器网络技术及应用六_第2页
无线传感器网络技术及应用六_第3页
无线传感器网络技术及应用六_第4页
无线传感器网络技术及应用六_第5页
已阅读5页,还剩183页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 无线传感器网络开发环境的构建及应用实践 1 1第6章 无线传感器网络开发环境的构建及应用实践 6.1 无线传感器网络操作系统概述6.2 TinyOS操作系统6.3 无线传感器网络实验平台第6章 无线传感器网络开发环境的构建及应用实践 2 26.1 无线传感器网络操作系统概述无线传感器网络操作系统概述在某种程度上可以将传感器网络看做一种由大量微型、廉价、能量有限的多功能传感器节点组成的、可协同工作的、面向分布式自组织网络的计算机系统。因此,针对传感器网络应用多样、硬件功能有限、资源有限、节点微型化和分布式多协作等特点,研究和设计新的基于传感器网络的操作系统就成为当前提高无线传感器网络性能

2、的一个重要课题。当前,有些研究人员认为传感器网络的硬件很简单,没有必要设计一个专门的操作系统,可以直接在硬件上设计应用程序。这种观点在实际应用中会碰到很多问题。首先就是面向第6章 无线传感器网络开发环境的构建及应用实践 3 3传感器网络的应用开发难度会加大,应用开发人员不得不直接面对硬件进行编程,无法得到像传统操作系统那样的丰富服务;其次是软件的重用性差,程序员无法继承已有的软件成果,降低了开发效率,增加了开发成本。另外,一些设计人员认为,可以直接使用现有的嵌入式操作系统,如VxWorks、WinCE、Linux、QNX等。这些系统中有基于微内核架构的嵌入式操作系统,如VxWorks、QNX等

3、,也有基于单体内核架构的嵌入式操作系统,如Linux等。由于这些操作系统主要面向嵌入式领域相对复杂的应用,其功能也比较复杂,如它们可提供内存动态分配、虚拟内存实时性支持、文件系统支持等,但是系统代码尺寸相对较大。而传感器网络的硬件等资源极为有限,上述操作系统很难在无线传感器网络这样的硬件资源上高效运行。第6章 无线传感器网络开发环境的构建及应用实践 4 4随着无线传感器网络的深入发展,目前已经出现了多种适合于无线传感器网络应用的操作系统,如TinyOS、MantisOS和SOS。本书只对TinyOS操作系统进行简单介绍。 第6章 无线传感器网络开发环境的构建及应用实践 5 56.2 TinyO

4、S操作系统操作系统TinyOS是一个典型的无线传感器网络操作系统,能够很好地满足无线传感器网络操作的要求。TinyOS是由加州大学伯克利分校开发的一个开源的嵌入式操作系统。它采用一种基于组件(Component-based)的开发方式,能够快速实现各种应用。TinyOS的程序核心往往都很小(一般来说核心代码和数据大概为400B),这样能够突破传感器存储资源少的限制,让TinyOS有效运行在无线传感器网络上。它还提供一系列可重用的组件,可以简单方便地编制程序,用来获取和处理传感器的数据并通过无线电来传输信息。一个应用程序可以使用这些组件,方法是通过连接配置文件第6章 无线传感器网络开发环境的构建

5、及应用实践 6 6(Configuration)将各种组件连接(Wiring)起来,以完成它所需要的功能。系统采用事件驱动的工作模式采用事件触发去唤醒传感器工作。TinyOS操作系统、库程序和应用服务程序均是用nesC语言编写的,TinyOS的很多特性,如并发模型、组件结构等都是由nesC语言体现的。nesC是一种开发组件式结构程序的语言,采用C语法风格的语言,其语法是对标准C语法的扩展。nesC支持TinyOS的并发模型,也使得组织、命名和连接组件成为健壮的嵌入式网络系统的机制。 第6章 无线传感器网络开发环境的构建及应用实践 7 7TinyOS2.x支持eyesIFX、intelmote2

6、、mica2、mica2dot、mlcaz、shimmer、telosb、tinynode等平台。TinyOS 集成开发环境(IDE)种类有:eclipse(集成开发环境)、TOSSIM(TinyOS Simultor)、IAR Embedded Workbench、TI公司提供的开发工具(支持MCU的有CC2530、MSP430、TMS470、C2000等处理器)、ATMEL AVR Studio集成开发环境和AVR单片机C语言编译器等。第6章 无线传感器网络开发环境的构建及应用实践 8 86.2.1 Ubuntu下下TinyOS2.x环境的搭建环境的搭建1在在Ubuntu10.04下添加下

7、添加TinyOS资源资源Ubuntu10.04下TinyOS2.x环境的搭建所需的软件如下:(1) Ubuntu版本:10.04;(2) Eclipse版本:3.6;(3) TinyOS版本:2.1.1。第6章 无线传感器网络开发环境的构建及应用实践 9 9在Ubuntu10.04下添加TinyOS的步骤如下:(1) 配置source源,修改/ect/apt/sources.list文件,添加一行:$ deb http:/TinyOS./TinyOS/dist/ubuntu lucid main具体命令如下:$ sudo gedit /ect/apt/sources.l

8、ist$deb http:/TinyOS./TinyOS/dist/ubuntu lucid main其中,lucid是ubuntu10.04系统版本的代号。(2) 更新源目录的包的列表,命令如下:$sudo apt-get update第6章 无线传感器网络开发环境的构建及应用实践 10 10(3) 安装tinyOS最新版及其相关工具。在命令行下运行下列命令:$sudo apt-get install TinyOS 很有可能会提示在几个版本中选择,可选择其中一个版本,然后重新执行如下命令:$sudo apt-get install TinyOS-2.1.1(4) 进入

9、/opt/tinyOS2.1.1目录下,修改tinyOS.sh文件,将CLASSPATH一行修改为:CLASSPATH=$CLASSPATH:$TOSROOT/support/sdk/java:$TOSROOT/support/sdk/java/TinyOS.jar第6章 无线传感器网络开发环境的构建及应用实践 11 11(5) 进入/home/yourname目录,在当前目录下.bashrc文件中添加以下内容来进行开发环境的配置。执行命令:$sudo gedit /.bashrc增加下面两行:source /opt/TinyOS-2.1.1/TinyOS.shexport CLASSPATH

10、=$TOSROOT/support/sdk/java/TinyOS.jar:.第6章 无线传感器网络开发环境的构建及应用实践 12 12(6) 执行如下更新命令:$source ./bashrc$sudo tos-install-jni当上述配置完毕后,运行以下命令检查环境配置情况:$tos-check-env(7) 安装g+。执行如下命令,可完成g+的安装。$sudo apt-get install g+$sudo apt-get install python2.6-dev第6章 无线传感器网络开发环境的构建及应用实践 13 13(8) 测试。用下列命令可测试配置是否成功:$cd /opt/

11、TinyOS-2.1.1/apps/Blink$make telosb如果要仿真,则需要修改/opt/TinyOS-2.1.1/support/make/sim.extra文件。首先执行命令:$gedit /opt/TinyOS-2.1.1/support/make/sim.extra然后修改python的版本为:PYTHON_VERSION=2.6再重新运行:make micaz sim若出现了提示:* Successfully built micaz TOSSIM library则表示构建了TOSSIM库。第6章 无线传感器网络开发环境的构建及应用实践 14 142安装安装Eclipse和

12、和Yeti插件插件1) 安装Eclipse3.5可在终端里直接输入:sudo apt-get install eclipse具体安装步骤如下:(1) 下载eclipse3.6 for Linux的版本:http:/ 无线传感器网络开发环境的构建及应用实践 15 15(2) 解压缩安装包,放置相应安装目录。执行如下命令:cd /home/frankwoo/Downloadstar -zxvf eclipse-SDK-3.6-linux-gtk.tar.gzmv eclipse /usr/share(3) 创建ubuntu的eclipse菜单,执行如下命令:gedit /usr/share/app

13、lications/Eclipse36.desktop添加内容: Desktop EntryName=Eclipse第6章 无线传感器网络开发环境的构建及应用实践 16 16Comment=Eclipse IDEExec=/usr/share/eclipse/eclipseIcon=/usr/share/eclipse/icon.xpmTerminal=falseType=ApplicationCategories=Application;Development;然后保存关闭。至此,Ubuntu上Eclipse3.6的安装完成。第6章 无线传感器网络开发环境的构建及应用实践 17 172) 安

14、装插件安装必要的插件,以免在安装Yeti时出现提示缺少组件。具体步骤如下:(1) 安装GEF插件。选择ecllipse的help菜单下的install new software子选项,再选择add,然后在 name中输入GEF,在location中输入/tools/gef/updates/releases/直接选上最后一个,然后单击next,再选择accept all直至完成“finish”,最后重新启动。(2)安装CDT插件。在name处输入CDT,在location处输入/tools/c

15、dt/releases/helios第6章 无线传感器网络开发环境的构建及应用实践 18 18(3) 安装Yeti插件。选择ecllipse的help菜单下的install new software子选项,再选择add,然后在name中输入Yeti2,在location中输入http:/tos-ide.ethz.ch/update/site.xml。然后单击下一步“next”,等待更新。安装完毕后可设置环境变量,如下:Window-Preferences-TinyOS-Environments检查各个目录,单击Apply,若出现OK,则设置完毕。3检查检查TinyOS的安装的安装TinyOS-

16、Check Installation至此,TinyOS环境搭建完毕。第6章 无线传感器网络开发环境的构建及应用实践 19 196.2.2 NesC语言和语言和TinyOS的组件的组件1NesC语言的使用环境语言的使用环境NesC是一种扩展C的编程语言,主要用于传感器网络的编程开发,加州大学伯克利分校研发人员为这个平台开发了微型操作系统TinyOS和编程语言NesC,同时国内外很多大学和机构利用这一平台进行了相关问题的研究。NesC主要用在TinyOS中,TinyOS也是由NesC编写完成的。TinyOS操作系统就是为用户提供一个良好的用户接口。基于以上分析,研发人员在无线传感器节点处理能力和存

17、储能力有限的情况下设计了一种新型的嵌入式系统TinyOS,具有更强的网络处理和资源收集能力,可满足无线传感器网络的要求。为满足无线传感器网络的要求,研究人员在TinyOS中引入了四种技术:轻线程、主动消息、事件驱动和组件化编程。轻线程主要是针对节点并发操作可能比较频繁,且线程比较短,传统的进程/线程调度无法满足(使用传统调度算法会产生大量能量用在无效的进程互换过程中)的问题提出的。第6章 无线传感器网络开发环境的构建及应用实践 20202NesC语言的主要特性语言的主要特性由于传感器网络的自身特点,面向它的开发语言也有其相应的特点。主动消息是并行计算机中的概念。在发送消息的同时传送处理这个消息

18、的相应处理函数ID和处理数据,接收方得到消息后可立即进行处理,从而可减少通信量。整个系统的运行是因为事件驱动而运行的,没有事件发生时,微处理器进入睡眠状态,从而可以达到节能的目的。组件就是对软硬件进行功能抽象。整个系统是由组件构成的,组件可提高软件重用度和兼容性,程序员只关心组件的功能和自己的业务逻辑,而不必关心组件的具体实现,从而可提高编程效率。第6章 无线传感器网络开发环境的构建及应用实践 21 213TinyOS的组件模型的组件模型1) 接口(Interface)nesC的接口有双向性,是提供者组件和使用者组件之间的多功能交互通道。接口提供者实现了接口的一组功能函数,称为命令;接口使用者

19、需要实现的一组功能函数称为事件。对于一个组件而言,如果它要使用某个接口中的命令,它必须实现这个接口的事件。接口由interface类型定义,interface的语法定义如下:nesC-file:includes-listopt erface:第6章 无线传感器网络开发环境的构建及应用实践 2222interface identifier declaration-list storage-class-specifier: also one ofcommand event async声明列表中,每个接口类型都有一个声明范围。声明列表必须由command或event存储类(

20、Storage Class)的功能描述组成,否则会发生编译时错误。可选的async关键字指出命令或事件能在一个中断处理程序(Interface Handler)中执行。通过包含列表(Includes-list),一个接口能可选择地包括C文件。简单的接口定义例子如下:第6章 无线传感器网络开发环境的构建及应用实践 2323interface SendMsg command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg);event result_t sendDone (TOS_MsgPtr msg, result_t

21、 success)j从上面的定义可以看出,接口SendMsg包括了一个命令send和一个事件sendDone。提供接口SendMsg的组件必须实现send命令,而使用该接口的组件必须实现sendDone事件。第6章 无线传感器网络开发环境的构建及应用实践 24242) 组件(Component)任何一个nesC应用程序都是由一个或多个组件连接起来的,从而形成了一个完整的可执行程序。在nesC中有两种类型的组件,分别称为模块和配置。模块提供应用程序代码,实现一个或多个接口;配置则是用来将其他组件装配起来的组件,将各个组件所使用的接口与其他组件提供的接口连接在一起,这种行为称为连接(Wiring)

22、。每个nesC应用程序都由一个顶级配置所描述,其内容就是将该应用程序所用到的所有组件连接起来,形成一个有机整体。组件的语法定义如下:第6章 无线传感器网络开发环境的构建及应用实践 2525nesC-file:includes-listopt moduleincludes-listopt configuration.module:module identifier specification module-implementationconfiguration:configuration identifier specification configuration-implementation组

23、件名由标识符(Identifier)定义。该标识符是全局性的,且属于组件和接口类型命名空间。一个组件可以有两种作用域:一个规范(Specification)作用域,属于C的全局作用域;一个实现(Implementation)作用域,属于规范作用域。第6章 无线传感器网络开发环境的构建及应用实践 2626通过包含列表,一个组件能可选择地包括C文件。规范列出了该组件所提供或使用的规范元素(接口实例、命令或事件)。就如前面所述,一个组件必须实现它提供接口的命令和它使用的接口事件。一般情况下,命令向下调用硬件组件,而事件向上调用应用组件。组件间的交互只能通过组件的规范元素来沟通。每种规范元素有一个名字

24、(接口实例名、命令名或事件名)。这些名字属于每个组件特有的规范作用域的变量命名空间。规范的语法定义如下:第6章 无线传感器网络开发环境的构建及应用实践 2727specification:uses-provides-list uses-provides-list:uses-providesuses-provides-list uses-providesuses-provides:uses specification-element-listprovides specification-element-listspecification-element-list:specification-el

25、ement specification-elements specification-elements:specification-elementspecification-elements specification-element第6章 无线传感器网络开发环境的构建及应用实践 2828一个组件规范可以有多个uses和provides指令。多个uses和provides指令的规范元素可以通过使用“”和“)”符号在一个uses或provides命令中指定。例如,下面两个定义是等价的:module A1 module A1 uses interface X; uses uses interfac

26、e Y; interface X; . interface Y; .第6章 无线传感器网络开发环境的构建及应用实践 2929一个接口实例描述如下:specification-element:interface renamed-identifier parametersopt.renamed-identifier:identifieridentifier as identifierinterface-parameters: parameter-type-list第6章 无线传感器网络开发环境的构建及应用实践 3030接口实例声明的完整语法是interface X as Y,这里可以明确地定义Y作

27、为接口的名字。interface X是interface X as X的一个简写形式。如果接口参数(Interface-parameters)被省略,那么interface X as Y声明了对应该组件的单一接口的一个简单的接口实例。如果给出了接口参数(如interface SendMsguint8_t id),那么这就是一个参数化的接口实例声明,对应该组件的多个接口中的一个(每个接口对应不同参数值,因为8位整数可以表示256个值,所以interface SendMsguint8_t id中可以声明256个SendMsg类型的接口)。参数化接口的参数类型必须是整型(这里枚举类型是不允许的)。第

28、6章 无线传感器网络开发环境的构建及应用实践 31 31指令或事件能通过一个声明了指令或事件及存储类型的标准的C函数作为规格元素直接地被包含:specification-element:declaration.storage-class-specifier: also one ofcommand event async如果该声明不是带有指令或事件存储类型的函数声明,则会产生编译时错误。作为接口实例, 如果没有指定接口参数,指令(事件)就是简单的指令(简单的事件);如果接口参数是指定的,就是参数化指令(参数事件)。接口参数被放置在一般的函数参数列表之前,例如:第6章 无线传感器网络开发环境的构建

29、及应用实践 3232command void senduint8 t id(int x):direct-declarator: alsodirect-declarator interface-parameters ( parameter-type-list ).注意:接口参数只允许在组件说明中的指令或事件上使用,而不允许在接口类型中使用。下面是一个完整的规格例子:configuration GenericComm provides interface StdControl as Control;/该接口以当前消息序号作参数interface SendMsguint8_t id;第6章 无线传感

30、器网络开发环境的构建及应用实践 3333interface ReceiveMsguint8_t id;uses /发送完成之后为组件作标记/重试失败的发送event result_t sendDone(); .在这个例子中,提供了简单的接口实例类型StdControl的控制,提供了接口类型 SendMsg和ReceiveMsg的参数实例,参数实例分别为SendMsg和ReceiveMsg,使用了事件sendDone。第6章 无线传感器网络开发环境的构建及应用实践 34343) 模块(Module)模块使用C语言实现组件规范,其定义如下:module-implementation:impleme

31、ntation translation-unit )其中,translation-unit是一连串的C语言声明和定义。模块中的translation-unit的顶层声明属于模块的组件实现作用域。这些声明的范围可以是任意的标准C语言的声明或定义、任务声明或定义、命令或事件的实现。第6章 无线传感器网络开发环境的构建及应用实践 3535下面的C语言语法定义了这些命令和事件的实现:storage-class-specifier: also one ofcommand event asyncdeclaration-specifiers: alsodefault declaration-specifie

32、rsdirect-declarator: alsoidentifier.identifierdirect-declarator interface-parameters (parameter-type-list )筒单命令或事件的实现需要满足具有command或event存储类的C语言函数定义的语法。另外,如果在命令或事件的声明中包含了async关键字,那么在实现中必须包含async。第6章 无线传感器网络开发环境的构建及应用实践 36364) 调用命令(Calling Commands)和触发事件(Signaling Events)下面的C语法的扩展语法定义了调用命令和触发事件:postfi

33、x-expression:postfix-expression argument-expression-list call-kindopt primary ( argument-expression-listopt ).call-kind: one ofcall signal post使用can a()调用一个简单的命令a,使用signal a()来触发一件简单的事件a。第6章 无线传感器网络开发环境的构建及应用实践 3737例如,在模块中使用接口Send的SendMsg类型:call Send.send(l,sizeof(Message),&msgl)对于类型为t1, , tn的接口

34、参数的参数化命令a(或事件a),可以使用call ael()来调用,也可以使用signal ael,en()来触发事件。接口参数表达式ei必须匹配类型ti;实际的接口参数值映射到ti。第6章 无线传感器网络开发环境的构建及应用实践 38385) 原子(Atomic)的陈述nesC使用“原子”指出该段代码“不可被打断”。原子的语法如下:atomic-stmt:atomic statement下面是一个简单的例子:bool busy; /全局变量void f() bool available; atomic favailable= !busy; busy=TRUE; if (available)

35、do_something; atomic busy=FALSE;第6章 无线传感器网络开发环境的构建及应用实践 3939原子的区段应该很短,虽然这常常并不是必需的。控制只能“正常地”流入或流出原子的陈述;任何goto、return、break或continue跳转入或转出一原子陈述都是错误的。返回陈述决不允许进入原子陈述。第6章 无线传感器网络开发环境的构建及应用实践 40406) 配置(Configuration)配置通过连接一些其他组件来实现一个组件的规范。配置的语法如下:configuration-implementation:implementation component-list印

36、t connection-list connection-list中列出用来构成配置的组件,connection-list指出这些组件是如何相连接以及如何与配置规范连接在一起的。这里把配置规范中的规范元素称为外部(External)规范元素,而把在配置的组件中的规范元素称为内部(Internal)规范元素。第6章 无线传感器网络开发环境的构建及应用实践 41 417) 包含组件组件列表列出用来建立这一结构的组件。在结构里这些组件可随意地重命名,使用共同外形规格元素,或简单地改变组件结构从而避免名称冲突。为避免改变配置,为组件选择的名字属于成分的实现域。包含组件列表的语法如下:component

37、-list:componentscomponent-list componentscomponents:components component-line;第6章 无线传感器网络开发环境的构建及应用实践 4242 component-line:renamed-identifiercomponent-line, renamed-identifierrenamed-identifier:identifieridentifier as identifier如果两个组件使用as而导致重名,则会产生编译时错误(如components X、Y as X)。一个组件始终只能有一个实例,如果在两个不同的配置中

38、都使用了组件K,或者在同一配置中使用两次组件K,在程序中仍然只有K(及它的变量)的一个实例。第6章 无线传感器网络开发环境的构建及应用实践 43438) 连接(Wiring)连接用来把规范元素(接口、命令和事件)联系在一起。由于连接的内容比较复杂,读者可以参考nesC给出的应用示例中的源代码进行对照阅读。连接的语法定义如下:connection-list:connectionconnection-list connectionconnection:endpoint=endpointendpointendpoint2;是一种包含两个内部规范元素的连接。这样经常把endpoint1定义的被使用的规

39、范元素连接到endpoint2定义的被提供的规范元素上。(3) endpoint1endpoint1。这三种连接中,指定的两个规范元素必须是相容的,即它们必须都是命令、事件或接口实例。同时,如果它们都是命令(或事件),则它们必须有相同的函数特征。如果它们都是接口实例,则它们必须有相同的接口类型。如果这些条件不能满足,就会发生编译时错误。第6章 无线传感器网络开发环境的构建及应用实践 4747如果一个端点是参数化的,则另一个必须也是参数化的,并且必须有相同的参数类型;否则就会发生编译时错误。同一规范元素可能会被多次连接,例如:configuration C rovides interface X

40、jimplementation components C1, C2;X= C1.X;X= C2.X;第6章 无线传感器网络开发环境的构建及应用实践 4848在这个例子中,多次连接将会导致接口X的事件多次被触发(扇入),当接口X中的命令被调用时,会导致多个函数被执行(扇出)。注意:当两个配置独立地连接同一接口时,也会发生多重连接。第6章 无线传感器网络开发环境的构建及应用实践 49496.3 无线传感器网络实验平台无线传感器网络实验平台6.3.1 无线传感器网络实验平台简介无线传感器网络实验平台简介 图图6.1 节点柜节点柜本节主要介绍GreenOrbs无线传感器网络实验平台,该实验平台将节点固

41、定在有机玻璃面板上的滑动槽中,每个节点通过面板上的USB接口和USB Hub相连。多级USB Hub和电脑相连,实验人员能够直接访问所有节点进行程序烧录、参数配置和数据获取。有机玻璃面板可以悬挂在墙壁上或者安放在实验平台附带的金属支架上。多个面板可以自由组合,方便运输和网络规模的扩充。实验平台的节点柜如图6.1所示。第6章 无线传感器网络开发环境的构建及应用实践 5050图6.1 节点柜第6章 无线传感器网络开发环境的构建及应用实践 51 51GreenOrbs无线传感器网络实验平台的设计目标是为大规模自组织网络的协议及应用开发提供便利的测试环境,同时可作为物联网相关课程的教学实验系统。1功能

42、特点功能特点GreenOrbs无线传感器网络实验平台的功能特点如下:(1) 网络规模可动态调整,实验人员可根据实验要求灵活快捷地增加和减少节点数量,目前可支持多达150个节点的传感器节点矩阵。(2) 实验平台支持程序的自动批量烧录,可为实验提供很大的便利。第6章 无线传感器网络开发环境的构建及应用实践 5252(3) 实验平台具备节点位置自动识别功能,实验人员可对指定位置节点进行操作。(4) 实验平台为节点提供了电池和USB接口两种供电方式。(5) 实验平台可对网络拓扑进行在线控制。(6) 除无线通信之外,实验平台能方便地通过USB接口获取节点数据,为程序调试和其他科研教学活动提供了强有力的支

43、持。(7) GreenOrbs物联网实验室解决方案提供了丰富的软件工具和高效的开发测试环境,可显著加快传感器网络通信协议开发、系统设计和应用研究进程。第6章 无线传感器网络开发环境的构建及应用实践 5353(8) GreenOrbs物联网实验室解决方案附带一系列无线传感网络的实例、演示程序和开发教程,可为物联网相关课程的教学工作提供帮助。(9)GreenOrbs物联网实验室解决方案从物联网四层结构对高校物联网实验室建设给出了合理性的建议,采用“层阶式”教学方式,强调学生的设计、创新及实践能力,培养物联网工程专业的高级人才。第6章 无线传感器网络开发环境的构建及应用实践 54542平台方案平台方

44、案GreenOrbs无线传感器网络实验平台支持多达150个节点的1510矩阵。所有节点固定在一块3m4.5m有机玻璃上,通过USB线连接到一台PC。节点间水平和垂直距离均为20cm。节点数量和网络拓扑可以根据实验需求动态调整。GreenOrbs实验平台服务器端采用开源的Linux操作系统,用户能够根据自己的需求选用大量的开源软件或者根据自己的需求自由开发新的工具。节点采用TinyOS 2.x和NesC 编译工具。TinyOS是为传感器网络节点而设计的一个事件驱动的操作系统。NesC是对C 的扩展,它基于体现TinyOS的结构化概念和执行模型而设计。GreenOrbs实验平台支持现有的大量Tin

45、yOS和NesC开发工具。第6章 无线传感器网络开发环境的构建及应用实践 5555GreenOrbs实验平台提供自动、灵活的节点软件批量并行烧录工具。该工具能自动识别各个节点在平台上的物理位置并自动实现和管理节点ID与物理位置之间的映射关系。在代码烧录过程中,可以根据需求对任意指定的多个节点并行烧入不同的代码,极大地缩短软件烧录时间。GreenOrbs实验平台支持实时的大批量实验数据收集。在实验过程中,传感器节点产生的各种实验和监控数据能够通过USB端口将实验数据实时发送到PC端。在PC端,GreenOrbs实验平台能够自动地将节点产生的数据按照实验要求存储在PC中。在试验过程中,研究人员能够

46、随时分析实验数据和了解试验进展。第6章 无线传感器网络开发环境的构建及应用实践 56561) 硬件方案GreenOrbs实验平台主要选用如下硬件模块: GF-100传感器节点(基本模块); GF-103传感器节点(基本模块、温湿度传感器、光照传感器、GPS); GF-103E传感器节点(基本模块、温湿度传感器、光照传感器、GPS、封装套件); GC-203E传感器节点(基本模块、增强处理模块、温湿度传感器、光照传感器、CO2传感器); 实验床及平台支持移动装置; 基站。第6章 无线传感器网络开发环境的构建及应用实践 57572) 软件方案Green Orbs实验平台主要选配如下软件模块: Li

47、nux下的TinyOS开发环境; 实验平台驱动配置软件工具包; 实验平台工具软件套装(包括传感器自动定位和程序烧录工具,支持定点烧录和批量烧录); 物联网示范系统演示软件套装; 传感器网络实验数据分析和演示工具; 物联网和传感器网络实验课程教学管理软件。3) 传感器节点传感器节点GF-103/GF-103E、GC-203E的主要技术性能指标如表6.1所示。第6章 无线传感器网络开发环境的构建及应用实践 5858表表6.1 传感器节点的主要技术性能指标传感器节点的主要技术性能指标 第6章 无线传感器网络开发环境的构建及应用实践 59596.3.2 TinyOS操作系统在无线传感器网络中的应用实践

48、操作系统在无线传感器网络中的应用实践1简单简单TinyOS程序程序通过设计实现单个传感器节点程序的LED亮灯的程序,初步了解如何编译及烧录简单嵌入式NesC程序,并了解典型NesC的程序结构及语法。1) 编译及运行示例程序首先,将telosb节点连接到PC的USB接口后,运行以下命令查看连接情况:$ motelistReference Device Description- - -M4AP1122 /dev/ttyUSB0 Sentilla tmote sky第6章 无线传感器网络开发环境的构建及应用实践 6060这表示telosb节点成功连接到PC,并且设备端口号为/dev/ttyUSB0。

49、运行以下编译烧录命令:$make telosb install如果没有提示错误,并且节点上的LED开始有规律地闪烁,那么表示程序编译并且烧录成功。第6章 无线传感器网络开发环境的构建及应用实践 61 612) 程序结构说明每一个nesC程序都是由若干组件(Component)组成的。组件有两种类型,一种是模块(Module),另一种是配置(Configuration)。配置文件的作用是表明组件之间的关系。模块文件的作用是将程序的具体实现放在其中。此外,每个程序都需要一个顶层的配置文件,它是用程序名命名的。例1 示例Blink程序:程序由一个模块文件(BlinkC.nc)和一个配置文件(Blin

50、kAppC.nc) 两个组件组成。第6章 无线传感器网络开发环境的构建及应用实践 6262下面是BlinkAppC.nc的源代码:configuration BlinkAppC implementation components MainC, BlinkC, LedsC; components new TimerMilliC() as Timer0;components new TimerMilliC() as Timer1; components new TimerMilliC() as Timer2; BlinkC - MainC.Boot; BlinkC.Timer0 - Timer0;

51、 BlinkC.Timer1 - Timer1; BlinkC.Timer2 - Timer2; BlinkC.Leds - LedsC; 第6章 无线传感器网络开发环境的构建及应用实践 6363这表明这是一个名为BlinkAppC的配置。在implementation关键字后面的括号内是配置的具体实现。components关键字后面表明了这个配置文件所引用的组件,在这里分别是Main、BlinkC、LedsC以及三个TimerMilliC组件。最后五行表明了各组件间的Provider和User的关系。A-B表示了一种关系,其中A为使用方(User),而B为提供方(Provider)。命令(C

52、ommand)是接口提供方已经实现的函数。事件(Event)是需要接口使用方实现的函数。第6章 无线传感器网络开发环境的构建及应用实践 6464BlinkC.nc的源代码:module BlinkC uses interface Timer as Timer0; uses interface Timer as Timer1; uses interface Timer as Timer2; uses interface Leds; uses interface Boot; implementation / implementation code omitted 第6章 无线传感器网络开发环境的构

53、建及应用实践 6565第一行内容表明这是一个名为BlinkC的module,而后括号中的内容表明了该module使用的接口(interface)。注意:这个module没有提供接口。由于使用方必须实现接口中的event函数,因此我们可以看到该文件中的implement中包含了初始化Boot.booted,以及三个Timer时的event函数的具体实现。在每个Timer的触发event函数内容中写明了其需要触发的内容。第6章 无线传感器网络开发环境的构建及应用实践 66662TinyOS执行模型执行模型典型的传感器节点程序可能同时包含同步处理与异步处理过程。本小节通过介绍TinyOS的执行模型来

54、实现程序的异步处理。1) 同步及异步处理原理前面的程序都是同步运行处理,只单一地执行上下文,是非抢占式的方式。同步运行处理有利于TinyOS的调度,在使得RAM使用最小化的同时让同步代码尽可能地简单。缺点是从开始运行一直占用CPU直到运行完毕为止,期间其他同步代码没有任何运行的机会,从而严重影响系统的响应性。第6章 无线传感器网络开发环境的构建及应用实践 6767非抢占式的同步代码在大计算量的情况下可能会遇到一些问题,因此,就需要将大计算量的代码分割成若干小的部分,每次只执行一小部分,并且当一个组件需要做某件事情时,可以稍后再做。在TinyOS中,对计算进行延迟,直到计算所需要的条件都满足时再

55、开始任务(Task)是应用程序中通用的“后台”处理方式。一个任务就是一个函数,它告诉TinyOS可以在稍晚时候进行运算,而不是立刻执行。在传统操作系统(Linux)中与之最接近的概念是中断阀门和延迟程序调用。第6章 无线传感器网络开发环境的构建及应用实践 68682) 同步阻塞例子说明例2 BlinkTask1例子。event void Timer0.fired() uint32_t i; dbg(“BlinkC”, “Timer 0 fired %s.n”,sim_time_string(); for(i=0;inodeid = TOS_NODE_ID; btrpkt-counter = c

56、ounter; if (call AMSend.send(AM_BROADCAST_ADDR, &pkt, sizeof(BlinkToRadioMsg)=SUCCESS) busy = TRUE; 第6章 无线传感器网络开发环境的构建及应用实践 8282消息发送完毕后,清除忙标志位:event void AMSend.sendDone(message_t* msg, error_t error) if (&pkt = msg) busy = FALSE; 要为每个提供接口的组件添加组件声明,其中AM_BLINKTORADIO参数表明AMSenderC的AM类型。在头文件中有定

57、义:implementation . components ActiveMessageC; components new AMSenderC(AM_BLINKTORADIO); . 第6章 无线传感器网络开发环境的构建及应用实践 8383然后,将接口的提供方和使用方连接起来:implementation . App.Packet - AMSenderC; App.AMPacket - AMSenderC; App.AMSend - AMSenderC; App.AMControl - ActiveMessageC; 第6章 无线传感器网络开发环境的构建及应用实践 84843) 消息接收接收到消

58、息后,首先解析出消息中的计数器,然后计数器按照这个计数值的低三位亮灯,具体过程如下:(1) 接口声明。使用Receive接口来接收包。在BlinkToRadioC.nc文件中添加以下声明: module BlinkToRadioC . uses interface Receive; 第6章 无线传感器网络开发环境的构建及应用实践 8585(2) 接收逻辑。接收逻辑实现接口Receive.receive事件处理。event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) if (len = sizeof

59、(BlinkToRadioMsg) BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; call Leds.set(btrpkt-counter); return msg; 第6章 无线传感器网络开发环境的构建及应用实践 8686(3) 组件声明。添加Receive接口对应的组件声明:implementation . components new AMReceiverC(AM_BLINKTORADIO); . 4) 程序测试分别使用make telosb install,1和make telosb install,2烧录两个节点。通电后查看

60、效果。当按住某一个节点的RESET键时,另一个节点的读数应当停止。第6章 无线传感器网络开发环境的构建及应用实践 87874PC串口通信串口通信通过串口连接,PC可以从网络搜集其他节点的数据,也可以发送数据或者命令到节点,实现节点和PC间的串口双向通信,因此,串口通信编程是无线传感器网络中的重要内容。下面介绍使用MIG工具和SerialForwarder修改BlinkToRadio程序,使用MsgReader读取MIG创建的BlinkToRadioMsg的Java对象内容。1) TestSerial例子程序节点与PC之间的通信在TinyOS中被抽象为数据包源(Packet Source)。一个数据包源就是一种与节点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论