一个关于小程序Iot的具体实现(MQTT版)

原文链接:https://segmentfault.com/a/1190000016916926

前言

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协议单片机通信,异步存储聊天数据


图片描述

展开阅读全文

IoT协议: SharkMQTTMQTT

06-03

rn [b] [size=16px]MQTT协议[/size][/b]rnrn[b][size=18px]MQTT背景:[/size][/b]rnrn IBM公司的Andy Stanford-Clark博士以及Arcom公司的ArlenNipper博士于1999年发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术。Andy Stanford-Clark博士称,MQTT将在未来呈现爆炸式的增长。rn MQTT的话题是Andy Stanford-Clark博士和ArlenNipper博士谈论开源物联网平台Pachube时提到的。Stanford-Clark认为Pachube很酷,但其不足之处是不具备真正的推送功能。你需要不断不断轮询才能得到即时数据。这正是MQTT能够实现的,他提到了使用推送通信系统的石油管道检测系统。rnrn[b][size=18px]MQTT简介:[/size][/b]rnrn MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽与远程设备连接。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于移动应用设备上。rnrn[b][size=18px]MQTT的特征:[/size][/b]rnrn •轻量级的 machine-to-machine 通信协议。rn •publish/subscribe模式。rn •基于TCP/IP。rn •支持QoS。rn •适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张。rn •是一种比较不错的Android消息推送方案。rn •MQTT将会成为物联网的重要协议。rnrn[b][size=18px]MQTT应用:[/size][/b]rnrn IBM和St. Jude医疗中心使用MQTT开发了一套Merlin系统,该系统应用了用于家庭保健的传感器。St. Jude医疗中心设计了一个叫做Merlin@home的心脏装置,这种无线发射器可以用来监控那些已经植入复律-除颤器和起搏器(两者都是基本的传感器)的心脏病人。该产品利用MQTT把病人的即时更新信息传给医生/医院,然后医院进行保存。这样,病人就不用亲自去医院检查心脏了,医生可以随时查看病人的数据,给出建议。这样,病人在家里就可以进行检查。IBM称该发射器包括一个大型触摸屏,一个嵌入式键盘平台,以及一个Linux操作系统。在未来几年,MQTT的应用会越来越广,值得关注。通过MQTT协议,目前已经扩展出了数十个MQTT服务器端程序,可以通过LSP,PHP,Java,Python,C,C#等系统语言来向MQTT发送相关消息。此外,国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。其中Sohu,Cmstop手机客户端中均有使用到MQTT作为消息推送消息。据Cmstop主要负责消息推送的高级研发工程师称,随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一。在未来,MQTT将会进入到我们生活的各方面。如果需要下载MQTT服务器端,可以直接去MQTT官方网站点击software进行下载MQTT协议衍生出来的各个不同版本。rnrn[b][size=18px]MQTT特点:[/size][/b]rnrn MQTT协议是为大量计算,能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:rnrn1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;rnrn2、对负载内容屏蔽的消息传输;rnrn3、使用 TCP/IP 提供网络连接;rnrn4、有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。“至少一次”,确保消息到达,但消息重复可能会发生。“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。rnrn5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;rnrn6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;rnrn[b][size=18px]SharkMQTT协议[/size][/b]rnrn SharkMQTT是个专为嵌入式系统设计的非常紧凑的安全MQTT client 库。SharkMQTT与精简的嵌入式SSL库相结合,利用SSL证书为系统提供军事级的认证技术和数据加密技术。SSL证书为设备认证MQTT broker(MQTT服务器端的管理程序)和MQTT broker认证设备提供非常强大的认证机制——它比标准的MQTT认证方案更加强大。rnrn[img=https://img-bbs.csdn.net/upload/201606/03/1464944540_412439.png][/img]rn[img=https://img-bbs.csdn.net/upload/201606/03/1464944573_598815.png][/img]rnrn[size=18px]MQTT 移动应用:[/size]rnrn 1、 Facebook Messenger;rn 2、信息推送 (可给第三方处理数据);rn 3、与HTTP相比, 使用SharkMQTT进行信息推送功耗更低;rnrn 充分理解了MQTT原理后,SharkMQTT就很好理解了。实际上SharkMQTT就是个安全版本的MQTT Client,是在MQTT上集成SharkSS库,以确保加密通信链路是安全,可靠的。rnrnrn 论坛

没有更多推荐了,返回首页