1、TinyOS——简单发送接收数据 简单发送接收数据 本节为对BlinkToRadio的分析,从而了解简单的收发过程。 我们读BlinkToRadio修改如下:发送本节点的id给其他的节点 BlinkToRadio.h #ifndef BLINKTORADIO_H #define BLINKTORADIO_H enum { AM_BLINKTORADIO = 6, //AM数据包的类型 TIMER_PERIOD_MILLI = 250 //发送的时间间隔为250ms }; //定义发送数据包的负载部分 typedef nx_struct Bl
2、inkToRadioMsg {
nx_uint16_t nodeid; //本节点的id
nx_uint16_t counter; //计数
} BlinkToRadioMsg;
#endif
BlinkToRadioC.nc 文件分析
#include
3、 //led灯
uses interface Timer
4、interface SplitControl as AMControl; //Split操作 } implementation { uint16_t counter; //发送的次数 message_t pkt; //数据包 bool busy = FALSE; //节点是否忙,开始为不忙 //从此处启动,开始程序 event void Boot.booted() { call AMControl.start(); //调用Split操作的开始,是否成功在startDone()处判断 } //判断开始是否完成 e
5、vent 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) { } //时间的
6、每次周期执行的内容,发送数据 event void Timer0.fired() { counter++;//发送数据个数加1 if (!busy) {//节点不忙,则开始发送数据 //设置数据包的负载,btr指向数据包的负载部分 BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)(call Packet.getPayload(&pkt, sizeof(BlinkToRadioMsg))); if (btrpkt == NULL) {//没有数据就不发送 return;
7、 } 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, si
8、zeof(BlinkToRadioMsg)) == SUCCESS) { busy = TRUE;//调用发送数据成功,节点正在发送数据,变为忙的状态,是否发送完成在sendDone里判断 } } } event void AMSend.sendDone(message_t* msg, error_t err) { if (&pkt == msg) {//如果发送的数据是所设置的数据,发送成功,节点变为不忙 busy = FALSE; } } //接收数据部分 event mes
9、sage_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; //返回数据 } } Bl
10、inkToRadioAppC.nc文件,实现连线
#include
11、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 COMMUNICATIONS DISABLED ***"






