物联网实验报告参考模板.docx
《物联网实验报告参考模板.docx》由会员分享,可在线阅读,更多相关《物联网实验报告参考模板.docx(30页珍藏版)》请在冰豆网上搜索。
物联网实验报告参考模板
物联网课程设计
实验成员:
指导教师:
日期:
2014/7/3
实验一LED组件
一、实验内容
LED组件:
绿灯一直处于熄灭的状态,红灯不停闪烁
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨上去。
2)打开Cygwin开发环境。
3)在Cygwin界面中执行cdapps/Demos/Basic/Led,进入到LED实验目录下。
4)在LED实验目录下执行makeantc5install进行编译和烧录。
5)可以看到实验现象为基站上的绿灯一直处于熄灭的状态,红灯不停闪烁。
三、实验代码
/**
LED示例程序的实现模块,简单的点亮3个LED灯
@date2010-1
*/
moduleLedM
{
usesinterfaceBoot;
}
implementation
{
/**LED灯演示
*/
taskvoidDemoLed()
{
/**目前节点上提供两个LED灯
LED_BLUE->蓝灯
LED_YELLOW->黄灯
*/
inti,j;
while
(1)
{
LED_YELLOW_ON;//熄灭黄色LED灯
for(i=0;i<1000;i++)
for(j=0;j<500;j++);
LED_BLUE_OFF;//点亮蓝色LED灯
for(i=0;i<1000;i++)
for(j=0;j<500;j++);
LED_BLUE_ON;//熄灭蓝色LED灯
}
}
/**启动事件处理函数,在LED.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
*/
eventvoidBoot.booted()
{
postDemoLed();
}
}
实验二定时器组件
一、实验内容
通过定时器让绿色灯闪烁,并且闪烁三次后停止闪烁。
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨
上去。
2)打开Cygwin开发环境。
3)在Cygwin界面中执行cdapps/Demos/Basic/Timer,进入到定时器实验目录下。
4)在定时器代码目录下执行makeantc5install,进行编译和烧录。
5)实验现象为基站上绿色灯闪烁,并且闪烁三次后停止闪烁。
三、实验代码
#defineDBG_LEV5
moduleTimerLedM
{
usesinterfaceBoot;
/*Timer为系统接口TMilli指明了定时器的精度为毫秒*/
usesinterfaceTimerasTimer1;/*as关键字为接口别名*/
usesinterfaceTimerasTimer2;
}
implementation
{
/**任务:
切换黄色LED灯*/
taskvoidToggleLedYellow()
{
LED_YELLOW_TOGGLE;
}
/**启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
*/
eventvoidBoot.booted()
{
LED_BLUE_ON;
callTimer2.startPeriodic(1000);
/**定时器1:
持续工作,每隔1s触发一次*/
callTimer1.startPeriodic(6000);
/**定时器2:
持续工作,每隔3s触发一次*/
//callTimer2.startPeriodic(5000);
}
/**定时器1的事件处理函数*/
eventvoidTimer1.fired()
{
/**事件处理中直接切换蓝色LED灯*/
ADBG(5,"ledbluetoggle.\r\n");
//LED_BLUE_TOGGLE;
LED_YELLOW_ON;
callTimer2.stop();/**停止定时器触发*/
callTimer1.stop();
}
/**定时器2的事件处理函数*/
eventvoidTimer2.fired()
{
ADBG(5,"ledyellowtoggle.\r\n");
postToggleLedYellow();
}
}
实验三串口调试
一、实验内容
通过级别控制,使得某些调试语句没有被输出到串口。
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨上去。
2)用串口线将基站和PC机器连接起来。
3)打开串口助手。
4)打开Cygwin开发环境。
5)在Cygwin界面中执行cdapps/Demos/Basic/SerialDebug,进入到串口调试实验目录下。
6)在串口调试代码目录下执行makeantc5install,进行编译和烧录。
7)烧录成功后,实验现象为串口有内容输出,输出内容如下:
DEMOofSerialDebug
1.Thisisastring,andthisischarx
2.NUM1:
HEX=0x39,DEC=57
4.FLOAT:
0x123.1234
三、实验代码
/**
串口调试程序的实现模块
@date
*/
/*定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL*/
#defineDBG_LEV3000
#defineDBG_LEV22000
moduleSerialDebugM
{
usesinterfaceBoot;
}
implementation
{
/**任务:
通过串口打印信息来调试*/
taskvoidDebugSerial()
{
uint8_tnum1=0x39;
uint32_tnum2=0x12345678;
floatfloat1=123.1234;
/**ADBG,格式类似于printf,
第一个参数为调试等级,可以参见tos/lib/common/antdebug.h
*/
/**打印字符和字符串*/
ADBG(DBG_LEV,"\r\n\r\nDEMOofSerialDebug\r\n",'x');
ADBG(DBG_LEV,"1.Thisisastring,andthisischar'%c'\r\n",'x');
/**打印8位的数字*/
ADBG(DBG_LEV,"2.NUM1:
HEX=0x%x,DEC=%d\r\n",(int)(num1),(int)(num1));
/**打印32位数字*/
ADBG(DBG_LEV2,"3.NUM2:
HEX=0x%lx,DEC=%ld\r\n",(uint32_t)(num2),(uint32_t)(num2));
/**打印浮点数*/
ADBG(DBG_LEV,"4.FLOAT:
%f\r\n",float1);
}
/**启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
*/
eventvoidBoot.booted()
{
postDebugSerial();
}
}
实验四串口通信
一、实验内容
实现一个串口实验,在串口助手中实现回显的功能。
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关。
2)用串口线将基站和PC机器连接起来。
3)打开串口助手。
4)打开Cygwin开发环境。
5)在Cygwin界面中执行cdapps/Demos/Basic/SerialIO,进入到串口通讯实验目
录下。
6)在串口通讯代码目录下执行makeantc5install,进行编译和烧录。
7)根据串口输出的提示进行操作,在串口助手的字符输入框输入1,红灯会一直亮着,直到再一次输入1才熄灭;在串口助手的字符输入框输入2,绿灯会一直亮着,直到再一次输入1才熄灭,输入其他数字串口会提示“Errorkey”,并且会显示你输入的数字,结果如下:
DemoofSerioI/O
[1]ToggleBLUELED
[2]ToggleYELLOWLED
Youchoosetoinput1
YouchoosetoToggleBLUELED
三、实验代码
/**
串口输入输出程序的实现模块
@author
@date
*/
#include
/**定义此宏,将演示UartStream.receive函数,允许一次指定数量的数据*/
//#defineSERIALIO_RECEIVE
#defineDBG_LEV3000
moduleSerialIoM
{
usesinterfaceBoot;
usesinterfaceStdControlasUartStdControl;
usesinterfaceUartStream;
}
implementation
{
uint8_tm_receive_len;
uint8_tm_echo_buf;
uint8_tm_send_buf[100];
/*显示一个菜单提示用户*/
voidshowMenu()
{
strcpy(m_send_buf,"\r\n\r\nDemoofSerioI/O\r\n[1]ToggleBLUELED\r\n[2]ToggleYELLOWLED\r\n");
/*通过UartStream.send可以发送字节数据*/
callUartStream.send(m_send_buf,strlen(m_send_buf));
}
/**启动事件处理函数,在SerialIo.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
*/
eventvoidBoot.booted()
{
LED_BLUE_ON;
LED_YELLOW_ON;
callUartStdControl.start();
showMenu();
}
asynceventvoidUartStream.sendDone(uint8_t*buf,uint16_tlen,error_terror)
{
}
/**重新发送刚才接收的字符进行回显*/
taskvoidshowMenuTask()
{
showMenu();
}
taskvoidlightLED()
{
if(m_echo_buf=='1')
{
LED_BLUE_TOGGLE;/*切换蓝色LED灯*/
ADBG(DBG_LEV,"Youchoosetoinput%c\r\n",m_echo_buf);
ADBG(DBG_LEV,"YouchoosetotoggleBLUELED\r\n");
postshowMenuTask();
}
elseif(m_echo_buf=='2')
{
LED_YELLOW_TOGGLE;/*切换黄色LED灯*/
ADBG(DBG_LEV,"Youchoosetoinput%c\r\n",m_echo_buf);
ADBG(DBG_LEV,"YouchoosetotoggleYELLOWLED\r\n");
postshowMenuTask();
}
else
{
ADBG(DBG_LEV,"ErrorKey%c\r\n",m_echo_buf);
postshowMenuTask();
}
}
/**如果没有调用receive接收,则每接收到一个数据就会触发此事件*/
asynceventvoidUartStream.receivedByte(uint8_tbyte)
{
m_echo_buf=byte;
postlightLED();
}
/**在接收完receive命令欲接收的长度后会调用此事件*/
asynceventvoidUartStream.receiveDone(uint8_t*buf,uint16_tlen,error_terror)
{
}
}
实验五Flash读写
一、实验内容
Flash读写:
自己定义一个结构体,并且将结构体的内容写入到0x1fff8,并且在写完后将结构体的数据读取出来和原始数据进行比较。
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关。
2)用串口线将基站和PC机器连接起来。
3)打开串口助手。
4)打开Cygwin开发环境。
5)在Cygwin开发环境中执行cdapps/Demos/Basic/Flash。
6)在Flash目录下执行makeantc5install,进行软件的编译和烧录。
7)烧录成功后,串口有内容输出,具体如下:
Boot.booted
Readnow
Readok.
array1.num[0]=7
array1.num[1]=2
array1.num[2]=4
array1.num[3]=11
array1.num[4]=21
array1.num[5]=3
array1.num[6]=92
array1.num[6]=1
三、实验代码
/*定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL*/
#defineDBG_LEV3000
moduleTestFlashC
{
usesinterfaceBoot;
usesinterfaceHalFlash;
}
implementation
{
structarray
{
uint8_tnum[8];
};
uint8_tieee[8]={0};
uint8_tieee2[8]={7,2,4,11,21,3,92,1};
taskvoidinitTask()
{
uint8_ti;
structarrayarray1;
for(i=0;i<8;i++)
{
array1.num[i]=ieee2[i];
}
ADBG(DBG_LEV,"readnow\n");
callHalFlash.erase((uint8_t*)0x1fff8);
for(i=0;i<8;i+=4)
{
callHalFlash.write((uint8_t*)(0x1FFF8+i),(&array1.num+i),4);
}
callHalFlash.read(ieee,(uint8_t*)0x1FFF8,8);
ADBG(DBG_LEV,"readok.\n");
for(i=0;i{
ADBG(DBG_LEV,"array1.num[%d]=%d\n",(int)i,(int)ieee[i]);
}
}
eventvoidBoot.booted()
{
ADBG(DBG_LEV,"Boot.booted\n");
postinitTask();
}
}
实验六点对点通信
一、实验内容
完成一个点对点的传输,让基站给单独节点发送一个命令,节点在接收到命令后将自己的蓝灯状态改变。
二、实验步骤
1)将基站同电脑用烧录线连接好,打开基站的开关,将基站的烧录开关拨上去。
2)用串口线将基站和PC机器连接起来。
3)打开串口助手。
4)打开Cygwin开发环境。
5)在Cygwin开发环境中执行/opt/atos/apps/Demos/RFDemos/1_P2P。
6)在点对点通讯目录下执行makeantc5installGRP=BBNID=01,进行软件的编译和烧录,(GRP=BBNID=01将当前的点烧录为第BB组,第一号)。
7)烧录成功后,将基站的烧录开关拨下去,将节点对应的烧录开关拨上去,然后打开其中一个节点的开关。
8)执行makeantc5reinstallGRP=BBNID=02。
9)重启基站,在串口助手中有如下的内容:
###############################################
[P2PDEMO]MyAddress=0x1,Group=0xBB
###############################################
*MYNodeId=0x1,Group=0xBB,destination?
2
*ToSend:
BLUE
*Sending…from[1],to[4],len=[5]
*SentOK!
现象为节点在接收到命令后将自己的蓝灯状态改变
三、实验内容
#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);
//LED_BLUE_TOGGLE;
}
/*发送完处理*/
eventvoidAMSend.sendDone(message_t*msg,error_tresult)
{
//ADBG_APP("