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