当前位置: 首页 > wzjs >正文

中国人民共和国建设部网站爱战网官网

中国人民共和国建设部网站,爱战网官网,wordpress首页置顶推荐问题,我的网站没备案怎么做淘宝客推广文章目录 前言一、项目介绍二、前台QT界面1. 界面设计2. 代码示例 三、后台硬件驱动四、JsonRPC 实现前后台分离1. 为什么要拆分?2. 如何拆分? 五、总结 前言 项目完整代码:基于 IMX6ULL 的环境监测自主调控系统完整代码 该项目的源代码适用…

文章目录

  • 前言
  • 一、项目介绍
  • 二、前台QT界面
    • 1. 界面设计
    • 2. 代码示例
  • 三、后台硬件驱动
  • 四、JsonRPC 实现前后台分离
    • 1. 为什么要拆分?
    • 2. 如何拆分?
  • 五、总结

前言

项目完整代码:基于 IMX6ULL 的环境监测自主调控系统完整代码

该项目的源代码适用于韦东山老师提供的出厂镜像,使用韦东山老师的 IMX6ULL 开发板可以直接运行代码复刻,其它开发板需要自行移植。

一、项目介绍

作者在去年实习期间做了与 Linux 相关的项目,在这里我用韦东山老师的 IMX6ULL 开发板把用到的关键技术展现出来,主要用到 Linux 驱动,QT界面设计,JsonRPC 前后台分离。

该项目主要使用 JsonRPC 把程序拆分为前台QT和后台APP,实现远程数据采集,设备控制和设备自动化运行等功能。
我们需要实现:

  1. 后台 APP 传感器及控制设备的驱动编写和设备树修改。
  2. 前台 QT GUI 界面设计,实时接收后台APP传感器数据和控制后台APP传感器。
  3. 实现前台 QT GUI 界面和后台APP进程间通信,JsonRPC 远程调用。

项目实物示例如下,控制灯开关:
在这里插入图片描述

人体红外检测人数,超声波判断距离:
在这里插入图片描述
遥控控制空调:
在这里插入图片描述
E2PROM记录存放东西:
在这里插入图片描述

温湿度绘制成图表:
在这里插入图片描述
室外环境监测:
在这里插入图片描述
项目演示视频:

基于 IMX6ULL 的环境监测自主调控系统

二、前台QT界面

前台界面主要实现了一个主界面和六个跳转界面,对于界面的跳转我们可以用两种方法,第一种是在槽函数中先关闭当前界面,再new出来新的页面展示,第二种方法是先new出来界面,再隐藏当前界面,展示新的界面,用信号作为跳转,考虑到第一种需要不断开辟新空间浪费资源,所以我们采用第二种方法。

1. 界面设计

主界面设计:
在这里插入图片描述
LED,DAC控制灯界面:
在这里插入图片描述
空调控制界面:
在这里插入图片描述

E2PROM存储界面:
在这里插入图片描述
行人监测界面:
在这里插入图片描述

温湿度图表界面:
在这里插入图片描述

室外环境监测界面:
在这里插入图片描述

2. 代码示例

核心界面跳转代码:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->led_page = new Ledpage;connect(this->led_page, &Ledpage::back, [=]() {this->led_page->hide();this->show();});this->irda_page = new Irdapage;connect(this->irda_page, &Irdapage::back, [=]() {this->irda_page->hide();this->show();});this->e2prom_page = new E2prompage;connect(this->e2prom_page, &E2prompage::back, [=]() {this->e2prom_page->hide();this->show();});this->sr_page = new Srpage;connect(this->sr_page, &Srpage::back, [=]() {this->sr_page->hide();this->show();});this->dht11_page = new Dht11page;connect(this->dht11_page, &Dht11page::back, [=]() {this->dht11_page->hide();this->show();});this->ap3216c_page = new Ap3216cpage;connect(this->ap3216c_page, &Ap3216cpage::back, [=]() {this->ap3216c_page->hide();this->show();});
}void MainWindow::on_led_open_clicked()
{this->close();this->led_page->show();
}void MainWindow::on_irda_open_clicked()
{this->close();this->irda_page->show();
}void MainWindow::on_e2prom_open_clicked()
{this->close();this->e2prom_page->show();
}void MainWindow::on_sr_open_clicked()
{this->close();this->sr_page->show();
}void MainWindow::on_dht11_open_clicked()
{this->close();this->dht11_page->show();
}void MainWindow::on_ap3216c_open_clicked()
{this->close();this->ap3216c_page->show();
}

三、后台硬件驱动

该项目主要用到 LED,DHT11,AP3216C,SR501,SR04,IRDA,E2PROM,DAC 模块,我们需要分别实现它们的驱动程序,规定好底层编程和硬件接口,以便应用层可以直接调用。

我们通常都是在Linux的终端上打开一个可执行文件,然后可执行文件就会执行程序。那么这个可执行文件做了什么呢?

可执行文件先是在应用层读取程序,其中会有很多库函数,库函数是属于内核之中。而内核又会往下调用驱动层程序。最终驱动层控制具体硬件。

所以我们需要编写两个程序,一个是驱动层的,一个是应用层的,最后驱动层需要注册进入内核,应用层才能够使用。

框架流程图:​​
在这里插入图片描述

该项目中QT代码编写相当于应用层,所以我们还需要编写后台硬件驱动。

编写驱动主要为以下七个步骤:

  1. 确定主设备号,也可以让内核分配
  2. 定义自己的 file_operations 结构体
  3. 实现对应的 drv_open/drv_read/drv_write 等函数,填入 file operations 结构体
  4. 把 file_operations 结构体告诉内核: register_chrdev
  5. 谁来注册驱动程序啊? 得有一个入口函数:安装驱动程序时,就会去调用这个入口函数
  6. 有入口函数就应该有出口函数: 卸载驱动程序时,出口函数调用unregister_chrdev
  7. 其他完善:提供设备信息,自动创建设备节点: class_create,device_create

具体每个模块的驱动实现可以看我之前的文章:

    1. hello驱动
    1. LED驱动
    1. SR501(人体红外模块)驱动
    1. SR04(超声波)驱动
    1. DHT11(温湿度传感器)驱动
    1. IRDA(红外遥控模块)驱动
    1. I2C驱动
    1. SPI驱动

将每个模块的驱动都装载到开发板后,编译运行QT程序,就可以通过上位机界面控制下位机传感器了。

四、JsonRPC 实现前后台分离

1. 为什么要拆分?

对于比较复杂的程序,前台界面显示、后台程序由不同的团队进行开发,双方定义好交互的接口即可。这样,前台、后台程序可以分别独立开发,降低相互之间的依赖。

例如:

  1. 当更改硬件,比如更换LED引脚时,前台程序无需改变,只需要修改后台程序。
  2. 想调整界面时,只需要修改前台程序,无需修改后台程序。

2. 如何拆分?

前台程序、后台程序分别属于不同的“进程”,它们之间的交互需要通过“进程间通信”来实现,比如:网络通信、管道、共享内存等等。

在这里我将演示使用基于网络通信的“JsonRPC远程调用”来实现前后台程序的交互:

image.png

RPC 是远程过程调用(Remote Procedure Call)的意思,而 json 是比较流行的传递信息的格式。

详细讲解可看:

  • 使用JsonRPC实现前后台独立开发与通信

全部源码我都放在资料包里面了,链接:

  • 基于 IMX6ULL 的环境监测自主调控系统完整代码

包括QT界面设计,各个模块驱动和设备树,前后台分离代码。
在这里插入图片描述
编译QT程序:
在这里插入图片描述
编译JsonRPC程序:
在这里插入图片描述

开发板上电,装载驱动,运行可执行文件,示例如下:
在这里插入图片描述

五、总结

该项目是作者去年在公司实习的时候结合自身所学知识做的,教学博客篇幅有限,作者基本将所有用到的知识点都列了出来,在以往写的文章里面。项目代码整体框架兼容性很高,方便大家扩展,你们可以根据自己的逻辑思维在作者的代码上自行添加功能。

项目改进之处:
原本作者想要加上v4l2摄像头和STM32单片机,v4l2摄像头可以在IMX6ULL开发板屏幕上显示,一些简单的传感器驱动可以通过单片机实现,利用MQTT协议进行发布和订阅,从而实现IMX6ULL与STM32单片机通信,减少占用IMX6ULL开发板上限有的资源,由于作者本人时间有限,目前没有空可以实现,后续空闲之后会完善上述提到的功能,希望博客对你有所帮助,谢谢大家阅读!

http://www.dtcms.com/wzjs/239160.html

相关文章:

  • 做软件项目需不需要有网站2023北京封控了
  • 手机网站建设咨询seo计费系统登录
  • python简单小游戏代码seo入口
  • 怎么做网页?seo排名点击软件推荐
  • 网站建设介绍书最好的搜索引擎排名
  • 网站首页设计草图seo网站内部优化
  • 开发网站平台app推广接单平台有哪些
  • asp网站咋做百度推广账号怎么申请
  • 公司域名不变网站做变动武汉seo服务多少钱
  • 组服务器做网站网络营销的有哪些特点
  • 高等教育出版社b2b电子商务平台小时seo
  • 做网站一屏有多大微商软文范例大全100
  • 南京室内设计公司排名爱站seo工具
  • 企业网站价格深圳网络营销推广外包
  • 无锡高端网站建设开发百度快快速排名
  • 珠海建网站seo关键词排名怎么优化
  • 昆明网站建设哪家最好seo顾问是干什么
  • wordpress tag模板贵州整站优化seo平台
  • 做移动网站点击软件吗厦门关键词优化网站
  • 广州移动 网站设计营销的方法手段有哪些
  • 高端女装长沙seo外包服务
  • 网站开发的编程语言有哪些sem竞价推广托管代运营公司
  • 数码公司网站建设调查网络营销推广流程
  • 吴桥网站建设价格湖南靠谱的关键词优化
  • 网站设计制作新报价图片班级优化大师免费下载学生版
  • WordPress数据库自动切换优化工具箱
  • 网站建设的功能描述百度快照入口官网
  • 大鹏网站建设微信广告朋友圈投放
  • 怎么自己学着做网站麒麟seo
  • 阿里巴巴网站的建设内容日本今日新闻头条