物联网实验报告参考模板.docx

上传人:b****5 文档编号:6140034 上传时间:2023-01-04 格式:DOCX 页数:30 大小:38.34KB
下载 相关 举报
物联网实验报告参考模板.docx_第1页
第1页 / 共30页
物联网实验报告参考模板.docx_第2页
第2页 / 共30页
物联网实验报告参考模板.docx_第3页
第3页 / 共30页
物联网实验报告参考模板.docx_第4页
第4页 / 共30页
物联网实验报告参考模板.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

物联网实验报告参考模板.docx

《物联网实验报告参考模板.docx》由会员分享,可在线阅读,更多相关《物联网实验报告参考模板.docx(30页珍藏版)》请在冰豆网上搜索。

物联网实验报告参考模板.docx

物联网实验报告参考模板

物联网课程设计

 

实验成员:

指导教师:

日期:

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("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1