65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Intel Edison 上构建和运行 Mosquitto MQTT

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2015年5月8日

CPOL

5分钟阅读

viewsIcon

13691

在本系列博客中,我将探讨各种将 Linux 功能集成到 Arduino 草图中的方法,以及如何利用现有代码来简化物联网开发。

获取全新的 Intel® IoT Developer Kit,这是一个完整的软硬件解决方案,允许开发人员使用 Intel® Galileo 和 Intel® Edison 板构建激动人心的新解决方案。访问 Intel® 物联网开发者中心

引言

Intel(R) Edison 板的一个重要特性是,它不仅是一个与 Arduino* 兼容的开发板,而且还是一个 Linux* 单板计算机,可以为 Arduino 草图提供对底层 Linux 功能的完全访问。

在本系列博客中,我将探讨各种将 Linux 功能集成到 Arduino 草图中的方法,以及如何利用现有代码来简化物联网开发。

我们将从构建一个简单的传感器节点开始,该节点包含一个温度传感器、一个光传感器、一个 LED 和一个开关。然后,我们将使用 MQTT 将数据发布到 Internet。演示使用 Node-Red 进行一些基本的примитивная 数据分析,以触发事件并将命令发送回我们的传感器节点。

Edison 板附带的 Linux 发行版源自 Yocto 项目,http://www.yoctoproject.org。Yocto 是一个为资源有限的嵌入式系统设计的微型 Linux 内核。

MQTT

MQTT 是一种轻量级协议,用于机器到机器 (M2M) 通信。MQTT 使用基于 TCP/IP 协议的发布/订阅消息转发模型。MQTT 协议的核心是一个 MQTT 服务器或代理,它可以被发布者和订阅者访问。使用 MQTT,您可以构建一个传感器网络,其中各种传感器可以发布它们各自的传感器值,形式为每个传感器特有的消息。执行器可以订阅它们可以操作的不同消息。MQTT 代理将负责将消息从发布者转发给订阅者。

示例

微控制器 A 可以读取开关的状态,并将开关的状态以“switch = on”的消息形式发布到 MQTT 服务器。位于互联网某处的微控制器 B 订阅了“switch”MQTT 消息。现在,当用户按下开关时,微控制器 A 将向 MQTT 代理发布一条消息。代理会将消息转发给订阅者列表。当微控制器 B 收到消息时,它可以解析内容,确定开关的状态,并相应地打开或关闭灯。

有关 MQTT 的更多详细信息,请访问 http://mqtt.org

Edison Yocto OS 附带了一个名为 RSMB (Really Small Message broker) 的小型 MQTT 代理。不幸的是,没有捆绑的 MQTT 客户端用于测试。在本文中,我们将构建另一个 MQTT 代理 Mosquitto,主要用于客户端。在后续文章中,我们将使用这些客户端连接到我们的 Arduino 草图。

在 Edison 上构建 Mosquitto

假定读者已经设置好 Edison 板,并且熟悉标准的 Linux 操作。

构建 Mosquitto 非常直接。以下是在 Edison 上构建 Mosquitto 的步骤:

  1. 从 mosquitto.org 下载 mosquitto
    $> wget http://mosquitto.org/files/source/mosquitto-1.3.5.tar.gz
  2. 解压归档文件
    $> tar xzf mosquitto-1.3.5
    $> cd mosquitto-1.3.5
  3. 构建
    $> make WITH_SRV=no
  4. 测试并安装您的 mosquitto 编译
    # Create user mosquitto
    $> add user mosquitto
    
    # Test 
    $> cd test/broker
    $> make test
    $> cd ../../
    
    # Install
    $> cp client/mosquitto_pub /usr/bin
    $> cp client/mosquitto_sub /usr/bin
    $> cp lib/libmosquitto.so.1 /usr/lib
    $> cp src/mosquitto /usr/bin

mosquitto 根目录中还有一个 test 目标。然而,此目标需要 Edison OS 上没有的 Python3,并且一些后续的测试将失败。test/broker 中的目标不需要 Python3,并且将涵盖所有必需的 MQTT 操作。

测试您的 mosquitto 客户端和服务器

Edison OS 已配置为自动启动 rsmb 代理。因此,默认的 TCP 端口 1883 已被 rsmb 使用。我们将使用默认的 MQTT 端口在本地运行的 rsmb 代理上测试 mosquitto 客户端。稍后,我们将配置 mosquitto 代理在不同的端口上运行,并进行测试。

要测试客户端,打开两个到 Edison 的 ssh 连接。在第一个连接中,运行一个 mosquitto_sub 客户端,该客户端订阅本地 Edison 上运行的 rsmb 代理上的名为“test”的主题。

在第二个 ssh 连接中,将消息“Hello World!”发布到同一本地服务器上的“test”主题。

您应该会在运行 mosquitto_sub 程序的窗口中看到消息。请注意,mosquitto_sub 客户端是持久的,并且会继续监听服务器的新消息,直到被终止。

上述测试表明,我们构建的 mosquitto_sub 和 mosquitto_pub 客户端可以与本地 rsmb MQTT 服务器正常工作。

我们可以使用我们构建的 Mosquitto 代理在不同端口 (1993) 上运行相同的测试。

使用与上面相同的命令,但在 mosquitto_sub 和 mosquitto_pub 中添加 -p 1993 参数,测试 1993 端口上的 mosquitto 代理。

摘要

我们已经在 Intel Edison 上构建并运行了 mosquitto 服务器和客户端。在接下来的文章中,我将开始开发利用我们刚刚构建的 MQTT 客户端的 Arduino 草图。

参考文献

Mosquitto 文档可以在此处找到:http://mosquitto.org/documentation

有关 Intel Edison 板的详细信息可以在此处找到:http://www.intel.com/edison

Intel® 物联网开发者中心

立即开始创新!Intel® 物联网开发者计划提供知识、工具、套件以及专家社区,助您快速轻松地将您的创新想法转化为物联网解决方案。

使用适用于 Intel® Edison 和 Intel® Galileo 平台的 Intel® IoT Developer Kit 畅想,并将其变为现实。这些套件是多功能、性能优化且完全集成的端到端物联网解决方案,支持各种编程环境、工具、安全、云连接和硬件。

如需更多资源并了解新的 Intel® 物联网开发者套件 v1.0 如何帮助您简化物联网项目

© . All rights reserved.