物联网小项目智能家居(QT、MQTT、嵌入式开发板、Ubuntu)

您所在的位置:网站首页 物联网系统怎么做 物联网小项目智能家居(QT、MQTT、嵌入式开发板、Ubuntu)

物联网小项目智能家居(QT、MQTT、嵌入式开发板、Ubuntu)

2024-07-17 03:15:41| 来源: 网络整理| 查看: 265

项目框架:

概述:搭建一个物联网的实战小项目,为本阶段的学习做了一次总结及记录。把构建的整个过程分享出来给大家,项目难点在于各种环境的搭建,而代码逻辑并不难。 在这里插入图片描述

说明:

(1)本项目总共涉及到了4个MQTT客户端以及1个MQTT服务器; (2)其中,需要我们实现的是2个客户端:家(开发板)和APP_1(Ubuntu),其他客户端都是现成的; (3)服务器是直接使用现成的(对于我们初学者而言不需要去关心别的,我们只会用到服务器的地址+端口); (4)客户端的安卓端也是直接下载现成的(因为作者没有学过安卓或者IOS的开发),此部分即使是不做也不会对项目效果造成影响。

项目步骤: 1 客户端-MQTTX下载以及MQTT的协议测试

(1) 现在MQTTX(MQTT客户端) MQTTX的下载官网 https://mqttx.app/zh 我是在Windows下运行的这个客户端(读者可以根据需要选择Linux下,这个没有任何关系) 在这里插入图片描述 (2) 下载完成后,按照步骤,输入必填的4项即可,其中“名称”随便写,“Clien ID”也随便写,但是要保证不能重复,我是直接使用随机的生成的,服务器和端口号我是直接使用这个APP的默认地址和端口,也可以使用别的服务器(例如:test.ranye-iot.net 1883)。至于,其他的项,暂时不用过多关心。 在这里插入图片描述 (3)点击连接,如果连接没成功,是无法进入下一步的。 在这里插入图片描述(4)订阅主题,选择QoS等级(根据自身需求选择,作者使用Qos1)。 在这里插入图片描述 (5)消息的订阅和发布 在这里插入图片描述 至此为止,我们已经测通了服务器能用,以及MQTTX(后续用于调试使用)能用。

2 Ubuntu的环境搭建

(作者所使用的开发板是韦东山老师的IMX6ULL PRO) 概述:QT的环境搭建、MQTT的环境搭建、Ubuntu可以连公网。 Ubuntu内QT的环境搭建以及MQTT的环境搭建,网上的方法比较多,只需在百度上搜索即可找到大量的教程,作者也是参考了比较多的文章。 Ubuntu的联网我是参考韦老师的文章搭建的,大家如果没有韦老师手册的话,可以直接在CSDN搜索韦老师的账号。

3 开发板的环境搭建(交叉编译)

这边的所谓开发板的环境搭建实际上就是在Ubuntu上面把库都使用交叉编译工具链编译好,然后打包到开发板上面。 我们同样需要在开发板上面完成QT、MQTT的搭建,以及确保可以开发板联网。 QT在开发板上面如何使用,网上也有很多文章介绍的,我使用的是正点原子的方案,大家可以直接参考正点原子的手册《05【正点原子】I.MX6U出厂系统Qt交叉编译环境搭建V1.6》,里面介绍了一个常用的开发方案,也就是,你在Ubuntu里面使用QT Create编写代码,点击运行后,可以直接远程控制开发板实现代码效果,然后等你感觉代码没有问题了,在拷贝到开发板上面即可。 MQTT在开发板上面使用的方法同样也有很多,我在这边推荐一篇文章。 https://itcn.blog/p/2243502540.html 文章里面介绍了MQTT如何在Ubuntu、IMX6ULL板子上面运行。 作者也是根据这边文章操作的,需要注意的是,如果读者在最后运行(可执行文件)的时候,如果看到提示说格式错误时,那就说明得到的可执行文件或者.so库的格式有问题,此时读者要使用linux的“file file_name”命令去查看文件的格式是否有问题。如果程序是放在开发板上面运行的,那么格式就不能是x86或者x64的(对于ARM开发板而言),那么此时你就需要好好检查交叉编译的设置有没有问题了。 下图是file命令的一个示例: 在这里插入图片描述

4 Ubuntu的QT上位机编写

至此,我已经默认你搭建好了所有的开发环境。下面开始编写QT的Ubuntu上位机。 我会把源码公布出来(很简单的),下面介绍功能。下图为界面1。 输入用户名密码,在代码中暂时用字符串代替, 用户名:usetest;密码:123456在这里插入图片描述 成功后,会进入如下界面,我用红色框框起来的是表示目前已经实现的部分,界面做的比较简单,目的在于先把功能实现,(注:发布消息那边的QoS等级我默认为1,没有在界面中体现出来)。下图为界面2。在这里插入图片描述 订阅主题那一块我设置了一些宏,来定义我默许的主题,也就是说目前是只能支持下列主题。在这里插入图片描述 实际应用时,读者可以定义一些缓存区来专门存放这些主题。像我这样写勉强还能用,但是我们订阅了那么多主题,我们必须要把每次的消息都要不遗漏的处理掉,而不能被覆盖。 那么这时候一个重要的数据结构队列就派上了用场。

环形缓存区(环形队列):这个数据结构个人认为会比链表实现更加简单,网上也有大量的实现方法,作者这边做最简单的讲解。 队列的简单实现:(静态型) (1)定义全局read、write变量,(读者可以理解为)用于访问数组; (2)定义一个缓存区,可以是普通的数据、也可以是结构体数组(常用),在这里插入图片描述其中REV_LEN是数组长度,我设为51,实际长度为50(会预留一个空位,是用于判断队列是否为满的必要条件); (3)接下来,有数据来了,我们就操作消息入队; 在这里插入图片描述为什么写指针需要自增后取余呢?这正是环形队列之所以叫环形的灵魂所在,因为达到最大值后,他就跳回下标为0的地方重新开始(但是用户不用去关心数据到底要从数组的哪个索引处写入,十分巧妙!!)。 实际上,队列还可以判断目前有效数据的个数,但是本文并不关心。 (4)获取数据方(需要得到这个数据的一方),去异步的获取队列的数据; 在这里插入图片描述 读指针的自增取余的原理和写指针一样。 如此简短(不到20行的)的代码,在整个软件领域的应用十分大,它的写法很多,但是原理都一样,它可以很好的解决数据读取方和数据接收方时间不同步的问题。 例如:试着想象一下,我们在键盘上面一次性输入很多的字符,无论你的手速有多快,这个按键的处理速度有多慢(实际上是很快的),但是计算机都会一一去处理,而不会丢失任意一次按下的按键值(除非电脑死机),这就是利用到了这个原理。 下图为界面3。点击了开关灯或者是开关窗帘,实际上会向灯或窗帘这个主题发布一条消息,那么订阅了这些主题的其他客户端就会收到这条消息。在这里插入图片描述

5 开发板的QT上位机编写:

到这里,作者已经迫不及待的要去验证开发板了,所以就随便写了1个窗口 在这里插入图片描述 我们可以看到实际的运行效果,当我们在上位机上面按下开关灯或者是开关窗帘后,开发板上面就会打印相关的信息,如果读者不用QT,也可以使用串口打印。

代码我会传到git,后面发出来。 本文是作者的一个项目记录,比较粗糙。 有什么问题也可以提出来,大家讨论。

======================================= 第一次添加:ubuntu上面编写的qt APP源码。git clone https://gitee.com/guo-jinpeng-666/smart-home.git



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭