IoT Worlds
MQTT
博客智能设备

将物联网设备与 Web 应用程序连接起来的 MQTT 意义

使用所有可用的消息传递协议,很难只选择一种。 有这么多选择,很容易发现自己处于尝试一种对您或您的团队不起作用的情况。 Mqtt 是一个轻量级协议,只需要客户端和代理,因此非常适合您不想要任何麻烦的情况。 本文将探讨该协议的功能以及它如何实现这些功能!

什么是 MQTT?

Mqtt 是一个轻量级的消息传递协议,只需要客户端和代理。 它非常适合您不想要任何麻烦或大惊小怪的情况,因为它对您的要求很少。

什么是消息传递协议?

消息传递协议是一组规则,用于允许不同机器上的应用程序进行通信。 Mqtt 专为物联网 (IoT) 而设计。 有了如此广泛的其他可用协议,为此目的创建另一个协议似乎很奇怪。 但是,由于有如此多的设备和服务依赖于这个领域,随着时间的推移,我们可能会看到越来越多的设备和服务!

MQTT 有什么了不起的?

Mqtt 是真正独一无二的,因为它几乎什么都没有给你这么多。 您不需要像许多其他协议那样的专用服务器或转发器,这也意味着没有基础设施问题。 您所需要的只是一个现有的代理和任何具有互联网连接的硬件。 由于它的工作质量和它的轻便性,这个协议越来越受欢迎。 因为它是开源且免费使用的,您可以轻松上手,无需支付任何费用或订阅费用。 借助 Arduino MQTT 库中内置的代理支持,我们很高兴看到有哪些出色的产品将出现在我们面前。

MQTT 的特点是什么?

Mqtt 是您会发现的简单、轻量级消息传递协议的最佳示例之一。 它的主要卖点是它的易用性——任何具有互联网连接的设备都可以利用该协议所提供的优势。 但是这个协议不仅仅是易于使用。 让我们探索一下您还能期待什么!

MQTT 使用示例

一个。 工厂中的物联网设备控制泵和阀门

湾 带有传感器的气象站向云上的数据库报告

C。 报警系统报告门何时打开或关闭

d。 检测到运动时办公室中的一些灯亮起

一、什么是MQTT,它有什么特点?

MQTT 代表消息队列遥测传输,这听起来可能很复杂,但仅仅意味着它是物联网设备使用互联网相互通信的一种方式。 它运行在 TCP/IP 之上,如 HTTP、SMTP 等,但与通过 Internet 通信的 HTTP 不同,MQTT 用于通过网络(通常是 IP 网络)相互连接的设备。 它最常用于 IoT 中,低功耗嵌入式设备连接到 Raspberry Pi 或 Arduino 板等设备。

2. 它是如何工作的?

它的工作方式有点像电子邮件。 IoT 设备向主题发布消息。 这就像向某人发送电子邮件,但不是一个人,而是一个主题名称。 消息中最多可以包含 2kb 的数据,并以数据包的形式发送。

第二个 MQTT 订阅者侦听具有自己唯一 ID 或客户端 ID 的数据包。 然后它对消息做一些事情。 这就像当有人收到一封电子邮件时,他们会用它做一些事情;阅读它,将其发送到其他地方等。

MQTT 具有服务质量 (QoS) 级别,这意味着消息可以有不同的优先级。 QoS 级别由客户端设置,发送的每个数据包都具有该优先级。

3. MQTT 的好处

它是轻量级的,在 TCP/IP 上运行,比 HTTP 更少的开销

消息存储在队列中,直到可以发送到目标设备

它具有内置的重新连接支持

每个客户端都可以有自己的用于身份验证和加密的安全配置

QoS 允许不同的消息类型具有不同的优先级

四、MQTT的应用

在现实世界中如何使用它的一些例子是 M2M 联盟,该项目旨在将“事物”与用于在设备之间传输数据的安全平台连接起来。 另一个用例是 CEPH 项目。 这是一个云存储系统,可以同时存储和共享文件给多个用户。 它使用 MQTT 通过加密数据来保护分布式访问,这允许它使用各种网关在物联网设备之间传输,而不必担心数据安全性。

5. MQTT 入门

首先需要一个 MQTT 客户端;这是发送和接收消息的应用程序。 Raspberry Pi 基金会提供了在您的 Pi 设备上开始使用 MQTT 的指南。 还有其他可用的指南,例如来自 Hackster 的指南,它为您提供了在 Python 编程语言上运行的代码。

最佳 MQTT 在线课程

  1. 掌握 MQTT
  2. 主 MQTT 协议
  3. 开发 MQTT Client Android App
  4. MQTT 大师班
  5. 精通 MQTT 协议:从初学者到高级指南
  6. 物联网:MQTT 与 Adafruit、App Inventor 和 ESP8266
  7. MQTT Nodemcu (ESP8266) 与 Nodered、Wifi 和蓝牙

用于构建 MQTT 代理的 TLS 与 SSL

使用 TLS 的优点:

– 安全性:TLS 提供客户端和代理之间的安全连接。 这有助于防止中间人攻击和窃听。

-身份验证:TLS 提供代理和客户端的身份验证,有助于确保只有授权的客户端才能连接到代理。

-加密:TLS 提供客户端和代理之间的数据加密,有助于保护信息不被未经授权的个人看到。

使用 TLS 的缺点:

– 性能:TLS 会增加通信开销,从而降低性能。

-Certificates:为了使用 TLS,您需要客户端和代理的证书。 这些证书可能难以获得并且使用起来可能很昂贵,这会增加使用 TLS 的成本。

使用 SSL 的优点:

– 安全性:SSL 提供客户端和代理之间的安全连接,就像 TLS 一样。 它还有助于防止中间人攻击和窃听。

-证书:由于 SSL 建立在 TLS 之上,因此您可以使用相同的证书来加密流量。

使用 SSL 的缺点:

– 性能:客户端和代理之间的加密会增加通信开销,从而降低性能。

– 内存使用:SSL 协议将使用比其他协议更多的内存,因为它与代理保持加密/解密会话。

-版本问题:SSL 是一个较旧的协议,它不支持 TLS 提供的某些功能(例如,较新的密码)。

如您所见,TLS 和 SSL 都为客户端和代理之间的通信提供安全、身份验证和加密;但是他们这样做的方式略有不同。 在决定是否应该为 MQTT 代理使用 TLS 或 SSL 时,没有一个明确的赢家,因为该决定将取决于您对基础设施的需求以及您可以花费多少时间/金钱。

总之,我会说根据项目需要有一个正确的答案。 在这种情况下,最好使用 TLS,因为它提供了比 SSL 更多的优势。

在 IoT 项目中使用 MQTT 协议的 5 大理由

MQTT 是一种机器对机器 (M2M) 消息传递协议,专为资源受限的设备而设计,可将设备连接到云。

1、轻量级、易用性:MQTT是一种发布/订阅消息协议,其设计目的是轻量级和易用性。

2、占用空间小:MQTT使用的带宽约为HTTP的1/10,非常适合网络资源有限的物联网应用。

3. 支持 QoS:MQTT 支持服务质量 (QoS),它保证以所需的延迟或质量传递消息。

4. 可以在任何网络上运行:MQTT 是一种跨平台协议,可以在 WiFi、低功耗蓝牙 (BLE) 或 2G/3G 蜂窝网络上运行。

5. 它有多种编程语言可用的客户端库:有 C、C++、JavaScript、Arduino IDE、Python 和 Java 的客户端库。

如何在您的 PC 或 VPS 服务器上使用 Docker 容器设置 MQTT 代理?

MQTT 是一种机器对机器 (M2M)/“IoT”消息传递协议,设计为一种极其轻量级的发布/订阅消息传输。 它对于与需要少量代码和/或网络带宽非常宝贵的远程位置的连接非常有用。

在本文中,我们将向您展示如何在您的 PC 或 VPS 服务器上使用 Docker 容器设置 MQTT 代理。

Docker 是一个容器化引擎,可帮助您轻松部署应用程序及其所有依赖项。 它在每个 Docker 主机上提供一致的环境,允许您节省时间并增强代码在各种 Linux 发行版之间的可移植性。 例如,如果任何应用程序依赖于大量系统库或一些稀有的库版本,因此不容易移植,您可以简单地将其全部打包并部署为 Docker 容器。

1) 为 Windows/Mac 安装 Docker

Docker 适用于 Microsoft Windows 和 Mac OS X 用户。 您可以从此处下载适当的版本:https://docs.docker.com/docker-for-windows/install/。

2) 在你的主机上安装 Docker-compose

为了轻松部署我们自制的 MQTT 代理,我们将使用 docker-compose 工具。 它允许您使用简单的 YAML 文件定义和运行多容器 Docker 应用程序。 您可以从此处了解有关 docker-compose 的更多信息:https://docs.docker.com/compose/。

你可以从这里下载 docker-compose 工具:https://github.com/docker/compose/releases/。完成此操作后,您应该能够在终端中运行“docker-compose”命令并检查其版本或使用其任何子命令。

本文的基本 Docker 术语:

1) “Docker 容器”是当您使用 docker run 命令运行映像时在后台运行的进程。 镜像的运行实例称为“容器”,就其在 docker build 中的创建而言。

2)“Docker 镜像”是一个只读模板,带有创建 docker 容器的说明。 它由一系列文件系统层组成,代表我们要创建的最终图像的不同状态

3) copy at docker build 命令通过从当前工作目录中的 Dockerfile 中读取其描述来构建镜像,然后在当前镜像之上的新层中执行适当的命令。

4)“卷”是允许您将主机上的本地文件夹映射到 docker 容器内的目录的文件夹。 例如,如果您想存储有关容器或配置文件的一些数据,这将非常有用。 您可以通过使用 docker run 从主机系统指定文件夹的路径来创建卷。

YAML 文件是一个配置文件,其中包含用于连接到外部数据库、MQTT 服务器等的信息,以及有关应如何创建和创建哪些容器的信息。 我们将在下一节创建一个 YAML 文件来配置我们的代理。

3) 创建 YAML 文件以配置您的 MQTT 代理

YAML 文件通常由多个键值对组成,它们通过冒号 (“:”) 连接。 您可以从此处了解有关 YAML 的更多信息:https://en.wikipedia.org/wiki/YAML#Syntax。

在我们的例子中,我们将创建一个 YAML 文件来配置 MQTT 代理,如下所示:

版本:“3”

在 YAML 的这一部分中,我们将容器的名称定义为“homer-mqtt”,并指定用于创建它的镜像。 在这种情况下,我们将从此处的 Docker Hub 中选择镜像“davidtgoldblatt/homer-mqtt”:https://hub.docker.com/_/homer-mqtt/。

在我们的 YAML 文件中,我们还声明了几个卷,如下所示:

卷:

– /var/run/docker.sock:/var/run/docker.sock

这些卷将使我们拥有 docker 容器的持久存储,允许我们的设置在服务器重新启动和崩溃时保持不变。 您可以从此处了解有关卷的更多信息:https://docs.docker.com/engine/userguide/dockervolumes/。

为了指定我们的数据库详细信息,我们添加了一个“db_addresses”部分,其中包含以下条目:

db_addresses:

-“主机=172.17.0.2 端口=3306 用户=homer dbname=homer”

在上面的示例中,我们为数据库实例指定了主机和端口。 请注意,在指定用户时,您必须在用户名前添加“@”符号。 这是因为用户名在 Unix 系统中由字母和数字组成。 如果你忽略它,Docker 会报错如下:

您必须转义特殊字符,例如 @ 或 *

为了指定我们的数据库凭据,我们添加了一个“database_password”部分,如下所示:

数据库密码:“homerun1”

在上面的示例中,您应该使用您选择的密码。 如果您想第一次设置数据库密码,您可以在此处查看有关如何创建没有密码的新 root 用户的指南:https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user .html

为了指定我们的 MQTT 服务器详细信息,我们添加了一个“mqtt_server”部分,其中包含以下条目:

mqtt_server:

– 名称:mqtt 主机:172.17.0.1 端口:8883 用户名:“homerun” 密码:“homerun1”

在上面的示例中,我们在 8883 端口上运行代理,并使用我们在数据库中创建的用户名“homerun”和密码“homerun1”。

4) 使用 Docker 运行 MQTT 代理

在这一步中,我们将从 YAML 文件创建一个 docker 容器并运行它。

为此,cd 到您拥有 YAML 文件的目录并运行“docker-compose up”,如下所示:

$ 码头工人组成

此命令将根据您的 YAML 文件中的描述构建一个新的 docker 容器并启动它。

如果您想在后台启动它,请改用“docker-compose up -d”。 如果要打印 docker 容器的日志,请运行“docker-compose logs mqttclient”,如下所示:

$ docker-compose 日志 mqttclient

您还可以使用“docker-compose ps”实时查看 docker 容器,如下所示:

$码头工人撰写ps

5) 使用 Docker 运行 MQTT 客户端

在这一步中,我们将从 YAML 文件创建一个 docker 容器并运行它。

为此,cd 到您拥有 YAML 文件的目录并运行“docker-compose up”,如下所示:

$ 码头工人组成

此命令将根据您的 YAML 文件中的描述构建一个新的 docker 容器并启动它。

如果您想在后台启动它,请改用“docker-compose up -d”。 您还可以使用“docker-compose ps”实时查看 docker 容器,如下所示:

$码头工人撰写ps

6) 将 MQTT 客户端与 Docker 一起使用

现在我们的 YAML 文件已经设置好了,我们现在可以开始使用我们的 MQTT 客户端和 Docker。

为此,请转到您拥有 YAML 文件的目录并运行“docker exec”,如下所示:

$ docker exec -it mqttclient /bin/bash

您现在应该看到一个名为“/home/homerun”的目录(这是我们的 docker 容器的主目录),您应该在该目录中。

您现在可以通过键入“mysql -uroot -proot”来查看您的数据库,如下所示:

$ mysql -uroot -proot

您应该在屏幕上看到所有数据库。 您可以在此处查看如何为 MySQL 实例创建没有密码的新 root 用户:https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user.html

为了在 Docker 中运行 MQTT 客户端命令,您需要输入“sbin/mqtt”,如下所示:

$ sbin/mqtt -c /home/homerun/config.yaml

在上面的示例中,我们使用 -c 标志指定了一个配置文件,它从我们在本教程中创建的配置文件中读取我们的 MQTT 设置。

为了检查您的 MQTT 客户端是否已启动并运行,您可以使用“docker-compose ps”,如下所示:

$码头工人撰写ps

在上面的例子中,我们的 MQTT 客户端已经成功启动。 您现在应该在屏幕上看到所有数据库。

为了在 Docker 中运行 MQTT 客户端命令,您需要输入“sbin/mqtt”,如下所示:

$ sbin/mqtt -c /home/homerun/config.yaml

在上面的示例中,我们使用 -c 标志指定了一个配置文件,它从我们在本教程中创建的配置文件中读取我们的 MQTT 设置。

为了检查您的 MQTT 客户端是否已启动并运行,您可以使用“docker-compose ps”,如下所示:

$码头工人撰写ps

在上面的例子中,我们的 MQTT 客户端已经成功启动。 您现在应该在屏幕上看到所有数据库,您可以尝试发布一些消息以测试一切是否正常:

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt 发布 -t ‘test’ -h 172.17.0.1 -m ‘你好世界!’

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt 订阅 -t ‘test’ -h 172.17.0.1 -u mqttuser

7) 使用 Docker 清理 MQTT 客户端

为了停止您的 docker 容器,您需要运行“docker-compose down”,如下所示:

$ docker-compose down

8) 使用 Docker Volumes 清理 MQTT 客户端

为了停止创建 mysql 数据库和 mqtt 用户,可以使用 -v 标志。

$ docker-compose down -v

您还可以通过删除包含 YAML 文件的目录来清理您的环境。

mysql数据库和mqtt用户创建成功! 当您删除 docker 容器时,它们将被自动删除。 您现在可以通过键入“exit”退出此 shell。

在本教程中,我们了解了如何通过 Docker 容器配置 MQTT 客户端。

结论

MQTT 是一种机器对机器 (M2M) 或“物联网”连接协议。 它被设计为一种极其轻量级的发布/订阅消息传输。MQTT 可用于将低功耗传感器、可穿戴设备和其他微型互联网连接的东西连接到云。 因为 MQTT 使用发布/订阅模型,所以它非常适合需要不经常发送数据或网络带宽非常宝贵的设备。

有兴趣开发您的 MQTT 解决方案吗? 联系我们!

Related Articles

WP Radio
WP Radio
OFFLINE LIVE