嵌入式系统实验报告.docx
《嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告.docx(7页珍藏版)》请在冰豆网上搜索。
![嵌入式系统实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/26/26400b29-455b-4c8d-9d8e-75087b3ca857/26400b29-455b-4c8d-9d8e-75087b3ca8571.gif)
嵌入式系统实验报告
嵌入式系统实验报告
——公寓环境监测系统
实验概述 2
实验目的 3
实验设计说明 3
3.1.系统构成及通讯链路 3
3.2.实验环境 3
3.3.设计目标 3
3.4.ZIGBEE节点通讯协议 4
3.5.软件流程图 5
3.6.数据结构 6
实验问题与解决 7
4.1.课设中遇到的问题:
7
4.2.实验中的瑕疵:
8
个人感想 8
一、实验概述
移动通信网络与无线传感器网络的融合,可把无线传感器网络作为通信网络的延伸网络,为通信网络提供了海量信息来源,并提供了更为丰富的新型业务。
基于无线传感网的公寓信息采集系统,实现了温度,湿度,光照信息监测等功能于一体的便捷家居,满足日益增长的便捷居家环境需求。
本系统运用无线传感网络,对居家环境信息采集与监测。
二、实验目的
通过PC、实验箱主板及各无线传感节点构建一个公寓信息监测系统,其结构与功能如下:
1.PC机与实验箱主板之间通过RS232接口进行通讯,实验箱主板与各无线传感节点之间分别通过各无线通讯模块进行通讯,
2.四个Zigbee无线传感节点模拟四个房间,节点将房间信息传送到PC机。
三、实验设计说明
3.1.系统构成及通讯链路
系统构成及通讯链路如下图所示
3.2.实验环境
(1)硬件环境
PC机一台,实验箱一个,Zigbee节点4个
(2)软件环境
WINDOWS7操作系统,VisualStudio2010开发环境,C#程序编写
3.3.设计目标
通过PC、实验箱主板及各无线传感节点构建一个环境监控系统,其结构与功能如下:
1、PC机与实验箱主板之间通过RS232接口进行通讯,实验箱主板与各无线传感节点之间分别通过各无线通讯模块进行通讯。
2、PC机运行监控端软件。
3、实验箱主板作为信息汇总的协调器。
4、四个Zigbee无线传感节点作为检测器分别放在要监测的房间。
5、监控端----协调器-----监测点的通信方式如下:
图1系统构成及通讯链路
3.4.ZIGBEE节点通讯协议
无线传感器网络节点要进行相互的数据交流就要有相应的无线网络协议(包括MAC层、路由、网络层、应用层等),传统的无线协议很难适应无线传感器的低花费、低能量、高容错性等的要求,这种情况下,ZigBee协议应运而生。
Zigbee的基础是IEEE802.15.但IEEE仅处理低级MAC层和物理层协议,因此Zigbee联盟扩展了IEEE,对其网络层协议和API进行了标准化。
Zigbee是一种新兴的短距离、低速率的无线网络技术。
主要用于近距离无线连接。
它有自己的协议标准,在数千个微小的传感器之间相互协调实现通信。
这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。
ZigBee堆栈是在IEEE802.15.4标准基础上建立的,定义了协议的MAC和PHY层。
ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:
网络层(NWK)、应用层和安全服务提供层。
图1给出了这些组件的概况。
3.5.软件流程图
接收数据
开始
3.6.数据结构
由于对原工程文件中的数据结构理解不是很透彻,为了解决数据解析的问题,我们根据对串口调试工具接收到的十六进制数据进行分析,构造了一套自己的数据结构,这个过程花费的时间比较多。
我们对十六进制的分析已经细化到了每一个data[]所代表的含义,因此我们才能够定义出自己的数据结构。
在提交作业的过程中,经老师指点,才发现,与源文件中的数据结构只差一个data[],即我们收到的data都是去掉固定首部7E的数据,所以data[0]从FF开始。
详细定义见实验问题分析部分。
四、实验问题与解决
4.1.课设中遇到的问题:
这次课设做的可谓殚精竭虑。
过程中我们遇到了各种各样的问题,经过向老师请教、相互讨论与上网搜集资料等方法一一解决,期间收获良多。
问题一:
我们采用C#语言进行编写,利用C#中的SerialPort类进行串口通信,经测试可收到一些数据,但均为乱码,不知道数据接收是否正确和完整。
解决方案:
我们将接收的数据转为16进制数据显示,将其与串口测试程序收到的16进制数据进行比对,发现数据一样没有遗漏。
问题二:
对收到的数据完全无法解析成我们想要的温度,湿度,光照等有效数据,对数据格式与协议理解完全没有头绪。
解决方案:
咨询老师后,查看原程序中主板ARM工程中的user_parse.c文件,仔细查看其数据存储格式,针对数据中的各个关键数据和索引页值进行条件判定,从而做出大的框架进行数据解析。
问题三:
对问题二虽有了逻辑上的理解,但实施起来并未成功,没有进展。
解决方案:
无可奈何之下,我们试着将自己程序接收到得数据逐个与user_parse.c里的数据顺序进行比对。
赫然发现:
从data[2]开始,我们的数据比起源文件的数据,在data[]数组里的位置总是多1。
比如:
源文件中data[2]代表节点类型,但我们接到的数据中data[3]才代表节点类型,data[0]与data[1]为固定首部“7E”“FF”,data[2]始终为“01”,意义不明但明显不具备表示节点类型的功能。
因此我们接到的数据存储结构详细意义为(以我们接受的路由器节点为例):
data[0]="7E" //固定首部
data[1]="FF" //固定首部
data[2]="01" //意义不明
data[3]="02" //节点类型
data[4]~data[11] //路由器的物理地址
data[12]~data[13] //路由器的网络地址
data[14]~data[23] //意义不明
data[24] //节点中的传感器个数(共8个传感器,但我们只需其中四个)
data[25] //甲类传感器标识,index索引页初值
data[26]~data[29] //甲类传感器对应的数值,四字节16进制表示的浮点数
data[30] //乙类传感器标识
data[31]~data[34] //乙类传感器对应的数值,四字节16进制标识的浮点数
data[35] //丙类传感器标识
data[36]~data[39] //丙类传感器对应的数值,四字节16进制标识的浮点数
data[40] //丁类传感器标识
data[41]~data[44] //丁类传感器对应的数值,四字节16进制标识的浮点数
data[45] //戊类传感器标识
data[46]~data[49] //戊类传感器对应的数值,四字节16进制标识的浮点数
&注意:
虽然节点中的传感器个数共8个,但我们接收到的数据中只有五类传感器的数值。
本例中的房屋信息采集系统采用了其中除“有无震动”外的四种传感器数据。
问题四:
虽然已找到节点中传感器在data中的对应标识位,但对其后的4字节16进制表示的浮点数总是解码错误,得出不符合液晶显示板上的数值。
解决方案:
在这个问题上前后花费了数个小时的时间,一度让我们的实验进度停滞不前,陷入窘境。
而且在源程序中也找不到对应的转换方式(源程序采用联合体,不知怎么就得出了正确的浮点数值)。
就在一个偶然的情况下,我们想到,会不会是这四个16进制字节排列的顺序原因,抱着试一试的心态,将收到的对应传感器数值的四个字节,从尾到头排列进行浮点数转换,居然得出了正确的与液晶显示屏相符的数值!
!
!
4.2.实验中的瑕疵:
程序如今已可正确接收传感网传来的数据,并显示在相应地点,准确测量各房间温度,湿度及光照等信息,但还是有很小的概率会解码出错误数值,原因不明,猜想可能是因为串口通信质量问题出现了数据断层,漏接现象,导致解析出错误的数值。
5、个人感想
这次嵌入式的课设,从方案提出到最终的实现,可谓经历了重重的困难,回首整个课设的制作过程,还是有许多可讨论之处。
方案提出这一环节我觉得其实是这一开发过程中较难的一个环节,因为它涉及到一个可行性的问题,万一最后实现不了,再另起方案,损失肯定是无法弥补的。
其次,就我们的方案而言,涉及到两个重要方面,一个是串口通信,在此基础上就是协议的解读。
其中,协议的解读最重要,由于我们对协议中数据结构的一些问题认识不够深入,结果导致我们走了很多弯路,比如说,在接收串口数据时候,我们没有意识到次序问题,把数据倒过来读了,结果输出数据完全对不上号,花费了多个小时,终于找出原因所在,虽然这花费了我们更多的时间,但也未必是件坏事,在解决这个问题的过程中,我们在网络上搜集各种资料,从中收获了许多知识,这比起一路顺顺利利地做完,要收获得更多!
整个制作过程大概花费了四五个晚上,包括白天的一些时间,一直都是在修改再测试。
虽然辛苦,但确实收获颇多。
其中,遇到了问题,就去图书馆查阅书籍,网上搜索,或者请教老师,在这个过程中,收获很大。
对嵌入式这门课程而言,我们所学习到的仅仅只是些皮毛而已,而且还没有掌握很好,只是知道个大概。
经过在实验室的多次实验,也只是对传感器、传感网等有了一些初步的认识,真正的嵌入式编程,我们基本没有涉及,更别说去独立开发一些工程!
最近一些招聘面试,经常会问到嵌入式编程这一块,应对起来还是力不从心,还有很多要学习的东西。
而且,现在的科技设备越来越倾向于移动化,智能化,网络化,愈来愈多地要在嵌入式平台上开发产品,所以,我们要走的路还很长,要学习的东西还有很多!