标题有点长。 这个系列以树莓派为锚。MQTT是网络的主干。BLE,enocrean 以及其他一些现场总线(fieldbus) 是分支。我们先从MQTT协议入手。树莓派上跑MQTT不管是client还是Broker在网上都已经有不少教程,非常容易,不用一个小时跑起来。但我们自然是不单满足于此。果断往细了学(要不这个系列很快就没货了), 最后学以致用,搭平台验证。
MQTT 简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),目前有两个分支,MQTT,MQTT-SN。 MQTT for sensor network还没有正式发布,我们略过 (我也不知道啊)。 MQTT 是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
首先一个粗粒度的了解:
1. MQTT的拓扑结构
2. MQTT的应用
3. MQTT协议
MQTT的拓扑结构
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。下图是从官网(下文有链接)拷贝过来的。
* 图中的数据生产者是一个温度传感器,作为MQTT client.
* 图中的数据消费着是一个手机App,以及一个后端系统(比如可以是空调控制器)
* 图中的"消息代理"(Broker), 或者称之为MQTT服务器可以是树莓派这样的嵌入式设备,也可以是台式机,也可以是位于cloud端的服务(SAAS, software as a service)。
做个比喻,看官您在关注本公共号并收到该篇文章的推送,便是如上的数据消费者,首先订阅(subscribe)某个"主题"(Topic),然后收到该“主题”的推送(publish)。 而该篇文章的生产者(作者)并不直接和消费者(您)发生直接交互。生产者需要做的就是把数据打上“主题”标签(Topic)推送给Broker。
MQTT的应用
MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。尤其在物联网(IoT)、小型设备、移动应用等方面。目前看到的案例有
-
车联网
提供汽车共享服务的BMW “DriveNow"团队采用了MQTT技术
-
工业4.0
基于MQTT,在工业领域用在许多典型实时SCADA/IIoT、监视、和数据收集系统中的Sparkplug的典型架构如下。可参见如下图中groov公司的产品。
-
仓储运输
下图为HiveMQ Cloud给出的案例
-
智能家居
网上能看到最多的MQTT的DIY一般都是智能家具的例子了。 但是智能家居成熟的产品以及市场还有待观察。我后面也准备利用树莓派+蓝牙传感器+enocean传感器 + RS485 + 执行器 做一个简单的演示(这个最贴近生活,最容易搭建)。
MQTT的协议
MQTT已有的版本MQTT3.1,3.1.1 以及MQTT5。 后面就从MQTT5的协议入手。
-
1999 MQTT Invention
-
2010 MQTT3.1
-
2014 MQTT3.1.1 OASIS standard
-
2016 MQTT3.1.1 ISO standard
-
2019 MQTT5 OASIS standard
开篇的最后介绍一下一些有用的资源
官网的链接: https://mqtt.org/
开源代码: 开源的代码很多。商业的也不少。我用过的没几个。挑知道的说。
* Mosquitto,C, https://www.mosquitto.org/
* Cassandana,JAVA
* FlashMQ, C++
* HBMQTT , Python, https://github.com/beerfactory/hbmqtt
Cloud:
* MyQttHub.com: https://myqtthub.com/
* HiveMQ Cloud: https://www.hivemq.com/mqtt-cloud-broker/
* CouldMQTT: https://www.cloudmqtt.com/
Sparkplug:
https://projects.eclipse.org/projects/iot.sparkplug
也自建了一个公众号,用于交流学习。