处女作,,QT+arduino的物联网小项目
这是大三所做的项目,距离完成项目的时间已经过去快十个月之久了,至于为什么今天想发出来是因为马上面临找工作了,想把所做的项目再复习复习,,希望能温故而知新吧O(∩_∩)O。
项目名称叫“智慧停车场”通过arduino等硬件设施来模拟停车场的场景,用QT写软件来实时监控停车场的周边环境以及车辆停放信息,通过WIFI实现软硬件的通信
这个小项目由window软件(SmartPark)+udp上行传输(用来实现硬件向软件发送数据)+udp下行传输(用来实现软件向硬件发送消息)+TCP登陆注册(登陆注册)+APP等等组成。 后面再陆续详细的说可能有点麻烦
刚完成时候录的视频
http://player.youku.com/player.php/sid/XMzgwNzIyNDgzMg==/v.swf
先从window软件说起吧:`
window主要由主页面类+消息接收类+消息事件处理类+数据库类+udp通信类。。。等等组成
主页面头文件
#ifndef SHOWPAGE_H
#define SHOWPAGE_H
#include<QPaintEvent>
#include<QMouseEvent>
#include <QWidget>
#include<QLabel>
#include<QPushButton>
#include<QTimer>#include "firepage.h" //触发火焰传感器的效果界面
#include "camera.h"
#include "widget.h" //一些硬件的控制界面
#include "areaclicked.h" //重写鼠标点击事件,用来找主界面的坐标
#include"handle.h" //事件处理类
class showpage : public QWidget
{Q_OBJECT
public:// explicit showpage(QWidget *parent = nullptr);showpage(QWidget *parent=0);~showpage();void carNUM();protected:void paintEvent(QPaintEvent *);void mouseReleaseEvent(QMouseEvent *);signals:public slots:void fristClickedSlot(); //鼠标点击触发的槽函数void secondClickedSlot();void thridClickedSlot();void fristChangSlot(bool);//收到单片机按钮按下信号所触发的槽函数void secondChangSlot(bool);void thridChangSlot(bool);void getCarNumSlot();// 获取当前车位数量信息
private:areaclicked *frist;areaclicked *second;areaclicked *thrid;bool friststat; //定义的三个车位的状态bool secondstat;bool thridstat;//QPixmap car[3];QLabel *label;QLabel *label1;QPushButton *pushButton;int carNum;QTimer *timer;QPushButton *controlFrame;Widget *w;FirePage *fire;Camera myCameraFrame;QPushButton *cameraButton;
};#endif // SHOWPAGE_H
源文件
#include "showpage.h"
#include <QPainter>
#include<QMouseEvent>
#include <QDebug>
#include<QIcon>
#include"handle.h"showpage::showpage(QWidget *parent) : QWidget(parent)
{//设置主窗口的大小图标名称this->setFixedSize(1600,900);this->setWindowIcon(QIcon(":/images/park.ico"));this->setWindowTitle("SmartPark");//初始化车位friststat=false;secondstat=false;thridstat=false;timer=new QTimer(this);label=new QLabel(this);label->setText("当前车位共148个");label->move(1394,818);label->setFont(QFont("Times",12,QFont::Bold));label1=new QLabel(this);label1->move(1394,840);// label1->setText("当前已用车位:148");label1->setFont(QFont("Times",12,QFont::Bold));connect(timer,SIGNAL(timeout()),this,SLOT(getCarNumSlot()));timer->start(100);timer->setInterval(500);// 给定义的Areaclick对象划定范围,即定义的范围收到点击即触发信号;
// frist =new areaclicked(this);
// frist->setGeometry(378,267,30,45);
// connect(frist,SIGNAL(clicked()),
// this,SLOT(fristClickedSlot()));// second =new areaclicked(this);
// second->setGeometry(339,0,360,768);
// connect(second,SIGNAL(clicked()),
// this,SLOT(secondClickedSlot()));// thrid =new areaclicked(this);
// thrid->setGeometry(712,0,312,768);
// connect(thrid,SIGNAL(clicked()),
// this,SLOT(thridClickedSlot()));connect(Handle::getobject(),SIGNAL(firstStatChange(bool)),this,SLOT(fristChangSlot(bool)));connect(Handle::getobject(),SIGNAL(secondStatChange(bool)),this,SLOT(secondChangSlot(bool)));connect(Handle::getobject(),SIGNAL(thridStatChange(bool)),this,SLOT(thridChangSlot(bool)));w=new Widget();controlFrame=new QPushButton(this);controlFrame->setText("控制页面");controlFrame->move(1231,9);connect(controlFrame,&QPushButton::clicked,[=](){w->show();});//监控cameraButton=new QPushButton(this);cameraButton->setText("监控");cameraButton->move(1231,50);connect(cameraButton,&QPushButton::clicked,[=](){myCameraFrame.show();});bool isShow;isShow=false;connect(Handle::getobject(),&Handle::fireStatChange,[=](){if(!isShow){fire=new FirePage();fire->show();}});}showpage::~showpage()
{}void showpage::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/images/parkground.jpg"));if(friststat){painter.drawPixmap(378,267,30,45,QPixmap(":/images/littlecar.jpg"));}if(secondstat){painter.drawPixmap(414,267,30,45,QPixmap(":/images/littlecar.jpg"));}if(thridstat){painter.drawPixmap(450,267,30,45,QPixmap(":/images/littlecar.jpg"));}}
//窗口坐标
void showpage::mouseReleaseEvent(QMouseEvent *e)
{qDebug()<<e->x()<<" "<<e->y()<<" ";
}
//鼠标点击会改变信号
void showpage::fristClickedSlot()
{if(friststat)friststat=false;elsefriststat=true;this->update();
}void showpage::secondClickedSlot()
{if(secondstat)secondstat=false;elsesecondstat=true;this->update();
}void showpage::thridClickedSlot()
{if(thridstat)thridstat=false;elsethridstat=true;this->update();}
//在handle中根据收到的数据触发信号,改变车位状态
void showpage::fristChangSlot(bool stat)
{friststat=stat;this->update();
}void showpage::secondChangSlot(bool stat)
{secondstat=stat;this->update();
}void showpage::thridChangSlot(bool stat)
{thridstat=stat;this->update();
}
//获取
void showpage::getCarNumSlot()
{carNum=0;if(friststat)carNum++;if(secondstat)carNum++;if(thridstat)carNum++;QString a=QString::number(carNum);label1->setText(a.prepend("当前已用车位:"));}
这是用三个按钮模拟车辆停放(背景是一张图片)按钮按下代表车辆停放,本来是准备用红外或者什么的但是测试起来比较麻烦,就简单点用了三个按钮,当然还有许多其他的传感器。
后面将会陆续介绍其他的部分
处女作,,QT+arduino的物联网小项目相关推荐
- 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)
实现的功能: l APP控制月球灯 l 本地月球灯控制 l APP控制"大白"颜色,实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯,连接服务器长亮, ...
- 物联网小项目智能家居(QT、MQTT、嵌入式开发板、Ubuntu)
项目框架: 概述:搭建一个物联网的实战小项目,为本阶段的学习做了一次总结及记录.把构建的整个过程分享出来给大家,项目难点在于各种环境的搭建,而代码逻辑并不难. 说明: (1)本项目总共涉及到了4个MQ ...
- 森林笔记:Linux+Qt的广告机小项目实践
设计目标 在我们的日常生活中,会经常看到一些广告机,比如在我见过的电梯中就会有一个小广告机,显示有日期时间.楼层上下,图片广告,小视频播放等等.受此启发,也是做一个小广告机练手. 知识模块 [1]进程 ...
- 简单实现基于 STM32F407+ESP8266+RFID 的物联网小项目
BusChargeSystem-IOT 项目介绍 基于 STM32F407+ESP8266+RFID 的模拟公交车刷卡收费系统(物联网) STM32 通过 RFID 识别获取卡片数据并通过串口发送到 ...
- Qt入门超级简单小项目(1)登录对话框
环境:Windows10+Qt5 1.新建Qt Widgets Application,项目名称为login,类名和基类保持MainWindow和QMainWindow不变. 2.完成项目创建后,向项 ...
- Arduino开发小项目—光控灯
@Arduino开发小项目-光控灯 本篇文章介绍光敏电阻,通过模拟输入采集环境光强来控制LED灯亮度,做一个无需人为干预的自动控制设备. 传感器是一种检测装置,能感受并采集到被测量的信息,在当下物联网 ...
- ESP32S2小项目-FM-网络时钟/电台-Arduino开发环境
ESP32S2小项目,FM,网络时钟/电台,Arduino开发环境 效果展示 文章目录 ESP32S2小项目,FM,网络时钟/电台,Arduino开发环境 效果展示 开机动画: 网络时钟: FM模块: ...
- QT小项目--头脑风暴
QT小项目--头脑风暴 项目演示: 客户端: 单人联网模式 双人匹配对战模式 单机本地练习模式 服务器 服务器主要功能 项目演示: 客户端: 登陆界面,有登陆功能和注册功能,当选择登陆时,如果无此账号 ...
- Arduino小项目1---esp8266 WiFi 签到机
Arduino小项目1---ESP8266 WiFi 签到机 前言 0.使用的材料和软件 1.准备一个HTML网页 A.搭建出适合手机的页面框架 B.在body中加入表单元素 form标签:它的常用属 ...
最新文章
- 解锁bios学习总结
- 交通预测论文笔记:Spatio-Temporal Graph Convolutional Networks: A Deep Learning Frameworkfor Traffic Forecast
- 属性提取器:获取ListView即时更新其元素的最佳方法
- Python-100 练习题 02
- 中国互联网企业综合实力研究报告(2020)
- 换行符‘\n’和回车符‘\r’
- 深入玩转K8S之智能化的业务弹性伸缩和滚动更新操作
- python 判断是否连接wifi_python操作 linux连接wifi,查看wifi连接状态方法
- Python 3.9 正式版要来了,会有哪些新特性?
- 拼多多自动上架采集软件免费版教程下载
- 在浏览器输入localhost:3000显示需要新应用打开此localhost原因
- Dzz任务板初版完成笔记-仿trello私有部署的一款轻量团队任务协作工具。
- Python二进制内容转为中文(二进制转中文)
- Java线程中的静态方法_Java多线程3:Thread中的静态方法
- 邵阳学院计算机系主任,湖南教育大平台-湖南省计算机教育年会在邵阳学院召开...
- Android模拟器的ip获取以及模拟器之间socket通信
- Python 算法设计与分析 投资问题
- iOS经典错误library not found for -lXXX
- python 两个等长list的各对应位置元素相加+两个字典相加,相同键元素累加,不同键元素取全集
- 利用随机森林进行特征重要性排序