零基础实战万物互联之 MQTT

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

物联网是计算机、互联网之后,信息技术的第三次浪潮。5G 的出现,进一步降低了万物互联的门槛。物联网本身也是 AI 和区块链应用的基础,很有可能成为下一个风口,在风口到来之前,提前进行一些相关知识储备,…

物联网是计算机、互联网之后,信息技术的第三次浪潮。5G 的出现,进一步降低了万物互联的门槛。物联网本身也是 AI 和区块链应用的基础,很有可能成为下一个风口,在风口到来之前,提前进行一些相关知识储备,是很有必要的。

如果想入门物联网,学习和了解 MQTT 协议是非常必要的,它解决了物联网中的一个最基础的问题,设备和设备之间,设备和云端服务之间,是怎么通讯的。MQTT 之于物联网,就好像 HTTP 之于 Web 那么重要。目前基本所有开放云平台比如阿里云、腾讯云、中国移动云等都支持 MQTT 的接入。

本文将介绍 MQTT 服务器的搭建,以及各种编程环境的 MQTT 编程实战。

  1. 如何搭建 MQTT 服务器(EMQ)
  2. 使用测试工具测试 MQTT 服务器
  3. MQTT 实战之 C 语言编程
  4. MQTT 实战之 Java 编程
  5. MQTT 实战之 JS(Web 前端)编程
  6. MQTT 实战之 Python 编程

本文适合有一定的编程基础(C、Java、JS、Python 皆可),希望了解 MQTT 的读者。



如何搭建 MQTT 服务器(EMQ)

MQTT 服务器有许多开源的实现,其中国产的 EMQX 是一个优秀的代表作。EMQX 的官网是 https://www.emqx.cn/products/broker,我们可以从这里下载安装。

按照官网的下载说明,选择系统版本(它能支持 Linux、Windows 等多种系统)。

我们这里以 Ubuntu 18 为例。

下载安装包:

wget https://www.emqx.cn/downloads/broker/v4.2.11/emqx-ubuntu18.04-4.2.11-x86_64.deb

在这里插入图片描述

安装之:

sudo apt install ./emqx-ubuntu18.04-4.2.11-x86_64.deb

在这里插入图片描述

一键启动:

sudo emqx start

在这里插入图片描述

我们看到 ps aux 里面,会有很多 EMQX 的进程,表示启动成功。

在这里插入图片描述

验证安装正常不正常的方法,是浏览器打开 EMQX 的控制台,端口是 18083,默认登录用户 admin,密码 public,看到 dashboard 页面表示正常

在这里插入图片描述

使用测试工具测试 MQTT 服务器

我们先不编程,先用标准测试工具,测试一下 mqtt 的数据发送和接收。我们用 MQTT X 工具,在 https://github.com/emqx/MQTTX 这里下载。

打开这个工具,服务器填写刚才你安装的服务器地址,name 随便填,其他都是默认就行(安装的服务器默认端口都是 1883,用户密码都是可以空)。

在这里插入图片描述

然后我们 connect,不出意外,就能 connected,有问题检查网络和服务、防火墙等等。connect 好了以后,我们去 dashboard 查看,能看到这个连接:

在这里插入图片描述

接下来我们应该订阅自己需要接收的消息,MQTT 是按照 Topic 主题来订阅的,# 是通配符,具体概念可以自行查看查看相关文档。

在这里插入图片描述

我们这里订阅了一个 TEST 出题的消息,就是说任何人,发送 TEST 主题,我都能收到了。

那由于系统里就只有我自己,那我就自己发一个 TEST 主题的消息:

在这里插入图片描述

再看接收框:

在这里插入图片描述

收到了这个消息。

所以我们可以通过这个工具验证各类问题。

MQTT 实战之 C 语言编程

下面我们用 C 语言来实现 MQTT 消息的发送和接收,通常,各类物联网终端,都是嵌入式系统的,都会用 C 代码来实现。

C 语言成熟的 MQTT 库很多,我们选用的 Paho MQTT C Client,这是一个 MQTT C Client for Posix and Windows,可以在各种 Linux 版本(包括 ARM Linux)和 Windows 下面使用,也可以在 android 里面使用,它是纯 C 语言的,方便移植,所以我们采用这个库。 当然,若读者是用与单片机等场合,可能连 pthread 和 socket 都没有,那需要用更轻量级的 MQTT 库比如 libmqtt 等,只是封装 MQTT 的数据包,不包含 socket 等网络操作,由调用者去发送接收数据。

Paho MQTT 在 https://www.eclipse.org/paho/index.php?page=clients/c/index.php 可以下载到,编译方法参见官网相关说明即可。

调用流程也不复杂,大致是:

  1. MQTTClient_create:创建实例
  2. MQTTClient_setCallbacks:设置回调(用于接收消息)
  3. MQTTClient_subscribe:订阅消息
  4. MQTTClient_publishMessage:发送消息

我们实际测试一下。

连接服务器:

在这里插入图片描述

订阅消息,Topic 是 TEST/2222:

在这里插入图片描述

发送一个消息,这里还是发送 Topic:TEST/2222。

在这里插入图片描述

运行起来:

在这里插入图片描述

我们发送 message,自己就 recv 到了,因为我们也订阅了这个主题。

我们再看看 MQTT X 测试工具里面,同样的,它也能收到:

在这里插入图片描述

这样,我们就演示了一个完整的 MQTT 收发数据的过程,而且是编程实现的。下面我们再看看,用别的编程语言如何实现。

MQTT 实战之 Java 编程

通常,我们再终端设备(嵌入式设备)或者安卓手机里面,用上面说的 C 语言的 MQTT Client 库,就可以发送和接收 MQTT 数据了。数据到了服务端,我们通常要做一个后台服务来处理这些数据,比如存入数据库、做一些智能分析和统计等等。后台一般都是用 Java 来实现的,所以我们这一部分看看 Java 的 MQTT Client 实现。

上面的 C 代码用的是 Paho 的库,Java 我们还是用这个 Paho,官网在 https://github.com/eclipse/paho.mqtt.java。熟悉了上面的 C 的代码以后,Java 的几乎都是一样的原理。

首先是创建一个实例,参数与 C 程序大同小异:

 MqttClient sampleClient = new MqttClient(broker, clientId, persistence);

然后 connect,有一些选项,参数也几乎一样:

sampleClient.connect(connOpts);

然后发送一个 message,我们将 Topic 写成 TEST/3333:

MqttMessage message = new MqttMessage(content.getBytes());message.setQos(qos);sampleClient.publish(topic, message);

然后我们在刚才的 C 程序中接收:

在这里插入图片描述

在 MQTT X 工具里面观察,同样也能收到。

MQTT 实战之 JS(Web 前端)编程

后端数据库等已经用 Java 解决了。还有一个问题,很多数据都需要跑到 Web 前端进行 Web UI 的展现,比如 GPS 数据要在地图上显示,再比如温湿度数据想在 Web 上画一个图表,这个怎么办呢?通常 Web 前端都是 JS 实现,所以如果我们可以用 JS 直接接收到 MQTT 的数据,就非常方便了。

由于我们是 Paho 粉丝,这部分继续用 Paho 的库。同时这里再强调一下,各种语言的 MQTT Client 库,成熟好用的都有很多,本文虽然都是基于 Paho 系列库,不代表它是惟一选择,用户可以根据自身需求,灵活选择。

Paho 的 JS 库,官网在

https://github.com/eclipse/paho.mqtt.javascript

老规矩,创建实例,设置 callback,调用 connect:

在这里插入图片描述

然后订阅,发送,Topic 我们这里 TEST/4444:

  client.subscribe(\"TEST/#\");  message = new Paho.MQTT.Message(\"Test4444\");  message.destinationName = \"TEST/4444\";  client.send(message);

我们再去 C 程序窗口和 MQTT X 测试窗口看,接收到了 Test4444 吧。用 C 发一个数据过来,JS 的 callback 里面也能接收到,这样 Web 前端就可以放心地解析数据,绘制 Web UI 了。

MQTT 实战之 Python 编程

最后我们再看看 Python 的实现。因为包括 AI 等很多项目,都是基于 Python 的,某些场合,我们需要用 Python 做一些数据出来,然后将结果推送回去。比较方便的方法就是,用 MQTT 收到数据,出来完毕后,再用 MQTT 推送回去 result。

聪明的读者应该已经猜到了,我们又是 Paho 库,exactly,官网是

https://github.com/eclipse/paho.mqtt.python

继续老三样,创建实例,设置 callback,然后 connect:

client = mqtt.Client()client.on_connect = on_connectclient.on_message = on_messageclient.connect(\"127.0.0.1\", 1883, 60)

订阅:

client.subscribe(\"TEST/5555\")

发送数据:

client.publish(\"TEST/5555\", \"message from python\")

我们再去 C 程序窗口和 MQTT X 测试窗口看,接收到了 “message from python”。

以上我们介绍了 MQTT 服务器的搭建,测试工具的使用,C、Java、JS、Python 语言和 MQTT 服务器的通信等等。MQTT 服务把复杂的高并发的数据转发给实现了,应用层只需要关系自己的业务数据即可,各种编程语言都可以实现 Client,所以 MQTT 是非常好用的。另外,除了 EMQX 以后,还有很多其他的开源 MQTT 服务器,都可以使用,阿里云等也支持这类协议。因此,在物联网应用中,广泛采用 MQTT,是可以事半功倍的。

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站(邮箱:1099252741@qq.com,备用微信:1099252741),本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。