文档章节

TinyOS温湿度和光照强度采集

cpt725
 cpt725
发布于 2014/12/16 22:43
字数 631
阅读 307
收藏 1

大家看完之后,会发现其实用TinyOS采集数据很简单。主要是找到你用的传感器的型号,再找到对应的接口或者组件文件。

温湿度采集

经过查找我手上的telosb的资料我发现,它使用的温湿度传感器为Sht11,然后在tinyOS的tinyos-2.1.1\tos\platforms\telosa\chips\sht11路径下找到相关的接口和组件。

  • 然后在配置文件中添加SensirionSht11C组件的链接,详细代码后面会给出。

  • 我这是我的测试节点的传感器型号,不一样的可以参考一下。

光照强度采集

我的是使用的HamamatsuS1087传感器,经过搜索在tinyos-2.1.1\tos\platforms\telosa\chips\s1087目录下。HamamatsuS1087ParC.nc

HamamatsuS1087ParP.nc

然后在配置文件中添加HamamatsuS1087ParC组件的链接,详细代码后面会给出。

下面给出详细的代码,供大家参考学习。

SenseAppC

configuration SenseAppC
{} 
implementation
{
  components MainC, LedsC, ActiveMessageC;
 components SenseC as App;
 components new TimerMilliC() as Timer0;
 components new SensirionSht11C() as Sht11;
 components new HamamatsuS1087ParC();
 components new AMSenderC(6);
   components new AMReceiverC(6);

  App -> MainC.Boot;
  App.Leds -> LedsC;
 App.Timer0->Timer0;
 App.RadioSend -> AMSenderC;
  App.RadioPacket -> AMSenderC;
   App.RadioAMPacket -> AMSenderC;
   App.RadioControl -> ActiveMessageC;
   App.RadioReceive -> AMReceiverC;
 App.TemRead->Sht11.Temperature;
 App.HumRead->Sht11.Humidity;
 App.LigRead->HamamatsuS1087ParC;
}

SenseC

module SenseC 
{
  uses interface Leds;
  uses interface Boot;
  uses interface Timer<TMilli> as  Timer0;
 
 uses interface Packet as RadioPacket;
  uses interface AMPacket as RadioAMPacket;
  uses interface AMSend as RadioSend;
   uses interface Receive as RadioReceive;
   uses interface SplitControl as RadioControl;
 uses interface Read<uint16_t> as TemRead;
 uses interface Read<uint16_t> as HumRead;
 uses interface Read<uint16_t> as LigRead;
}
implementation
{
 uint32_t  count=0;
 bool radiobusy=FALSE;
 bool temdone=FALSE;
 message_t pkt;
 uint16_t temperature;
 uint16_t humidity;
 typedef nx_struct SHTMsg
 {
  nx_uint16_t nodeid;
  nx_uint16_t type;
  nx_uint16_t temperature;
  nx_uint16_t humidity; 
 }SHTMsg;
 typedef nx_struct LigMsg
 {
  nx_uint16_t nodeid;
  nx_uint16_t type;
  nx_uint16_t light;
 }LigMsg;
 typedef nx_struct RadioMsg
 {
  nx_uint16_t nodeid;
  nx_uint16_t count;  
 }RadioMsg;
   event void Boot.booted()
   {
    call RadioControl.start();
  call  Timer0.startPeriodic(10000);
   }
     event void Timer0.fired()
 {
  call LigRead.read();
  call TemRead.read();
  call HumRead.read();
 }
     event void TemRead.readDone(error_t result, uint16_t data)
     {
      if(result==SUCCESS)
      {
       call Leds.led1Toggle();
   temperature=data;
   temdone=TRUE;
  }
 }
 event void HumRead.readDone(error_t result, uint16_t data)
     {
      if(result==SUCCESS)
      {
       call Leds.led1Toggle();
   humidity=data;
   if((!radiobusy)&&temdone)
   {
    SHTMsg* btrpkt=(SHTMsg*)(call RadioPacket.getPayload(&pkt,sizeof(SHTMsg)));
    btrpkt->nodeid=TOS_NODE_ID;
    btrpkt->type=0x01;
    btrpkt->temperature=temperature;
    btrpkt->humidity=humidity;
    temdone=FALSE;
    if(call RadioSend.send(1,&pkt,sizeof(SHTMsg))==SUCCESS)
     radiobusy=TRUE;
    
   }
      }
 }
 event void LigRead.readDone(error_t result, uint16_t data)
     {
      if(result==SUCCESS)
      {
   call Leds.led2Toggle();
   if(!radiobusy)
   {
    LigMsg* btrpkt=(LigMsg*)(call RadioPacket.getPayload(&pkt,sizeof(LigMsg)));
    btrpkt->nodeid=TOS_NODE_ID;
    btrpkt->type=0x02;
    btrpkt->light=data;
    if(call RadioSend.send(1,&pkt,sizeof(LigMsg))==SUCCESS)
     radiobusy=TRUE;
    
   }
      }
 }
 event void RadioControl.startDone(error_t err)
 {
 }
 event void RadioControl.stopDone(error_t err)
 {
 
 }
 event void RadioSend.sendDone(message_t* msg,error_t error)
 {
  if(&pkt==msg)
   radiobusy=FALSE;
 }
 event message_t*  RadioReceive.receive(message_t* msg,void *payload,uint8_t len)
 { 
  if(len==sizeof(RadioMsg))
  {
   RadioMsg* btrpkt =(RadioMsg*)payload;
   count=btrpkt->count;
   if(count==TOS_NODE_ID)
   {
   
    call Leds.led1Toggle();
    call LigRead.read();
    call TemRead.read();
    call HumRead.read();
   }
  }
  return msg;
 }
}

Makefile

COMPONENT=SenseAppC
include $(MAKERULES)

© 著作权归作者所有

cpt725
粉丝 4
博文 4
码字总数 1200
作品 0
广州
私信 提问
tinyos-2x有没有像tinyos-1x版本的tinyviz工具

据说还在开发新版本的tinyviz,但是有没有替代品,还有就是资料大都是tinyos-1x版本的,不知道各位有没有tinyos-2x版本的书籍资料

吟啸_徐行
2014/04/23
236
1
TinyOS下TOSSIM仿真CTP

TinyOS的仿真真的是个好东西,跟着下面的步骤做一遍就知道是什么意思了,下面是在Ubuntu下终端的大体演示。 执行命令 TestNetWork文件的源代码里带有仿真需要的文件,待会再解释 。 我在Ubu...

Roam_Co
2018/04/27
0
0
TinyOS、NesC程序开发经验谈

一、 nesC的语法 NesC是标准C的扩展,应用背景是传感器网络这样的嵌入式系统,这类系统的特点是内存有限,存在任务和中断两类操作。NesC的语法和标准C基本没有区别(NesC应该不能动态分配内存...

吟啸_徐行
2014/03/18
471
0
Mate 出自Philip Levis 的微型虚拟机

毫无疑问这个虚拟机并不成功,因为它把简单的事变复杂了,使用类似汇编形式的语言,使得编程更加复杂…… 当然Mate 也使得网络重编程变得可能,不过这点好处并不能弥补其带来的编程复杂性。不...

Cedric_Sun
2013/01/08
152
0
关于6LoWPAN的问题 Contiki TinyOS

请高手指教 1.想做无线传感器网络接入IPv6的课题 是不是应该用6LoWPAN比较好? 2.用6LoWPAN的话,操作系统是用TinyOS比较好还是Contiki(查资料说Contiki下集成uIPv6协议栈和 6LoWPAN适配层 ...

陆恒
2012/03/18
4.8K
8

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 快速安装详解

一、Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле...

网络小虾米
21分钟前
4
0
技术分享 | slave_relay_log_info 表认知的一些展开

作者:胡呈清 slave_relay_log_info 表是这样的: mysql> select * from mysql.slave_relay_log_info\G *************************** 1. row *************************** Number_of_lin......

爱可生
23分钟前
3
0
nginx配置http访问自动跳转到https

server {listen 80;server_name www.域名.com;rewrite ^(.*) https://$server_name$1 permanent;}server {listen 443;server_name www.域名.com;root /home/www;ssl on;......

很好亦平凡ms
24分钟前
3
0
SpreadJS:一款中国研发的类Excel开发工具,功能涵盖Excel的 95% 以上

Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能、数据分析和图表,已经成为数据统计领域不可或缺的软件之一。 基于Excel对数据处理与分析的卓越表现,把Excel...

葡萄城技术团队
24分钟前
3
0
用javafx框架tornadofx做了个天气预报的程序

class WeatherApp : App(WeatherView::class)class WeatherView : View("十五天天气预报") { val weatherVM: WeatherViewModel by inject() val controller: WeatherController by......

oschina4cyy
27分钟前
3
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部