下位机与上位机之间的串口传输。
5.3.1 Zigbee传输
Zigbee无线传输是本设计中个节点之间的传输方式。CC2530模块分为接收模块和发送模块:接收模块接收数据,与上位机连接,将接收到的数据传输到上位机上,并通过Qt界面显示数据;发送模块将GY-30光照传感器测量的数据发送到接收模块。两种模块将通过zigbee传输数据。在两个模块间的数据传输需要设定好发送频率,发送频率不能太高,频率太高可能使得光照传感器还没有测得数据就发送信息,使得接收到的数据成为无用数据,影响数据的处理。发送频率太低,会造成数据的延时,使得数据的真实性受影响,不能做到数据的实时显示。因此在模块间数据传输时,将数据的发送频率设定为每2秒发送一次,设定代码为:halMcuWaitMs(2000),这样不会造成数据延时的同时,也保证了接收到数据都是有效数据,便于记录和使用。模块间的zigbee传输可用图5-2表示。
新建网络成功 Y 开始 开始 设备初始化 设备初始化 请求加入网络 请求加入网络 N N 加入网络成功 有传感器节点 请求加入网络 Y 将网络地址发送给协调器节点 采集光照强度数据 N 将传感器节点地址发出传送数据请求 依次接收数据 是否收到传送请求 N 传送光照强度数据 将数据组合传给上位机
图5-2 模块间传输方式
不同模块直接的运行模式可简单的表示为:初始化→发送(接收)数据的一个简单循环。循环开始后,模块间不断的发送与接收,保证数据的连续性。同时也避免了出现连接失败后需要重新设置连接。接收模块反复判断是否有数据传入,同时将传入的数据发送给
10
上位机;而发送模块则不断的发出信号,将从光照传感器读取到的数据发送给接收模块。
本设计使用了多个发送模块,在zigbee无线传输上存在数据对应问题,需要解决数据对应的问题,以方便界面显示。解决方案有:
方案一:对每个发送模块设定一个特定的地址,接受数据后由接收模块判断发送地址,实现数据的对应。
方案二:接收模块上设定函数,对每个数据指定一个随机地址,实现数据的对应。 方案三:在发送模块上添加程序,模块在发送数据时额外发送一个特定字符,实现数据的对面。
以上三个方案中,方案一设定特定地址的方法需要在接收模块上添加所有发送模块上的地址,工程量过大,且CC2530芯片储存有限,不能保存所以地址。方案二不需要占用太多存储空间,但是容易造成数据混乱,是的显示的数据对应不一定是发送数据的模块,不方便数据的记录。方案三不占用存储空间,且编写简单,对应明确不易出现数据对应混乱,所以设计选择方案三解决zigbee无线传输过程中数据对应的问题。
5.3.2 串口传输
串口传输是将接收模块接收到的数据传输给上位机,实现数据在Qt界面上的显示。在程序的编写上,需要设置对应波特率和频率。编写串口函数,需要设定对应CC2530的晶振和相应波特率,部分代码如下:
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振 CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ U0CSR |= 0x80; U0BAUD |= 59; 的可能性。
//串口设置为UART方式 //波特率设为19200
设置好对应的串口连接方式,固定波特率,方便连接上位机时对串口的选取,减少了干扰
5.4 系统界面和Qt编写
5.4.1 编写环境搭建
1) 将压缩包解压到指定位置D/Qt/文件夹下;
2) 右击本地电脑,选着属性进入修改环境变量,分别添加Path、QTDIR和QMAKESPEC三个变量;
3) 运行D/Qt/bin下的qtcreator.exe,进入界面设计; 新建工程,按照要求开始设计界面。
11
5.4.2 界面结构
系统界面使用Qt平台编写,主要分为实时显示和历史记录两大部分。两部分实现系统对采集到的光照度数据的显示和对历史数据的显示,其中在历史数据部分有对数据整合后,求多点平均值的数据显示,这样能够对测试地的整体光照度做出总结,方便对数据的分析和利用。在历史记录界面设有删除历史数据、删除当前数据和到出数据功能,确保数据的使用和保存。界面结构框图如图5-3所示。
各点实时数据 显示主界面 各点历史数据 历史数据 平均值
图5-3 界面结构
5.4.3 Qt Creator简介
本次设计使用Qt Creator编写显示界面。Qt Creator包括项目生成向导、高级C++代码编辑器、浏览文件及类的工具、集成了Qt Designer、Qt Assistant、Qt Linguist等同系列的软件,还有图形化 GDB 调试前端和集成 qmake 构建工具等。Qt Creator可以帮助刚开始使用Qt的用户更快速上手并且设计、运行项目。同时Qt Creator使用了功能强大的C++代码编辑器能够快速编写代码,拥有着语法标识和代码完善功能,以及在输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。Qt Creator在源代码的管理方面,使用浏览工具来管理源代码,集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。并且集成了特定于Qt的功能,如信号与槽图示调试器,对Qt类结构可一目了然集成了Qt Designer可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。
5.4.4 界面概述
本程序用Qt Creator软件进行编写。利用QT编写好的上位机程序可以在基于Windows操作系统下运行的,编写好的上位机程序,可以通过程序打包软件对编写的上位机程序进行打包,可直接在任意Windows环境下进行安装运行;下位机使用IAR编写程序下载在CC2530中。由Qt开发界面,实现对光照传感器收集,传送过来的数据进行显示、储存和
12
平均数计算。运用Qt软件建造界面样式,保证在界面中显示出设计中需要的各个数据和功能,主要编写数据显示界面。其中,zigbee通讯界面不单独设计,添加在主界面的左侧,方便模块的添加和设置。
5.4.5 实时显示界面
界面设计分为主界面和历史界面两部分,主界面界面显示此时光照传感器采集到的光 照度数据,各点数据分别对应。同时在界面左侧为zigbee设置界面,便于接入光照传感器模块时设置相应数据。主界面如图5-4所示。
图5-4 主显示界
初步对界面进行布局,因为多点显示,要对接收到的数据进行区分。在发送模块上编写程序时已经对模块进行了编号处理,每个发送模块都有各自的一个特定的代码。在界面程序上需要编写识别程序,使得数据在指定的位置显示: f(temp[5]=='a')
ui->guangzhaodu1->setText(temp.mid(0,5)); //特定代码为a就在1位置显示 if(temp[5]=='b')
ui->guangzhaodu2->setText(temp.mid(0,5)); //特定代码为b就在2位置显示
5.4.6 历史数据界面
该界面显示记录的历史数据和平均值,各点数据分别对应,平均值在各点数值之后单独显示,如图5-5所示。
13
图5-5 平均值显示
使用代码来编写显示顺序:
model = new QSqlTableModel(this); model->setTable(\);
model->setHeaderData(1, Qt::Horizontal, tr(\日期\)); model->setHeaderData(2, Qt::Horizontal, tr(\时间\));
model->setHeaderData(3, Qt::Horizontal, tr(\测点1光照度\)); model->setHeaderData(4, Qt::Horizontal, tr(\测点2光照度\)); model->setHeaderData(5, Qt::Horizontal, tr(\平均值\)); model->select();
该代码显示接入的光照传感器的值,同时在界面上显示此时的日期和时间。同时需要对两个数值求平均值,需要相应的函数代码:
if((ui->guangzhaodu1->text().size()!=0)&&(ui->guangzhaodu2->text().size()!=0))
int total = ui->guangzhaodu1->text().toInt()+ui->guangzhaodu2->text().toInt(); emit
this->Send_data(ui->guangzhaodu1->text(),ui->guangzhaodu2->text(),QString::number(total/2));
6 设计测试
将程序下载到CC2530后通电,将带有GY-30的光照传感器模块放置到不同光源下,测试是否显示不同读数。数据传输由zigbee通讯传输。
14