TinyOS 下编写简单的温度检测程序 既然是无线传感器,那它的特性自然是能够感知周围环境,例如温度、湿度、光线或者是声音等,然后利用无线信号将数值返回给用户。我手头上只有 TelosB 喝 MicaZ 两种传感器,而 MicaZ 本身不配有任何感应设备,所以在编写这个例程的时候,还是采用的TelosB 传感器。TelosB 主要是用在研究领域,本身性能一般,但是可以做的事情并不少,可以感知温度、湿度和光线的变化。 这个例程主要包含了两个部分:一是传感器A 感知周围环境温度的变化,然后将数值发送给传感器B,传感器B 接受到数据以后,再通过 USB 接口将数据返回给电脑,然后显示在终端内。也就是说有两套小程序要写,一是数据的感知和发送,另一个是数据的接受、处理和返回。按照 Tiny OS 官方手册内的划分,一共包含了三个技术,分别是感知、无线通讯和串口通讯。而我的例程也是在官方例程的基础上修改而来。 数据的感知和发送 感知数据我们需要使用 Read 接口,而提供这个接口的组件则根据感应部件的不同而不同。TelosB 采用的是Sensirion SHT11,所以提供 Read 接口的组件为 SensirionSht11C。至于无线通讯部分,则还需要 SplitControl、Packet 和 AMSend 三个接口。SplitControl 主要负责启动无线通讯设备,Packet 负责处理数据包,而 AMSend 则负责数据的发送。来看一下模块组件的定义: module TempRadioSndC { uses { interface Boot; interface Leds; interface Timer; interface Read; interface SplitControlas RadioControl; interface Packet; interface AMSend; } } 使用Boot接口是毫无疑问的,处理在程序启动时需要做的初始化工作。Leds 和Timer 两个接口其实并无实际意义,这里只是希望程序开始运行以后,每个2秒钟闪烁一下反光二极管,以表示程序正在运行。然后再看配置组件: configuration TempRadioSndAppC {} implementation { components TempRadioSndC as AppC; components MainC, LedsC; components new TimerMilliC() as Timer; components new SensirionSht11C() as Sense; components new AMSenderC( AM_RADIO_MSG ); components ActiveMessageC; AppC.Boot-> MainC.Boot; AppC.Leds-> LedsC.Leds; AppC.Timer-> Timer.Timer; AppC.Read-> Sense.Temperature; AppC.Packet-> AMSenderC.Packet; AppC.AM...