前言
Iot,这个名词应该很多人都听过了吧,即大数据、Ai等兴起后也紧跟着研发大潮流的到来,即物联网。传统简单的说就是智能化、程序化的控制硬件设施,大家最容易想到的应该是智能家居,通过一个App或者遥控进行对家具设置的远程控制。而今天要说的是人与物之间的通信控制,且通过互联网产品来执行人的命令,而机器进行应答。
竞品
说到小程序控制硬件,大家应该立马想到什么产品呢?某拜、某FO、售货机等等,他们的架构上会大致上有一个共通点就是存在或者类似的云Iot功能。就拿某拜的云架构来说就用了Azure IoT 中心、存储、虚拟机等服务。
做小想大
那么我们可以展望更大的架构与实现、或者希望能配出、实现出类似的功能也好,但是我们还是要一步一步的实现一下这个功能或小产品的功效。
目标拟定:用户控制端是小程序,硬件端我们选用简单的售货机(或快递柜),我们要实现的就是针对性的通过小程序命令通知售货机对应的柜子开锁关锁。
那么我们需要构思对应的简易版架构还有对接的实现方式了!
目前传统且大家熟悉的前后端交互方式应该大部分是REST API吧,那么我们在小程序(将它仅仅视为一个单纯的前端展示)与后台(这里就是下图的Iot,我们可以用SpringBoot+Netty构建一个Iot中心)之间的通信就选用API的形式,后台开放对应的指令接口,由小程序去调用,这里可能还有一个业务就是:那么服务器对小程序的主动通信还有通知呢?这里就不细讲了,这个可以当作是产品迭代的后期考虑问题,大家也可以考虑下实现方式。
本文小程序为MQTT调试测试Demo,未做REST API对接,下一篇文章会着重介绍。
那么Iot中心与售货机(快递柜)的通信呢?可能只做软件的同学一般比较少接触到,我一开始做的时候也是很懵,不过大致说下就是不同的通信协议来实现通信,我们就拿单片机来说的话,可以了解到它支持多少种通信协议,比如MQTT或者TCP/IP等等。
这个版本我们就做MQTT的通信版本,那么流程图就如下啦。
【图片】
准备什么?
选择已有的现成Github资源,本次选用paho.js用来方便MQTT通信
本文将着重讲解小程序与MQTT之间的对接通信,暂未出现API调用
小程序端:你需要一定的小程序开发基础,我这次选择了友人的一个Github项目作为我小程序的Demo
后台端:使用SpringBoot+Netty做一个对接MQTT和小程序的小的Iot中心
MQTT硬件模拟端:我选用了Github权威的Eclipse的paho,mqtt.java作为模拟
很简单,你需要实现的就是核心的后台端也是你最擅长的Java端。
先简后难
当你的职位做到一定的程度后,你可能需要做的不是去写底层详细的实现代码,而是一个这样实现的模板或者思路与流程,所以我们暂时先做一个简单版的小程序到硬件之间的通信流程。
netty很好,这里我不多说,因BAT大厂对高级的定义一般也是需要了解到Netty的源码程度等。那么你需要基于SpringBoot去加Netty,自定义对应的编解码内容,由于我们使用的paho,所以有它本身的一些格式,大致的思路就是定义协议规范,通信这块其实相较简单因为很大一部分netty其实已经帮你做好了。
小程序的socket通信是ws的开头,那么我们的Iot中心也需要有ws的通信通道。
这里我们的通信地址是:ws://localhost:8094/mqtt
并未使用wss,一样的说法吧,先把简单的实现了再想复杂的。
那么小程序对应也是连接这个地址,小程序可以调式下启动连接,而Mqtt的Java硬件模拟端也是同一个地址的连接。
对于MQTT而言,小程序需要去订阅一个主题,Java模拟端也正对这个主题去发送信息,如果两端都发送接收正常且都通过了我们的Iot中心,那么我们的这个小项目就是已经成功啦!
效果
GitHub
本文的相关全部源码已经放到了GitHub项目上的paho-mqtt项目上了
地址:paho-mqtt
项目介绍:基于Netty4与SpringBoot,聊天室WebSocket(文字图片)加API调用Netty长链接执行发送消息(在线数、用户列表)、Iot物联网-MQTT协议、TCP/IP协议单片机通信,异步存储聊天数据