TinyOS 2.x 入门教程 - 图文

TinyOS Programming

图3.2 telosb节点的反面

接下来针对Telosb平台拥有的资源中比较常用的可编程部分,结合TinyOS中提供的对应的组件及接口进行介绍。

3.1 Led

3.1.1 Telosb硬件平台上的Led器件展示

Led可以说是TinyOS编程中最常用的可编程器件之一。其编程也比较简单,一般只是令其亮、熄灭等。在Telosb节点中其所在位置如图3.3所示:

图 3.3 LED

3.1.2 TinyOS中Led编程组件介绍

1) 接口

关于LED的接口仅有一个,该接口文件在以下目录:tinyos-2.x\\tos\\interfaces,文件名为Leds.nc。其内容如下:

Page 22 of 94

TinyOS Programming

interface Leds {

async command result_t init(); //初始化LED(接口) async command result_t redOn(); //令红色LED亮 async command result_t redOff(); //令红色LED熄灭 async command result_t redToggle(); //令红色LED改变状态 //若亮则熄灭,反之亦然 async command result_t greenOn(); async command result_t greenOff(); async command result_t greenToggle(); async command result_t yellowOn(); async command result_t yellowOff(); async command result_t yellowToggle();

async command uint8_t get(); //获取LED当前状态,即哪个Led亮还是熄灭 async command result_t set(uint8_t value);//设置LED的状态(0~7) }

2) 组件

提供Leds接口的组件有两个,一个是模块LedsC,另一个是模块NoLedsC。这两个模块的文件都是在tinyos-2.x\\tos\\system 目录下,对应文件名分别是LedsC.nc和NoLedsC.nc。

其中,NoLeds模块并非真正控制LED器件,LedsC才是实实在在地控制LED器件。LED可以说是Telosb节点的唯一“界面”,很多编程人员都用其来调试程序。

3.2 传感器

传感器可以说是无线传感器网络的重头戏之一,几乎所有的应用都会涉及到此器件。

3.2.1 Telosb硬件平台上的传感器展示

一般而言,Telosb平台上的传感器有四个,也可能只有内部的两个,传感器数量不同,节点的价格有所区别:

? 内部电压传感器 ? 内部温度传感器 ? 外置的数字温湿度传感器 ? 外置的光电传感器

其中,内部电压、内部温度传感器表面上不可见,外置的传感器则如图3.4所示。

图 3.4 光、数字温湿度传感器

Page 23 of 94

TinyOS Programming

3.2.2 TinyOS中传感器编程组件介绍

1) 接口

Telosb平台中,传感器数据的读取是通过ADC的,故传感器方面的编程“实际上”是对ADC的编程。

TinyOS中,与ADC的相关的接口有ADC、ADCControl及ADCError等。其所在目录为:tinyos-2.x\\tos\\interfaces,对应文件名依次是:ADC.nc、ADCControl.nc及ADCError.nc。

ADC接口的内容如下: /************ * 包含ADC.h头文件, * 注:nesC中,包含头文件不是类似于C语言的 #include “XX.h” ************/ includes ADC; interface ADC { /* 在指定的端口上 (ADCControl接口绑定的),进行ADC转换 */ async command result_t getData(); /* 在指定的端口上 (ADCControl接口绑定的),进行一系列的ADC转换 */ async command result_t getContinuousData(); /*ADC转换结束,触发此事件,data为所得数据 */ async event result_t dataReady(uint16_t data); } ADCControl的内容如下:

interface ADCControl { /* 初始化ADCControl接口 */ command result_t init(); /* 设置采样频率 */ command result_t setSamplingRate(uint8_t rate); /* 将port绑定到ADC端口adcPort*/ command result_t bindPort(uint8_t port, uint8_t adcPort); } ADCError的内容如下:

interface ADCError{ command result_t enable(); //在指定的ADC通道激活错误报告 command result_t disable(); //在指定的ADC通道取消错误报告 event result_t error(uint8_t token); //错误产生则触发此事件 } 其实,跟ADC相关的接口并不止以上三个,例如:HPLADC,并且Telosb平台所用的MSP430 MCU也提供了几个ADC相关的接口,但在应用程序的编写中一般只用到以上三个接口,故在此只介绍上述三个接口,对于其它的接口,如果大家有兴趣的话,自己可以去了解一下。

2) 组件

TinyOS中提供上述几个接口的组件比较多,由于篇幅有限,本节只介绍跟本节提到的传感器相关的几个组件,并且仅限于Telosb平台。

a) 内部电压传感器

Page 24 of 94

TinyOS Programming

内部电压传感器相关的组件是InternalVoltageC,所在目录为:tinyos-2.x\\tos\\chips\\msp430\\sensors,相关文件依次为: Msp430InternalVoltageC.nc及Msp430InternalVoltageP.nc。通过调用其提供的接口Read即可以读取内部电压采样值,经过计算后可以转化为电压值。

b) 内部温度传感器

内部温度传感器器相关的组件是InternalTempC,所在目录为:tinyos-2.x\\tos\\ chips\\msp430\\sensors,相关文件依次为:Msp430InternalTemperatureC.nc及Msp430InternalTemperatureP.nc。通过调用其提供的接口Read即可以读取内部温度采样值,经过计算后可以转化为温度值。

c) 数字温湿度传感器 d) 光电传感器

在tinyos2.x中没有提供可以直接调用的数字温湿度传感器和光电传感器组件。关于这两种传感器的应用在下一章介绍。

3.3 串口

串口设备通常用来跟PC通信。串口编程是TinyOS编程必不可少的部分。

3.3.1 Telosb硬件平台上的串口展示

Telosb平台有两个串口,分别是串口0和串口1。Telosb平台中的串口资源是其MCU——msp430中的资源,TinyOS中默认使用的是串口1。如图3.5所示,对串口进行读写操作时,数据经过USB转串口芯片FT232BM再将数据传输到PC中的USB接口。

图 3.5 USB转串口芯片

如图3.6所示,串口0从MSP430引线出来。

图3.6 串口0发送接收线

Page 25 of 94

联系客服:779662525#qq.com(#替换为@)