物联网实验报告.doc_第1页
物联网实验报告.doc_第2页
物联网实验报告.doc_第3页
物联网实验报告.doc_第4页
物联网实验报告.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物联网课程设计实验成员:指导教师: 日 期:2014/7/3实验一 LED组件一、实验内容LED组件:绿灯一直处于熄灭的状态,红灯不停闪烁二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨上去。2) 打开 Cygwin 开发环境。3) 在 Cygwin 界面中执行 cd apps/Demos/Basic/Led,进入到 LED 实验目录下。4) 在 LED 实验目录下执行 make antc5 install 进行编译和烧录。5) 可以看到实验现象为基站上的绿灯一直处于熄灭的状态,红灯不停闪烁。三、实验代码/* LED 示例程序的实现模块,简单的点亮3个LED灯date 2010-1*/module LedMuses interface Boot;implementation/* LED灯演示*/task void DemoLed()/* 目前节点上提供两个LED灯LED_BLUE - 蓝灯LED_YELLOW - 黄灯*/int i,j;while(1)LED_YELLOW_ON; /熄灭黄色LED灯 for(i=0;i1000;i+)for(j=0;j500;j+);LED_BLUE_OFF; /点亮蓝色LED灯 for(i=0;i1000;i+)for(j=0;j500;j+);LED_BLUE_ON; /熄灭蓝色LED灯 /* 启动事件处理函数,在LED.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()post DemoLed();实验二 定时器组件一、 实验内容通过定时器让绿色灯闪烁,并且闪烁三次后停止闪烁。二、 实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨上去。2) 打开 Cygwin 开发环境。3) 在Cygwin 界面中执行 cd apps/Demos/Basic/ Timer,进入到定时器实验目录下。4) 在定时器代码目录下执行 make antc5 install,进行编译和烧录。5) 实验现象为基站上绿色灯闪烁,并且闪烁三次后停止闪烁。三、实验代码#define DBG_LEV 5module TimerLedMuses interface Boot;/* Timer为系统接口TMilli指明了定时器的精度为毫秒 */uses interface Timer as Timer1; /* as关键字为接口别名 */uses interface Timer as Timer2;implementation/* 任务: 切换黄色LED灯 */task void ToggleLedYellow()LED_YELLOW_TOGGLE;/* 启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted() LED_BLUE_ON;call Timer2.startPeriodic(1000);/* 定时器1: 持续工作,每隔1s触发一次 */call Timer1.startPeriodic(6000);/* 定时器2: 持续工作,每隔3s触发一次*/call Timer2.startPeriodic(5000);/* 定时器1的事件处理函数 */event void Timer1.fired()/* 事件处理中直接切换蓝色LED灯 */ADBG(5, led blue toggle.rn);/LED_BLUE_TOGGLE;LED_YELLOW_ON;call Timer2.stop();/*停止定时器触发*/call Timer1.stop();/* 定时器2的事件处理函数 */event void Timer2.fired()ADBG(5, led yellow toggle.rn);post ToggleLedYellow();实验三 串口调试一、实验内容通过级别控制,使得某些调试语句没有被输出到串口。二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关,同时将基站的烧录开关拨上去。2) 用串口线将基站和 PC 机器连接起来。3) 打开串口助手。4) 打开 Cygwin 开发环境。5) 在 Cygwin 界面中执行 cd apps/Demos/Basic/ SerialDebug,进入到串口调试实验目录下。6) 在串口调试代码目录下执行 make antc5 install,进行编译和烧录。7) 烧录成功后,实验现象为串口有内容输出,输出内容如下:DEMO of Serial Debug1.This is a string, and this is char x2.NUM1: HEX=0x39, DEC=574.FLOAT:0x123.1234三、实验代码/* 串口调试程序的实现模块date */* 定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL */#define DBG_LEV3000#define DBG_LEV22000module SerialDebugMuses interface Boot;implementation/* 任务: 通过串口打印信息来调试 */task void DebugSerial()uint8_t num1 = 0x39;uint32_t num2 = 0x12345678;float float1 = 123.1234;/* ADBG,格式类似于printf,第一个参数为调试等级,可以参见tos/lib/common/antdebug.h */* 打印字符和字符串 */ADBG(DBG_LEV, rnrnDEMO of Serial Debugrn, x);ADBG(DBG_LEV, 1. This is a string, and this is char %crn, x);/* 打印8位的数字 */ADBG(DBG_LEV, 2. NUM1: HEX=0x%x, DEC=%drn, (int)(num1), (int)(num1);/* 打印32位数字 */ADBG(DBG_LEV2, 3. NUM2: HEX=0x%lx, DEC=%ldrn, (uint32_t)(num2), (uint32_t)(num2);/* 打印浮点数*/ADBG(DBG_LEV, 4. FLOAT: %frn, float1);/* 启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()post DebugSerial();实验四 串口通信一、 实验内容实现一个串口实验,在串口助手中实现回显的功能。二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关。2) 用串口线将基站和 PC 机器连接起来。3) 打开串口助手。4) 打开 Cygwin 开发环境。5) 在 Cygwin 界面中执行 cd apps/Demos/Basic/ SerialIO,进入到串口通讯实验目录下。6) 在串口通讯代码目录下执行 make antc5 install,进行编译和烧录。7) 根据串口输出的提示进行操作,在串口助手的字符输入框输入 1,红灯会一直亮着,直到再一次输入 1 才熄灭;在串口助手的字符输入框输入 2,绿灯会一直亮着,直到再一次输入 1 才熄灭,输入其他数字串口会提示“Error key”,并且会显示你输入的数字,结果如下:Demo of Serio I/O1Toggle BLUE LED2Toggle YELLOW LEDYou choose to input 1You choose to Toggle BLUE LED三、实验代码/* 串口输入输出程序的实现模块authordate */#include /* 定义此宏,将演示UartStream.receive函数,允许一次指定数量的数据 */#define SERIALIO_RECEIVE#define DBG_LEV3000module SerialIoMuses interface Boot;uses interface StdControl as UartStdControl;uses interface UartStream;implementationuint8_t m_receive_len;uint8_t m_echo_buf;uint8_t m_send_buf100;/* 显示一个菜单提示用户 */void showMenu() strcpy(m_send_buf, rnrnDemo of Serio I/Orn1 Toggle BLUE LEDrn2 Toggle YELLOW LEDrn);/* 通过UartStream.send可以发送字节数据 */call UartStream.send(m_send_buf, strlen(m_send_buf);/* 启动事件处理函数,在SerialIo.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()LED_BLUE_ON;LED_YELLOW_ON;call UartStdControl.start();showMenu();async event void UartStream.sendDone(uint8_t *buf, uint16_t len, error_t error)/* 重新发送刚才接收的字符进行回显 */task void showMenuTask()showMenu();task void lightLED()if(m_echo_buf=1)LED_BLUE_TOGGLE; /* 切换蓝色LED灯 */ADBG(DBG_LEV, You choose to input%crn,m_echo_buf);ADBG(DBG_LEV, You choose to toggle BLUE LEDrn);post showMenuTask();else if (m_echo_buf = 2)LED_YELLOW_TOGGLE; /* 切换黄色LED灯 */ADBG(DBG_LEV, You choose to input%crn,m_echo_buf);ADBG(DBG_LEV, You choose to toggle YELLOW LEDrn);post showMenuTask();elseADBG(DBG_LEV, Error Key %crn, m_echo_buf);post showMenuTask();/* 如果没有调用receive接收,则每接收到一个数据就会触发此事件 */async event void UartStream.receivedByte(uint8_t byte)m_echo_buf = byte;post lightLED();/* 在接收完receive命令欲接收的长度后会调用此事件 */async event void UartStream.receiveDone(uint8_t *buf, uint16_t len, error_t error)实验五 Flash读写一、 实验内容Flash读写:自己定义一个结构体,并且将结构体的内容写入到 0x1fff8,并且在写完后将结构体的数据读取出来和原始数据进行比较。二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关。2) 用串口线将基站和 PC 机器连接起来。3) 打开串口助手。4) 打开 Cygwin 开发环境。5) 在 Cygwin 开发环境中执行 cd apps/Demos/Basic/Flash。6) 在 Flash 目录下执行 make antc5 install,进行软件的编译和烧录。7) 烧录成功后,串口有内容输出,具体如下:Boot.bootedRead nowRead ok.array1.num0=7array1.num1=2array1.num2=4array1.num3=11array1.num4=21array1.num5=3array1.num6=92array1.num6=1三、实验代码/* 定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL */#define DBG_LEV3000module TestFlashCuses interface Boot;uses interface HalFlash;implementationstruct arrayuint8_t num8;uint8_t ieee8 = 0;uint8_t ieee28 = 7,2,4,11,21,3,92,1;task void initTask()uint8_t i;struct array array1;for(i=0;i8;i+)array1.numi=ieee2i;ADBG(DBG_LEV, read now n);call HalFlash.erase(uint8_t*)0x1fff8);for (i=0;i 8;i+=4)call HalFlash.write(uint8_t*)(0x1FFF8+i), (&array1.num+i), 4);call HalFlash.read(ieee, (uint8_t *)0x1FFF8, 8);ADBG(DBG_LEV, read ok.n);for (i=0; i MAX_ADDRESS_LEN)m_address_index = MAX_ADDRESS_LEN -1;for ( i=0; i = A & digital = a & digital = 0 & digital = call Packet.maxPayloadLength()return;payloadm_len+ = c;ADBG_APP( %c, c);if(m_len call Packet.maxPayloadLength()return;else/*输入地址*/if(m_address_index MAX_ADDRESS_LEN)m_address_strm_address_index+ = c;ADBG_APP( %c, c);if(m_address_index MAX_ADDRESS_LEN)return;/*按下回车键或者到达最大长度,则处理*/if(m_input_type = INPUT_DATA)post sendData();else/*地址处理完毕,准备输入数据*/m_input_type = INPUT_DATA;post showMenu();/* 实现接口UartStream 接口中的事件*/async event void UartStream.sendDone(uint8_t* buf, uint16_t len, error_t error)async event void UartStream.receiveDone(uint8_t* buf, uint16_t len, error_t error)/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)uint8_t i;ADBG_APP( rn*Receive, len = %d, DATA:rn, ADBG_N(len);for(i=0; i len; i+)ADBG_APP( %c, (uint8_t*)payload)i);/*如果输入命令BLUE,蓝灯状态改变*/if(len=4)if(uint8_t*)payload)0=B&(uint8_t*)payload)1=L&(uint8_t*)payload)2=U&(uint8_t*)payload)3=E)LED_BLUE_TOGGLE;ADBG_APP( rn);LED_YELLOW_TOGGLE;m_input_type = INPUT_ADDRESS;post showMenu();实验七 射频广播一、 实验内容写一个射频广播实验,包括基站和节点的程序。使得节点在接收到三个基站的广播信号停止接收广播数据。二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关。2) 用串口线将基站和 PC 机器连接起来。3) 打开串口助手。4) 打开 Cygwin 开发环境。5) 在 Cygwin 开发环境中执行/opt/atos/apps/Demos/RFDemos/ 6_Broadcast。6) 在当前目录下执行 make antc5 install GRP=BB NID=01,进行软件的编译和烧录。7) 烧录成功后,将基站的烧录开关拨下去,将节点对应的烧录开关拨上去,然后打开节点的开关。8) 执行 make antc5 reinstall GRP=BB NID=02。9) 再烧录一个节点,节点号 NID=03。10) 全部烧录完成后,首先将基站的开关关闭,然后打开两个节点的开关,这个时候两个节点的红、黄、蓝灯都是亮着的。11) 当打开基站的开关的时候,首先是基站的红色灯闪烁,然后两个节点都跟着蓝灯闪烁三次,之后不再亮。说明节点在接收到三个基站的广播信号停止接收广播数据。三、实验代码#define DBG_LEV 1000module BroadcastPuses interface Boot;interface AtosControl;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface Timer as SensorTimer;implementationint i=0;message_t m_msg;/* 发送数据*/task void sendData()uint16_t m_len = 0x00;uint8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t address = call AMPacket.address();*payload = 0x01;m_len = 0x01;if (address = 0x01)call AMSend.send(0xFFFF, &m_msg, m_len);LED_BLUE_TOGGLE;/*发送完处理*/event void AMSend.sendDone(message_t* msg, error_t success)/* 节点启动完毕*/event void Boot.booted()/*开启射频*/call AtosControl.start();LED_YELLOW_ON;LED_BLUE_ON;call SensorTimer.startPeriodic(1000);event void SensorTimer.fired()post sendData();/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)/*在蓝灯闪三次后停止闪烁,然后关闭射频*/i+;if(i6)LED_BLUE_TOGGLE;else/*LED_BULE_OFF;*/ Call AtosControl.stop();实验八AD和数字传感采集:操作实验九 传感通信一、 实验内容每次基站发送一个采集命令,节点采集两次数据,并且分两组数据发送到基站。二、实验步骤1) 将基站同电脑用烧录线连接好,打开基站的开关。2) 用串口线将基站和 PC 机器连接起来。3) 打开串口助手。4) 打开 Cygwin 开发环境。5) 在 Cygwin 开发环境中执行 cd apps/Demos/sensor/CommSensor/Base。6) 在采集通讯基站目录下执行 make antc5 install GRP=BB NID=01,进行软件的编译和烧录。7) 执行 cd apps/Demos/sensor/CommSensor/Node。8) 在采集通讯节点目录下面执行 make antc5 ASO=LIGHT TYPE=3 installGRP=BB NID=02。9) 重启基站,在串口助手中有如下的内容:# My Address = 0x1, Group = 0xBB#* MY NodeId = 0x1, Group=0xBB, destination ?2*To Send:(Y or N)ypayload = y*Sending from1,to2,len=1*SentOK!#* MY NodeId = 0x1, Group=0xBB, destination ?*Receive, len=2,DATA:3e f0#* MY NodeId = 0x1, Group=0xBB, destination ?*Receive, len=2,DATA:3e f4三、实验代码#define DBG_LEV 9module CommSensorNodePuses interface Boot;interface AtosControl;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface AtoSensorCollection;implementationmessage_t m_sensor_msg;uint sensor_retry = 0;bool m_sensoring = FALSE;uint8_t m_sensor_length = 0;uint8_t m_sensor_length1 = 0;uint8_t* p_sensor_payload;uint8_t* p_sensor_payload1;uint16_t dest_address;int j=0;task void sensorDataTask()int i=0;error_t result;result = call AtoSensorCollection.startSensor(p_sensor_payload);if(result != SUCCESS)if (sensor_retry+ 3)post sensorDataTask();elseatomic m_sensoring = FALSE;task void sendMsgTask() uint8_t i;ADBG(3000, sensor payload:);for (i=0; i m_sensor_length; +i)ADBG(3000, %02x , (int)p_sensor_payloadi);if (call AMSend.send(dest_address, &m_sensor_msg, m_sensor_length) != SUCCESS)atomic m_sensoring = FALSE;event void AMSend.sendDone(message_t* msg, error_t success)ADBG(DBG_LEV, * Sent%s!rn, (success = SUCCESS) ? OK : FAIL);if(j=0) post sensorDataTask();j+;/* 节点启动完毕*/event void Boot.booted()/*开启射频*/ADBG(DBG_LEV, =boot=n);LED_BLUE_TOGGLE;call AtosControl.start();p_sensor_payload = call Packet.getPayload(&m_sensor_msg, NULL);event void AtoSensorCollection.sensorDone(uint8_t* data, uint8_t len, error_t result)ADBG(10, Sensor data done, data len = %d, result=%d, (int)len, (int)result);if(result = SUCCESS)m_sensor_length = len;post sendMsgTask();elseatomic m_sensoring = FALSE;/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)LED_BLUE_TOGGLE;if (len != 1)return NULL;j=0;ADBG(DBG_LEV, Receive len = %d payload = %cn, (int)len, *(char *)payload);if (*(char *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论