无线传感网络操作系统实验4.docx
- 文档编号:29658195
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:15
- 大小:155.44KB
无线传感网络操作系统实验4.docx
《无线传感网络操作系统实验4.docx》由会员分享,可在线阅读,更多相关《无线传感网络操作系统实验4.docx(15页珍藏版)》请在冰豆网上搜索。
无线传感网络操作系统实验4
无线传感器网络实验报告
班级:
_14104341__ 姓名:
__代姝佳__学号:
_1410400111_
时间:
_2017-4-12__ 教师:
_陈飞云_ 成绩:
_________
实验名称:
一、实验目的
1.了解点对点通信过程。
2.学会ATOS平台通讯模块(ActiveMessage)的使用。
2、实验原理
本实验使用TinyOS中的活动消息(PlatformMacC)模型实现点对点通信,活动模型组件PlatformMacC包含了网络协议中路由层以下的部分。
在ATOS平台下,PlatformMacC包含的主要功能有:
CSMA/CA、链路层重发、重复包判断等机制。
其中,CSMA/CA机制使节点在发送数据之前,首先去侦听信道状况,只有在信道空闲的情况下才发送数据,从而避免了数据碰撞,保证了节点间数据稳定传输;链路层重发机制是当节点数据发送失败时,链路层会重发,直到发送成功或重发次数到达设定的阈值为止,提高了数据成功到达率;重复包判断机制是节点根据发送数据包的源节点地址及数据包中的dsn域判断该包是不是重复包,如果是重复包,则不处理,防止节点收到同一个数据包的多个拷贝。
PlatformMacC向上层提供的接口有AMSend、Receive、AMPacket、Packet、Snoop等。
AMSend接口实现数据的发送,Receive接口实现数据的接收,Snoop是接收发往其它节点的数据,AMPacket接口用于设置和提取数据包的源节点地址、目的地址等信息,Packet接口主要是得到数据包的有效数据长度(payloadlength)、最大有数据长度、有效数据的起始地址等。
AMSend、Receive、Snoop都是参数化接口,参数为一个8位的id号,类似于TCP/IP协议中的端口号。
两个节点通信时,发送节点使用的AMSend接口的参数id必须与接收节点的Receive接口的参数id一致。
在TinyOS操作系统下,所有的数据包都封装到一个叫message_t的结构体中。
message_t结构体包含四个部分:
header、data、footer、metadata四个部分。
其中header中包含了数据包长度、fcf、dsn、源地址、目的地址等信息;metadata包含了rssi等信息,详见cc2420.h、Message.h、platform_message.h。
其中,metadata部分不需要通过射频发送出去,只是在发送前和接收后提取或写入相应的域。
三、实验内容
1.将J-Link对应端插入ATOS多模汇聚节点的CN3引脚,将ATOS多模汇聚节点上的STM32
同电脑连接起来。
2.打开SEGGER/J-Linkarmv4.081/J-flasharm软件,点击target/connect,连接成功后,点击file/open,按照路径光盘A/02演示中心/STM32相关HEX打开M3GW-PC.hex,再点击target/program,其烧录到ATOS多模汇聚节点的STM32芯片中。
烧录成功后,最后点击target/startapplication在多模汇聚节点的STM32芯片上运行程序。
3.用串口线将ATOS多模汇聚节点和PC机器连接起来。
4.将ATOS多模汇聚节点与任一WIFI节点插上天线。
5.将ATOS多模汇聚节点同电脑用烧录线连接好,打开ATOS多模汇聚节点的开关,同时将
ATOS多模汇聚节点的编程开关打开。
6.打开Cygwin开发环境。
7.在Cygwin开发环境中执行/opt/atos/apps/Demos/RFDemos/1_P2P。
8.在点对点通讯目录下执行makeantc5installGRP=01NID=01,进行软件的编译和烧录,
(GRP=01NID=01的意思是将当前的点烧录为第一组,第一号)。
9.烧录成功后,将ATOS多模汇聚节点的编程开关关闭,然后打开WIFI节点的开关,并将其
对应的编程开关打开。
10.执行makeantc5reinstallGRP=01NID=02。
11.打开串口助手,设置波特率与串口号。
12.重启ATOS多模汇聚节点,串口助手中有如下的内容:
13.重启刚刚烧录的WIFI节点的开关。
14.通过电脑在串口助手窗口中输入2,点回车键,当出现“*ToSend:
”后,输入“hello”,再点击回车键。
15.当WIFI节点和ATOS多模汇聚节点通讯成功的情况如下图:
四、实验过程
1)详细的调试步骤
1.将J-Link对应端插入ATOS多模汇聚节点的CN3引脚,将ATOS多模汇聚节点上的STM32
2.同电脑连接起来。
3.打开SEGGER/J-Linkarmv4.081/J-flasharm软件,点击target/connect,连接成功后,点击file/open,按照路径光盘A/02演示中心/STM32相关HEX打开M3GW-PC.hex,再点击target/program,其烧录到ATOS多模汇聚节点的STM32芯片中。
烧录成功后,最后点击target/startapplication在多模汇聚节点的STM32芯片上运行程序。
4.用串口线将ATOS多模汇聚节点和PC机器连接起来。
5.将ATOS多模汇聚节点与任一WIFI节点插上天线。
6.将ATOS多模汇聚节点同电脑用烧录线连接好,打开ATOS多模汇聚节点的开关,同时将
7.ATOS多模汇聚节点的编程开关打开。
8.打开Cygwin开发环境。
9.在Cygwin开发环境中执行/opt/atos/apps/Demos/RFDemos/1_P2P。
10.在点对点通讯目录下执行makeantc5installGRP=01NID=01,进行软件的编译和烧录,
11.(GRP=01NID=01的意思是将当前的点烧录为第一组,第一号)。
12.烧录成功后,将ATOS多模汇聚节点的编程开关关闭,然后打开WIFI节点的开关,并将其
13.对应的编程开关打开。
14.执行makeantc5reinstallGRP=01NID=02。
15.打开串口助手,设置波特率与串口号。
16.重启ATOS多模汇聚节点,串口助手中有如下的内容:
17.重启刚刚烧录的WIFI节点的开关。
18.通过电脑在串口助手窗口中输入2,点回车键,当出现“*ToSend:
”后,输入“hello”,再点击回车键。
19.当WIFI节点和ATOS多模汇聚节点通讯成功的情况如下图:
2)实验现象
1.通过电脑在串口助手窗口中输入2,点回车键,当出现“*ToSend:
”后,输入“hello”,再点击回车键。
2.当WIFI节点和ATOS多模汇聚节点通讯成功的情况如下图:
3)必要的实验数据
//配置组件
configurationP2PC
{
}
implementation
{
componentsP2PM;
componentsMainC;
P2PM.Boot->MainC.Boot;
/*串口收发组件*/
componentsPlatformSerialC;
P2PM.UartStdControl->PlatformSerialC;
P2PM.UartStream->PlatformSerialC;
/*活动消息组件*/
componentsnewPlatformMacC(123);
componentsAtosMacC;
P2PM.AtosControl->AtosMacC;
P2PM.AMPacket->PlatformMacC;
P2PM.Packet->PlatformMacC;
P2PM.AMSend->PlatformMacC;
P2PM.Receive->PlatformMacC;
}
//模块组件
#defineDBG_LEV1000
moduleP2PM
{
uses{
interfaceBoot;
interfaceAtosControl;
interfaceStdControlasUartStdControl;
interfaceUartStream;
interfaceAMSend;
interfaceReceive;
interfaceAMPacket;
interfacePacket;
}
}
implementation
{
enum
{
MAX_ADDRESS_LEN=5,
INPUT_ADDRESS=0,
INPUT_DATA=1,
};
message_tm_msg;
uint8_tm_len=0;
charm_address_str[MAX_ADDRESS_LEN]={0};
uint8_tm_address_index=0;
uint8_tm_input_type=0;
/*显示菜单*/
taskvoidshowMenu()
{
if(m_input_type==INPUT_DATA)
{/*等待输入欲发送的数据*/
ADBG_APP("\r\n*ToSend:
\r\n");
}
else
{/*等待输入欲发送的地址*/ADBG_APP("\r\n###################################################\r\n*MYNodeId=0x%x,Group=0x%x,destination?
\r\n",
ADBG_N(callAMPacket.address()),
ADBG_N(TOS_IEEE_PANID)
);
m_input_type=INPUT_ADDRESS;
m_address_index=0;
}
}
/*将从串口输入的地址字符串转化为真实地址*/
uint16_tgetDestAddress()
{
uint16_taddress=0;
uint8_ti=0;
if(m_address_index>MAX_ADDRESS_LEN)
{
m_address_index=MAX_ADDRESS_LEN-1;
}
for(i=0;i { uint8_tdigital=m_address_str[i]; if(digital>='A'&&digital<='F') { digital=digital-'A'+10; } elseif(digital>='a'&&digital<='f') { digital=digital-'a'+10; } elseif(digital>='0'&&digital<='9') { digital=digital-'0'; } address=address*16+digital; } returnaddress; } /*发送数据*/ taskvoidsendData() { uint8_ti; uint8_t*payload=callPacket.getPayload(&m_msg,NULL); uint16_taddress=callAMPacket.address(); uint16_tdest_address=getDestAddress(); ADBG_APP("\r\n\r\n*Sending...from[%d],to[%d],len=[%d]\r\n", ADBG_N(address), ADBG_N(dest_address), ADBG_N(m_len) ); callAMSend.send(dest_address,&m_msg,m_len); } /*发送完处理*/ eventvoidAMSend.sendDone(message_t*msg,error_tresult) { //ADBG_APP("senddone\n"); ADBG_APP("*Sent%s! \r\n",(result==SUCCESS)? "OK": "FAIL"); if(result==SUCCESS) { LED_BLUE_TOGGLE; } else { LED_YELLOW_TOGGLE; } m_len=0; m_input_type=INPUT_ADDRESS; postshowMenu(); } /*节点启动完毕*/ eventvoidBoot.booted() { callAtosControl.start();/*开启射频*/ callUartStdControl.start();/*开启串口通信*/ LED_YELLOW_OFF; LED_BLUE_OFF; ADBG_APP("\r\n###############################################\r\n"); ADBG_APP("[P2PDEMO]MyAddress=0x%x,Group=0x%x\r\n",ADBG_N(callAMPacket.address()),ADBG_N(TOS_IEEE_PANID)); ADBG_APP("###############################################\r\n"); m_input_type=INPUT_ADDRESS; postshowMenu(); } /*从串口接收数据事件,来一个8位数自动触发该事件,****串口命令***/ asynceventvoidUartStream.receivedByte(uint8_tc) { if(c! ='\r') { if(m_input_type==INPUT_DATA)/*输入的为数据*/ { uint8_t*payload=(uint8_t*)callPacket.getPayload(&m_msg,NULL); if(m_len>=callPacket.maxPayloadLength()) { return; } payload[m_len++]=c; ADBG_APP("%c",c); if(m_len { return; } } else/*输入的为地址*/ { if(m_address_index { m_address_str[m_address_index++]=c; ADBG_APP("%c",c); } if(m_address_index { return; } } } /*按下回车键或者到达最大长度,则处理*/ if(m_input_type==INPUT_DATA) { postsendData(); } else { /*地址处理完毕,准备输入数据*/ m_input_type=INPUT_DATA; postshowMenu(); } } /**实现接口UartStream接口中的事件*/ asynceventvoidUartStream.sendDone(uint8_t*buf,uint16_tlen,error_terror) { } asynceventvoidUartStream.receiveDone(uint8_t*buf,uint16_tlen,error_terror) { } /*射频接收数据,*****************射频接收命令*/ eventmessage_t*Receive.receive(message_t*msg,void*payload,uint8_tlen) { uint8_ti; ADBG_APP("\r\n*Receive,len=[%d],DATA: \r\n",ADBG_N(len)); for(i=0;i { ADBG_APP("%c",((uint8_t*)payload)[i]); } ADBG_APP("\r\n"); LED_YELLOW_TOGGLE; m_input_type=INPUT_ADDRESS; } 五、软件组成 1.ATOS物联网教学实验平台实验箱 2.天线两个 3.烧录线一根 4.平行串口线一根 5.J-Link一个 六、总结分析 该实验完成了基本的节点之间的通讯,该实验是基于稳定的MAC点对点传输。 所以熟练掌握这个实验是接下来研究路由协议的基础。 七、习题答案 1.完成一个点对点的传输,让ATOS多模汇聚节点给单独WIFI节点发送一个命令,WIFI节点在接收到命令后将自己的蓝灯状态改变。 2.尝试完成一个点对点的传输程序.由WIFI节点在接收到命令后通过无线射频组件反馈一个信号如"fine"给汇聚节点,汇聚节点在收到信号后送到串口助手界面显示. 3.MAC协议数据单元(MPDU)格式构成有哪些? 4.IEEE802.15.4规范的物理信道是怎样划分的? 5.在无线射频组件应用中,如何实现对射频组件的控制及如何利用射频组件实现数据发送和接收? (写出关键的命令函数和触发事件) 八、附录 实验名称 1、LED组件实验 2、CC2530定时器组件实验 3、CC2530串口组件通信实 4、ATOS点对点通信实验 5、ATOS射频广播实验 6、ATOS数字传感器采集实验 7、无线远程点灯实验 8、无线远程控制采集实验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 传感 网络 操作系统 实验