TinyOS学习笔记1 (4)

紫陌才韵 分享 2020-04-03 下载文档

uses interface Timer as Timer0;//时间

uses interface Packet; //数据包,在获取负载处用到

uses interface AMPacket; //AM数据包,需要实现SendDone() uses interface AMSend; //AM发送数据 uses interface Receive; //接收数据包 uses interface SplitControl as AMControl; //Split操作 }

implementation {

uint16_t counter; //发送的次数 message_t pkt; //数据包

bool busy = FALSE; //节点是否忙,开始为不忙

//从此处启动,开始程序 event void Boot.booted() {

call AMControl.start(); //调用Split操作的开始,是否成功在startDone()处判断 }

//判断开始是否完成

event void AMControl.startDone(error_t err) { if (err == SUCCESS) {

//成功调用时间周期执行

call Timer0.startPeriodic(TIMER_PERIOD_MILLI); } else {

//未成功重新开始 call AMControl.start(); } }

//停止判断

event void AMControl.stopDone(error_t err) { }

//时间的每次周期执行的内容,发送数据 event void Timer0.fired() {

counter++;//发送数据个数加1

if (!busy) {//节点不忙,则开始发送数据

//设置数据包的负载,btr指向数据包的负载部分 BlinkToRadioMsg* btrpkt =

(BlinkToRadioMsg*)(call Packet.getPayload(&pkt, sizeof(BlinkToRadioMsg))); if (btrpkt == NULL) {//没有数据就不发送 return; }

btrpkt->nodeid = TOS_NODE_ID; //发送节点的ID,TOS_NODE_ID为在make telosb install,1时设置的 btrpkt->counter = counter; //发送数据包的个数

//开始发送数据,AMSend.send(广播地址,负载数据,负载数据的大小) if (call AMSend.send(AM_BROADCAST_ADDR, //修改AM_BROADCAST_ADDR为2,则节点只向2号节点发,其他 &pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) {

busy = TRUE;//调用发送数据成功,节点正在发送数据,变为忙的状态,是否发送完成在sendDone里判断 } } }

event void AMSend.sendDone(message_t* msg, error_t err) {

if (&pkt == msg) {//如果发送的数据是所设置的数据,发送成功,节点变为不忙 busy = FALSE; } }

//接收数据部分

event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){ if (len == sizeof(BlinkToRadioMsg)) {//判断接受的数据的长度,是否为所需要的 BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; //获取数据 call Leds.set(btrpkt->nodeid); //设置led为获取节点的id }

return msg; //返回数据 } }

BlinkToRadioAppC.nc文件,实现连线

#include

#include \

configuration BlinkToRadioAppC { }

implementation { components MainC; components LedsC;

components BlinkToRadioC as App;

components new TimerMilliC() as Timer0; components ActiveMessageC;

components new AMSenderC(AM_BLINKTORADIO); components new AMReceiverC(AM_BLINKTORADIO);

App.Boot -> MainC;

App.Leds -> LedsC; App.Timer0 -> Timer0; App.Packet -> AMSenderC; App.AMPacket -> AMSenderC; App.AMControl -> ActiveMessageC; App.AMSend -> AMSenderC; App.Receive -> AMReceiverC; } 在编译时出现警告问题,未解决,估计和平台有关 /opt/TinyOS-2.1.1/tos/chips/cc2420/lpl/DummyLPLC.nc:39:2: warning: #warning \LOW POWER COMMUNICATIO***\ TinyOS 分享到: QQ好友和群 QQ空间 腾讯微博 腾讯朋友 收藏 转播 淘帖 相关帖子 ? ? TinyOS系统从2.1升级到2.1.2教程 ? ? TinyOS 2.x中如何修改message_t中playload的长度 ? ? tinyos CTP温湿度采集android终端显示 ? ? TinyOS2.x启动顺序 ? ? TinyOS中的I/O中断使用 ? ? TinyOs无线消息收发问题 ? ? 关于TinyOS实例化多个定时器的问题 ? ? TinyOS在MSP430F2618上移植(二)之USCI ? ? TinyOS在MSP430F2618上移植(三)之LCD TinyOS学习笔记9-简单的转发程序

本转发程序实现的功能是1号节点发送数据,2号节点接收到数据后转发给3号节点 在BlinkToRadio的基础上,修改BlinkToRadioC.nc如下: #include

#include \

module BlinkToRadioC { uses interface Boot; uses interface Leds;

uses interface Timer as Timer0; uses interface Packet; uses interface AMPacket; uses interface AMSend; uses interface Receive;

uses interface SplitControl as AMControl; }

implementation {

uint16_t counter; message_t pkt; bool busy = FALSE;

event void Boot.booted() { call AMControl.start(); }

event void AMControl.startDone(error_t err) { if (err == SUCCESS) {

call Timer0.startPeriodic(TIMER_PERIOD_MILLI); } else {

call AMControl.start(); } }

event void AMControl.stopDone(error_t err) { }

event void Timer0.fired() { counter++;

if (TOS_NODE_ID==1&&!busy) { BlinkToRadioMsg* btrpkt =

(BlinkToRadioMsg*)(call Packet.getPayload(&pkt, sizeof(BlinkToRadioMsg))); if (btrpkt == NULL) { return; }

btrpkt->nodeid = TOS_NODE_ID; btrpkt->counter = counter; if (call AMSend.send(2,

&pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) { busy = TRUE; } } }

event void AMSend.sendDone(message_t* msg, error_t err) { if (&pkt == msg) { busy = FALSE; } }

event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){ if (len == sizeof(BlinkToRadioMsg)) {

BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; call Leds.set(btrpkt->nodeid);

if (TOS_NODE_ID==2&&btrpkt->nodeid==1&&!busy) {

BlinkToRadioMsg* temppkt = (BlinkToRadioMsg*)(call Packet.getPayload(&pkt, sizeof(BlinkToRadioMsg)));

temppkt->nodeid=btrpkt->nodeid;

temppkt->counter=btrpkt->counter;

if (call AMSend.send(3, &pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) { busy = TRUE; } } }

return msg; } }

经过实验,在没有2号节点的情况下,3号节点收不到数据,加入2号节点后,3号节点收到数据。

TinyOS学习笔记10-节点与计算机利用串口通信1 节点与计算机利用串口通信1

节点与计算机的通信是通过support/SDk/java和support/sdk/c,可以利用java代码或者C代码来实现串口的通信。中的内容,主要介绍了java的应用,如果在以后遇到要使用c语言连接串口的话,到时再研究。 1.如何查看本机的串口,使用motelist命令,我的机器显示如下信息:

root@ubuntu:~# motelist

Reference Device Description

---------- ---------------- --------------------------------------------- XBS518PB /dev/ttyUSB0 XBOW Crossbow Telos Rev.B

java net.TinyOS.tools.Listen -comm serial@/dev/ttyUSB0:telosb

本命令代表使用java命令来执行串口的监听,net.tinyos.tools.Listen为在support/sdk/java中的一个程serial@/dev/ttyUSB0:telosb为程序需要使用的参数。由于连接每一个设备使用不同的波特率,其中telosb代表的在后面我们将详细分析以下这个Listen的程序。

下面首先看一下TestSerial这个例子:

本程序为节点通过串口向计算机周期性的发送数据,并显示在计算机上。 本程序有如下文件,将进行详细的分析:

TestSerial.h文件:

#ifndef TEST_SERIAL_H


TinyOS学习笔记1 (4).doc 将本文的Word文档下载到电脑

下一篇:红河州房屋建筑和市政基础设施工程招标投标管理办法

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx