项目介绍
什么是物联网平台
要搭建之前,一定要先搞明白一个概念,那就是什么是物联网平台。笔者作为一个准备入门的小白自然也是两眼一抹黑。在笔者大致查了些资料,实际上手使用一些物联网平台后,大致搞明白,物联网平台可以实现的功能有一下大致几点
终端设备接入
数据上报
数据持久化
终端设备管理
命令下发
搞明白了目标之后,我就在脑中考虑出了系统的雏形,大致分为以下几部分
MQTT协议
在web开发中,我们常见的是 HTTP/HTTPS 协议,这是一种短连接,即在请求和响应完成之后会关闭连接。这种连接有一个弊端,那就是只能由客户端主动联系服务端,而不能由服务端主动联系客户端。但是一定存在客户端与服务端需要长时间互相交换数据的场景。在早期,人们使用 轮询/长轮询 ,后来出现了webSocket协议,这是一种很接近MQTT的协议,一旦建立连接,双方就可以长时间进行双工通讯。后来就出现了在物联网领域应用极其广泛的MQTT协议,相比于WebSocket,MQTT更复杂,但更能更加强大。很多时候两种协议甚至可以混用。
MQTT采用 订阅/发布 的模式。MQTT的客户端既可以订阅消息,又可以发布消息,而MQTT的服务器 被称为broker,负责接受客户端发布的消息,并将其发送给订阅了该主题(topic)的客户端,从而实现客户端之间的交互。
关于MQTT的协议,可以访问 太极创客的官方网站了解更多,这里笔者不再赘述
零基础入门学用物联网 – MQTT基础篇 – 目录 – 太极创客 (taichi-maker.com)
项目实现
连接协议
本项目使用MQTT协议进行数据上传和下发,使用HTTP协议进行数据交互
Broker
关于MQTT服务器,我选用了 EMQX开源版
关于emqx的使用,官方文档写的很清楚,这里不再赘述。emqx提供了丰富的api,可以通过http请求实现一些列功能。
由于这里使用的是emqx开源版,所以服务器本事并不提供数据持久化等一系列高级功能。但是其中有些功能可以使用其他方法实现。
emqx官方文档: EMQX 文档
后端服务器
后端服务器这里使用的是 nodejs+express.js+mqtt.js
笔者写过的几个项目,后端使用的都是nodejs,因为nodejs简单易用,性能尚可,有非常丰富的第三方工具包,非常适合小型项目
也因为笔者不会用java写后台
作用
后端服务器在本项目中主要起到一下作用:
向web端以及小程序端提供api
通过MQTT协议订阅设备发布的收集到的信息,并将其持久化
通过MQTT协议向设备下发命令
实现不同的api功能,如命令下发
代理emqx提供的api,向web端以及微信小程序端提供统一的api
代码实现
备注
前文中,笔者介绍道,没有使用小程序端直接连接终端设备,是因为规范问题
其实这里还有一个原因,就是遇到了一些技术上的问题。就是微信小程序使用npm包的问题。
一开始笔者也想直接连接,毕竟简单方便,相较于http请求,在笔者看来,mqtt连接似乎更容易
一些,但是当笔者使用npm安装了mqtt.js工具包,并引用时报了错误。后来去网上搜搜查查,说
是要打开一个使用npm包的选项,这个选项在较新的微信开发者工具中已经取消了。在新版本
中,要打开 工具->构建npm 这个选项。
上述一些操作,在各大搜索引擎中都能搜到相关博客,这里笔者就不放链接了。
但是,在进行了一系列操作之后还是不行,后来又查资料发现,引用的包必须遵守微信小程序的
规范。后来又找到了一种方法,是直接把全部的代码放进单独的一个js文件中,然后在引用。在
一番操作之后连接成功了,但是最终笔者也没有采用这种方法
最后一种方法见:微信小程序mqtt实现 - 简书 (jianshu.com)
本项目中,为什么只进行了温湿度数据的收集,以及LED灯珠的控制
因为本项目笔者把它定性为,物联网平台,所以接入设备只是试验性质的,只要证明平台可用即可。
web端
作用
web端在本系统中承担的作用主要是:
数据可视化展示
未来可能会继续完善,加入接入终端设备管理功能
代码实现
因为本项目是带有实验性质的,所以很多方便笔者尽量采用了简化方法,而只保留的骨干,故本工程只有一个html文件及css文件,本章节只展示 index.html
本工简单引用了 vue以及echarts组件,旨在快速创建一个相对完善且美观的页面。
备注
web端作为数据可视化展示,是物联网平台不能缺少的一部分,但是目前也只完成了可视化展示,其他的数据管理功能,例如查询、更改、导出等都没有完成,后续可能会对其进行完善。
如果过于深入的介绍web端的技术实现,就有些偏离本文档的初衷了,故在此不过多赘述。