5100浏览
查看: 5100|回复: 2

[intel程序猿笔记] 在英特尔Edison上创建并运行Mosquitto MQTT

[复制链接]
英特尔(R) Edison 开发板的一大特性是它不仅能够兼容 Arduino*,同时还是一款 Linux* 单板计算机,能够全面访问 Arduino 草案的底层 Linux 功能。
在本系列博客中,我将介绍将 Linux 功能集成至 Arduino 草案的各种方法,以及如何利用现有代码简化物联网开发。
首先,我们先来构建一个包含温度传感器、光线敏元件、LED 和开关的简单传感器节点。 然后,我们使用 MQTT 将该数据发布至互联网。 使用 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 订阅 MQTT 消息 "switch"。 现在,无论用户何时触发开关,微处理器 A 都会向 MQTT 代理发布一条消息。 代理将把消息转发至订阅程序列表。 当微处理器 B 收到消息时,将会对内容进行解析,确定开关的状态,并相应地开启或关闭指示灯。

如欲了解更多有关 MQTT的信息,请访问 http://mqtt.org

Edison Yocto 操作系统配备名为 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 根目录中还有一个测试目标。 但是,该目标需要 Python3,Edison 操作系统上无法使用 Python3,因此后来的一些测试失败。 测试/代理中的目标不需要 Python3,并包含所有基本的 MQTT 操作。

测试 mosquitto 客户端和服务器
Edison 操作系统配置为自动启动 rsmb 代理。 rsmb 已经设置为使用默认 TCP 端口 1883。 我们将使用默认 MQTT 端口在 rsmb 代理上测试 mosquitto 客户端。 然后,我们将配置 mosquitto 代理在其他端口上运行,同时对其进行测试。
如要测试客户端,请打开 Edison 的两个 ssh 连接。 在第一个连接中,运行一个在 rsmb 代理上订阅 'test' 主题并在 Edison 本地运行的 mosquitto_sub 客户端
在英特尔Edison上创建并运行Mosquitto MQTT图1

在第二个 ssh 连接中,向同一台本地服务器的 test 主题发布一条 'Hello World!' 消息。
您应可看到窗口中的消息运行 mosquitto_sub 程序。 请注意,mosquitto_sub 客户端是持久的,将持续侦听来自服务器的新消息,直至其停止。
在英特尔Edison上创建并运行Mosquitto MQTT图2

上述测试展示了我们所构建的能够与本地 rsmb MQTT 服务器正常兼容的 mosquitto_sub 和 mosquitto_pub 客户端。
我们可以使用在其他端口 (1993) 上运行的mosquitto 代理运行相同的测试
在英特尔Edison上创建并运行Mosquitto MQTT图3

使用上述命令,但是使用 -p 1993 参数来运行 mosquitto_sub 和 mosquitto_pub,在端口 1993 上测试 mosquitto 代理。
在英特尔Edison上创建并运行Mosquitto MQTT图4
在英特尔Edison上创建并运行Mosquitto MQTT图5

总结
我们在英特尔 Edison 上构建并运行了 mosquitto 服务器和客户端。 在后续的文章中,我将开始开发能够利用本文构建的 MQTT 客户端的 Arduino 草案。

参考资料:
如欲了解 Mosquitto 文档,请参阅 http://mosquitto.org/documentation
如欲了解有关英特尔 Edison 开发板的详情,请访问: http://www.intel.com/edison


virtualwiz  中级技匠

发表于 2016-4-20 23:11:49

很好玩的样子
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-4-21 08:14:39

板凳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail