|
晒用QT实现的-----人员室内定位与报警系统
[复制链接]
我是弱菜一枚,今年刚接触嵌入式,在此晒程序实在是班门弄斧了,望各位大神海涵~
这是今年暑假我们参加物联网大赛时做的一个小项目,凑巧我正好负责QT部分,庆幸当时的资料和拍的照片还在(当时比赛要求开发过程拍照全程记录),稍加整理就发上来啦,哈哈。
项目是在 cortex-A8平台上完成的,由zigbee,蓝牙,cortex-a8网关,服务器以及移动终端组成,实现人员的室内准确定位,运动轨迹追踪,运动模式判断,运动轨迹图绘制,以及室内环境侦测等功能。
我负责的QT部分,在linux下的QT完成程序的编写,生成arm内核后运行在A8上,负责通过串口读取温湿度传感器,红外线,光照传感器和蓝牙模块传来的数据,在通过路由器发送到服务器的同时,将数据进行简单的处理并显示出来,已经接受服务器返回的实现人员状态信息进行报警等功能。
下面是界面,界面修改了好几次,小组里没有专业美工真是忧伤,
这是最初的界面,有点惨不忍睹
这是最终的界面,本身是要做3D效果,后来。。。就没有后来了。。。。 实在算不上酷炫,不过也是PS了一整夜的结果了。。。 温湿度显示,人员状态显示,人员室内位置的实时显示~
调试过程的截屏
PC运行的照片
然后是烧写在cortex-A8上的运行图,这个时候功能基本都实现了
各种传感器模块也发一下吧~
最后发一下QT代码的截图,代码也是很菜 ~ - -。
简单的解释一下代码,因为我们项目大多数数据分析处理都是在服务器完成的,所以QT部分的代码比较简单,只是完成了串口的读取,数据的发送以及传感器数据的显示功能。 qextserialbase.h 和 posix_qextserialport.h 是两个封装好的QT串口通信的类,我只是简单的修改一下波特率和串口名就能用了。代码主要部分也就 widget.cpp里的一点点了。 readMyCom()用来读串口,然后干脆也把数据显示加进去了,都是用的label显示字符串 .....
//读取串口数据 void Widget::readMyCom() {
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QString yes ="有人活动"; QString no ="无人活动"; if(myCom->bytesAvailable() > 0) { qDebug()<<"read:"<bytesAvailable()<<"byte"; //获取串口数据 QByteArray temp = myCom->readAll(); //将数据转化为Qstring格式 QString buffer = QString(temp); //对字符串进行处理,规范格式 URLSTR = "http://192.168.1.100/"; URLSTR +="?fun=qt&wendu="; URLSTR+=(buffer.mid(3,2)); qDebug()< URLSTR +="&shidu="; URLSTR+=(buffer.mid(9,2)); qDebug()< URLSTR +="&renti="; URLSTR+=(buffer.mid(15,1)); qDebug()< //设置网关屏幕温度显示 ui->wendu->setText((buffer.mid(3,2))); //设置网关屏幕湿度显示 ui->shidu->setText((buffer.mid(9,2))); ui->wendu->setStyleSheet("color:red"); ui->shidu->setStyleSheet("color:red");
if(buffer.mid(15,1)=="1") ui->zhuangtai->setText(yes); else ui->zhuangtai->setText(no); ui->zhuangtai->setStyleSheet("color:red"); //启动httpget函数,向服务器发送和接收数据 senddata();
} }
发送和接受服务器数据 ~这一部分写的也是够乱的解析url读取服务器数据,进行简单的字符串转换就在label上显示出来啦~人物图片移动用的qmove总是反正是很水啦 见笑
void Widget::senddata() {
QUrl url(URLSTR); QNetworkAccessManager manager; QEventLoop loop; QTextCodec *codec; QNetworkReply *reply; // qDebug() << "Reading String code form " << URLSTR; reply = manager.get(QNetworkRequest(url)); //请求结束并下载完成后,退出子事件循环 QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); //开启子事件循环 loop.exec(); //获取源码,打开文件 QFile file(FILE_NAME); if( !file.open(QIODevice::WriteOnly | QIODevice::Text) ) { qDebug() << "Cannot open the file: " << FILE_NAME;
} QTextStream out(&file); //获取服务器返回值 QString codeContent = reply->readAll();
//将获取到的网页源码写入文件 codec = QTextCodec::codecForHtml(codeContent.toAscii()); codeContent = codec->toUnicode(codeContent.toAscii());
qDebug() << codeContent; qDebug() < qDebug() < int x=codeContent.mid(1,3).toInt(); int y=codeContent.mid(4,3).toInt(); if(x>=0&&x<=800&&y>=0&&y<=600) { x=150+x*0.6; y=20+y*0.46; ui->laotou->move(x,y); } //移动实时定位坐标 QString netok ="连接成功"; QString netbad ="未连接"; if(codeContent.mid(0,1)=="t") ui->labelnet->setText(netok); else ui->labelnet->setText(netbad); ui->labelnet->setStyleSheet("color:red"); QString sos ="紧急警报!"; if(codeContent.mid(7,1)=="f") ui->labelbj->setText(sos); else ui->labelbj->setText(""); ui->labelbj->setStyleSheet("color:red");
file.close();
}
最后的最后就把代码给大家分享一下吧,我是弱菜,大家拿去嘲讽吧 ~
QT.zip
(2.24 MB, 下载次数: 20)
|
赞赏
-
1
查看全部赞赏
-
|