STM32W108无线传感器网络节点定位技术

原创 2015年07月08日 09:58:05

使用STM32W108无线节点完成基于接收信号强度指示(RSSIReceived SignalStrength Indication)N次三边质心加权定位,对移动中的节点实时进行定位,并将定位结果发送到汇集中心。图15.1为定位实验的实际场景,所有实验在室内完成,共使用9个节点,1个移动节点,8个信标节点。

15.1. 定位实际场景

 

 

基于第10章介绍的SimpleMac协议栈,对程序进行删减更改,下面给出更改部分代码:

文件solar-system.c相关内容:

函数processRxPacket()

/**************************************************************************

功能描述:对接收的数据包进行解析解码处理,并根据不同类型的数据包执行不同的操作,数据包信息通过数据包回调函数保存在结构体变量rxData

输入参数:无

输出参数:无

***************************************************************************/

void  processRxPacket(void)

{

……

  //检查确定数据包帧类型,代码中只用到了FT_DATA类型

  switch(rxData.packet[1]&0x7) {

    case FT_DATA:

       RX_DETAILS(printf("FT_DATA\r\n");)

      packetType = (FT_DATA<<4);

      break;

    case FT_MAC_COMMAND:

      RX_DETAILS(printf("FT_MAC_COMMAND\r\n");)

      packetType = (FT_MAC_COMMAND<<4);

      break;

    default:

      RX_DETAILS(printf("Unknown frame  type\r\n");)

      goto stopProcessing;

  };

 

  //判断数据包中是否有PAN ID信息

  if((rxData.packet[1]&0x40)!=0x40) {

    pktHasSrcPanId=TRUE;

    srcAddrOffset = 2;

  }

 

  //四种不同的地址类型

  switch(rxData.packet[2]) {

   ……

  }

 

  RX_DETAILS(

    if(pktHasSrcPanId) {

      printf("src pan =  0x%04X\r\n", srcPanId);

    }

  )

 

  //判断数据包长度是否满足足够的长度保存负载类型

  if(rxData.packet[0]<payloadStart) {

    RX_DETAILS(printf("Length byte too  short\r\n");)

    goto stopProcessing;

  }

 

  //通过帧类型及负载类型计算数据包类型

  packetType |=  (rxData.packet[payloadStart]<<0);

  RX_DETAILS(printf("packet type =  0x%02X\r\n", packetType);)

 

  //不同的数据包类型执行不同的操作

  switch(packetType) {

    case (GENERIC_DATA_PACKET): //普通类型数据包,Sun节点和Planet节点都会收到

       RX_DETAILS(printf("GENERIC_DATA_PACKET\r\n");)     

  

      printf("%d\n",  rxData.rssi);//RSSI输出

      break;

……

    default:

      RX_DETAILS(printf("Unknown payload  type\r\n");)

      goto stopProcessing;

  }

stopProcessing:

  rxData.packetBeingProcessed = FALSE;

}

 

函数joinCmd()

/**************************************************************************

功能描述:Planet广播搜索Sun节点,完成加入网络

输入参数:无

输出参数:无

*************************************************************************/

void  joinCmd(void)

{

……

#ifdef  PLANET_ROLE

      autoSendRate = 1; //设置节点向Sun节点发送数据包频率,加快频率,用于计算RSSI

      halSetLed(LED_D4); //点亮LED4

#endif

  ……

}

 

 

本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,20145

版权声明:

相关文章推荐

STM32W108无线传感器网络节点自组织与移动智能体导航技术

使用STM32W108无线开发板及节点完成大规模网络的自组建,网络模型选择树型,网络组建完成之后,使用基于接收信号强度指示RSSI(ReceivedSignal Strength Indication...

水下无线传感器网络节点定位算法

目前存在着大量的基于水下的无线传感器网络节点定位算法,根据采集或处理数据方式的不同,可将这些定位算法划分为以下几种类型:       (1)根据位置计算过程中是否测量节点间的角度或距离信息,可将...

STM32W108无线射频模块两节点之间通信实例

本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信。节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板...

无线传感器网络节点连通率

前段时间忙学业,现在来总结学习中遇到的问题及解决方法。 第一个问题是这样的: 在1x1的单位矩形中随机部署传感器节点,而且假设每个节点的通信半径一样,要求利用蒙特卡洛算法进行1000次试验分别模拟...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)