基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓的智能家居看着挺高大上的,其实没有什么了,在内行人眼里都是小儿科。所以如果你是高手,请绕步。对于想要学习这方面知识的小伙伴来说还是有其价值的。


这篇博客就来说说界面的问题吧

界面的实现

打开下位机系统第一版,发现它是这个样子的,才想起来自己当时只是想在PC机上跑跑而已,而如今已经跑在了ARM板上。


最终版本的界面如下图所示:

最初设计的时候界面我全部是使用控件拖出来的,这样开发很快,但是也有弊端。

怎么样,界面很朴素吧,剩下的工作全部交给QSS就可以了。
在上图中,4个按钮都是ToolButton,然后设置对应的Icon就行了,因为QToolButton能够设置文本和图标,所以选择了ToolButton,这样就可以设置文本显示在图标的下边了。

    tbn->setAutoRaise(true);//设置文本在图标下边tbn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

界面中的其他图标设置样式都是类似的,只不过是大小策略的不同而已,关于界面实现的细节,通过修改样式表完全可以解决,样式表我就不做过多的介绍,因为官方的文档介绍的太详细了。
http://doc.qt.io/qt-4.8/stylesheet-examples.html


数据通信介绍

简述

从题目中可以看出使用的是zigbee进行通信的,但是,仔细一想,通信的接口到头来还是串口,因此上位机通信编程其实就是串口编程了,说到串口,Qt5已经给我们封装好了类,只需在工程配置文件中添加QT += serialport就可以直接进行调用相关类了。


到了Qt4里面是没有这个类的。由于Qt4中没有串口类,只要5里边有,因此很多时候是直接使用的第三串口方库,直接将它添加到我们自己的工程当中来使用的,出于方便,也可以直接使用Qt4自带的qmake将库编译到Qt4库当中,以后想用的话直接使用就可以了。使用的时候需要在.pro文件中包含进来:

编译第三方串口类

可以直接下载Qt 5的串口部分源码,注意是串口部分的源码,当然你也可以全部下载,那样就比较耗时,Qt很友好的给我们提供了模块下载,这真的是非常好的。
下载地址:
串口源码下载(http://download.qt.io/archive/qt/5.1/5.1.1/submodules/

打开后会发现设计到串口相关的有4个压缩包,在window下的话就直接下载第一个(红色圈起来的部分),当然也可以下载第二个也行了。这份源码可以在不同平台进行编译一次,这样你的代码移植性就比较好。这里只介绍在windows下的编译,其他平台的编译方法类似。

下载源码后,打开cmd命令窗口(前提是你的qt环境变量已经配置,若没有配置则直接使用Qt command),进入到串口源码目录,执行qmake qtserialport.pro,此时会生成Makefile文件,然后make && make install。会在编译完成后安装到Qt的目录下面。
编译安装完成后到Qt4安装目录查看,确实有了:
include路径

lib路径:

这里说明一下为什么要使用Qt5的源码进行编译,而不使用第三方串口类。因为Qt5串口类中有个QSerialPortInfo这个类,有了这个可以进行查看当前串口设备信息,这是很方便的,以前使用第三方串口类的时候并没有发现那样的放,要想实现列举当前串口设备,在window下是查看注册表来是现代,不过这样不通用,在linux下没有试过,因此直接编译了Qt5的串口类。在使用上差不多是一样的。


通信协议

设计到通信部分,协议肯定是少不了的,工业控制方面目前比较有名的协议有Modbus、BACnet等,其中Modbus是比较有名的。我这里只是简单的对设备进行了定义,并没有使用上述复杂的协议。
这里列举一部分出来
模块类型宏定义和枚举

数据包:

对一帧数据必须进行区分是发送的命令还是数据,这里做了简单的区分,实际中可以在添加奇偶校验位,对数据校验。要发送出去还必须对数据进行打包处理,完了从我源码中可以查看,这里就不足过多的介绍了。

数据解析

关于串口通信编程部分,我就不写了,网上写的比我详细多了。其实使用串口编程也很简单,设置几个参数再进行判断即可。在串口打开后数据传输都放在了线程里边进行接收与发送,效率还是可以的,可能我的数据量太小的缘故吧。
数据接收时需要注意的一点就是对开始接收到数据大小进行一个判断,否则可能造成数据丢失。必须使用bytesAvailable()函数对接收到的数据进行判断,小于某个数就返回再读取,否则收到的数据不完整。


技术在于交流、分享……
Email:kevinlq0912@163.com
QQ:936563422

基于ZigBee和STM32的智能家居控制系统的设计与实现(三)相关推荐

  1. 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)--终结篇

    基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇 说明 首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的.最后还被评为优秀毕业设计,虽然并没有什么luan用 ...

  2. 基于ZigBee和STM32的智能家居控制系统的设计与实现(二)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(二)   上一篇博客中总体介绍智能家居系统的基本实现原理,这篇博客和以后的几篇博客会详细进行相应的介绍.这里首先进行硬件电路的设计. 硬件电 ...

  3. 基于ZigBee和STM32的智能家居控制系统的设计与实现

    基于ZigBee和STM32的智能家居控制系统的设计与实现(一) 时间过的好快,已经到了做毕业设计的时候了,本次毕业设计题目是自己选的,为什么做这个?原因很简单,想把自己所学的大部分知识都应用上,虽然 ...

  4. 基于ZigBee和STM32的智能家居控制系统的设计与实现(四)

    ##简述 在前几篇博客中介绍了智能家居系统的整体结构以及各个部分实现原理,感谢好多的朋友前来问候,给与了好多建议与支持,让我有了动力来写这篇博客,这篇博客作为本系统的终结篇,将会介绍剩下的问题. ## ...

  5. 关于开源项目「基于ZigBee和STM32的智能家居控制系统」的使用说明

    阅读本文大概需要 6.6 分钟 大家好,我是 devstone,很感谢大家对这个项目的喜爱和关心,自从该项目公开以来断断续续有很多人加我好友询问一些基础问题,我也回复过很多,当然了以后也可能会有人问到 ...

  6. 《ZigBee开发笔记》第六部分 项目篇 基于ZigBee和Openwrt的智能家居控制系统(五)

    声明:本项目的所有源码均公开,但未经同意不得转载或用于其他用途,有任何问题请联系博主,感谢大家的支持. 上一节介绍了上位机,本节将介绍智能网关部分,智能网关是用的开源系统OpenWrt.处理器使用的是 ...

  7. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

  8. 基于微信的智能家居控制系统的设计与实现

    基于微信的智能家居控制系统的设计与实现 目 录 1 绪论 6 1.1 课题研究的背景 6 1.2 智能家居系统的研究现状和发展前景 6 1.3 课题研究的意义 7 1.4 设计的研究内容 8 2 相关 ...

  9. 基于Zigbee和MQTT的智能家居应用

    基于Zigbee和MQTT的智能家居应用 摘要:本文提出了基于Zigbee和MQTT的一种智能家居设计方案,与小米华为等做成品的方案不同,本文方案主要设计的是不同的设备控制器,对于用户定制的自由度大, ...

最新文章

  1. 单链表-插入一个元素为x的节点后,使链表仍然有序
  2. 电信、联通、移动、其它路由表 2011-06-19更新
  3. 试试博客园的markdown编辑器
  4. php模板技术smarty,PHP模板技术Smarty
  5. 高并发IM系统架构优化实践
  6. 运维专家:我在大数据项目中踩过的那些坑
  7. python 字符串替换换行,Python fstring:替换换行符/lineb
  8. 500块钱买一个手机壳,为什么年轻人如此上头?
  9. WCF使用Json传输的一个BUG
  10. 实现RPC就是这么简单
  11. ---转载---phython资料
  12. 如何恢复丢失的分区及文件(视频教程)
  13. 变形金刚图纸_变形金刚救援
  14. 深入理解ajax系列第九篇
  15. 高仿微信 Windows 端
  16. b站尚硅谷springmvc学习视频:springmvc文档
  17. 一些有用的在线工具(二)
  18. 2021-06-29凯云软件测试项目管理系统系统描述
  19. 纯css修改图标颜色的五种方式
  20. STM32F1+BC20+MQTT+FreeRTOS系统连接云平台传输温湿度,控制LED灯②——电信云

热门文章

  1. hive java insert_hive javaapi 002
  2. AppStore隐私政策网址(URL)
  3. 树莓派/图像/人脸识别
  4. vultr 安装docker
  5. CTFer成长计划训练营第二期挑战赛
  6. Android笔记:浅析Android电视APP开发
  7. 更改Colab的CUDA以及cudnn
  8. 亚洲研究院微软笔试题
  9. python飞机大战(只需要两个python文件)附带pycharm的导包方法
  10. java读取文件并输出内容