开发者社区> 华章计算机> 正文

《用于物联网的Arduino项目开发:实用案例解析》—— 3.3 MQTT

简介: MQTT是一个轻量级的机器对机器的协议。它采用的是发布者-订阅者模型,就是说由一个发布者把数据发布给服务器(也叫作代理),然后订阅者就能收到这个数据。发布者和订阅者彼此互不相识,但他们都连接在代理上,代理异步地完成这个通信。
+关注继续查看

本节书摘来自华章出版社《用于物联网的Arduino项目开发:实用案例解析》一 书中的第3章,第3.3节,作者[美]安德尔·杰韦德(Adeel Javed),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 MQTT

MQTT是一个轻量级的机器对机器的协议。它采用的是发布者-订阅者模型,就是说由一个发布者把数据发布给服务器(也叫作代理),然后订阅者就能收到这个数据。发布者和订阅者彼此互不相识,但他们都连接在代理上,代理异步地完成这个通信。
代理用话题的概念来通知所有的订阅者相关的数据已经发布这一消息。话题就像新闻推送,你可以订阅某些想要接收的新闻的话题。发布者和订阅者可以是传感器、机器或移动应用。图3-4是MQTT协议的高层概览。
理解MQTT协议对于构建物联网应用是很重要的,接下来,看几个场景来进一步理解MQTT。

3.3.1 入侵检测系统

图3-5为一个简单的入侵检测系统,包括三个部件:检测入侵发布数据的运动传感器、接收这个数据通知用户的移动应用,以及MQTT代理上的一个话题。

21a11122315f5198eb7d1cfae5b011a7789778d1

传感器一检测到入侵,就会作为发布者向MQTT代理商的codifythings/intrusion-Detected话题发布新的消息。MQTT代理会把这个消息加到话题中。移动应用可以订阅codifythings/intrusionDetected话题,当有新的消息被发布到这个话题时,它就会得到通知,继而可以通知用户。第6章将构建一个这样的系统。

3.3.2 远程灯光控制

MQTT另一种很棒的用处是为各种类型的设备开发遥控器,比如做一个灯光控制应用。如图3-6所示,一个遥控应用也是由三个部分组成,不过和上一个例子相比,前两个部件的顺序交换了一下。也就是说,首先是移动应用,它的用户可以控制灯光的开关,然后是连着灯光的设备,第三个部分是MQTT代理商的一个话题。
用户与移动应用交互来开灯或关灯,无论做哪种动作,移动应用就会给MQTT代理商的codifythings/lightsControl话题发布一条消息。MQTT代理会把这个消息加到话题中。连接到实际的灯的设备可以订阅codifythings/intrusionDetected话题,当有新的消息被发布到这个话题时,它就会得到通知,继而可以开关灯光。第8章将构建一个这样的遥控器。

7098a3c62aea5c4fbab8c362c7296246969c65a9

所需的硬件、软件和电路,请阅读2.3节。

3.3.3 代码(Arduino)

接下来,我们来写用WiFi将Arduino和互联网相连,并通过MQTT协议发布数据给服务器的代码。
启动Arduino IDE,输入下面的代码,或者从本书的网站下载代码文件然后打开。所有的文件都在单个源文件(*.ino)中,不过为了便于理解和重用,这个代码被分成以下四个部分:

  • 外部库
  • 互联网连接(无线)
  • 数据发布(MQTT)
  • 数据订阅(MQTT)

外部库

程序3-6给出了代码的第一部分,引入了运行代码所需的全部外部库。这个程序主要有两个依赖。为了实现互联网连接,需要包含(假设用的是WiFi盾板),而为了实现与MQTT代理的通信,需要包含。

92a3b1150fa42524b87f14c1d4217e5a1d7f874b

互联网连接(无线)

代码的第二部分定义了连接互联网要用的变量、常量和函数。在这里使用了程序2-7、程序2-8和程序2-9中的代码。
MQTT的数据发布和订阅
代码的第三部分定义了将来向MQTT代理发布和订阅要用到的变量、常量和函数。这个代码会发布和订阅同一个话题。
程序3-7首先定义了要Arduino连接的MQTT代理的地址和端口(默认为1883)。topic变量定义了在代理上发布和订阅所用的话题。如果你的电脑上没有安装MQTT代理,可以使用Eclipse基金会设立的公共MQTT代理(iot.eclipse.org)或Mosquitto(test.mosquitto.org)。

fbf0b62187ba8d99e2ac42ca8366e70c52771dfa

如程序3-8所示来初始化MQTT客户端。callback()函数把从代理收到的消息内容的细节封装了起来。

de3b392e86e7e5c2bbb7b7983a5695a44a05e045

标准函数

最后,程序3-9是代码的最后一部分,实现了Arduino标准函数setup()和loop()。
在setup()函数中,代码初始化串口,然后连接到互联网。如果连上了MQTT代理,就订阅codifythings/testMessage话题。一旦订阅成功,代码就向codifythings/testMessage话题发布一条新消息。代码订阅了它所发布的同一个话题,所以消息一发布出去,callback()函数就会被调用。loop()函数只是等待MQTT代理来的新消息。

0181828a6cac5dc996f612d3a76ea945bf1a4a78

这样,Arduino代码就完成了。

3.3.4 最终的作品

要测试这个应用,按照第1章所介绍的,校验然后上传代码到Arduino。代码上传后,打开串口监视器会看到如图3-7所示的日志消息。

7cd1caf5577a78f1806bf6b9f893435a39e5d564

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云IoT物联网实例视频讲解、场景案例汇总
阿里云IoT物联网实例视频讲解、场景案例汇总
293 0
身临其境!带你“走”一遍物联网真实案例实验场景
通过3个案例实验场景,手把手带你完整掌握物联网全链路!
69569 0
阿里云物联网IOT平台使用案例教程(模拟智能设备)
阿里云物联网IOT平台使用案例教程(模拟智能设备)
396 0
带你读《基于区块链的物联网项目开发》之二:创建物联网解决方案
本书首先概述当前业务场景中的物联网概念,帮助读者在IBM Watson物联网平台上开发自己的设备,并使用Watson和Intel Edison创建物联网解决方案。之后介绍如何利用Hyperledger框架开发区块链网络,以及如何创建自己的集成区块链和物联网解决方案。接下来的章节讲述了如何在IBM Cloud平台利用物联网来实现端到端的区块链解决方案。最后,你将掌握如何将物联网和区块链技术融合,利用实践和驱动程序来开发实用集成解决方案。
6041 0
带你读《基于区块链的物联网项目开发》之一:了解物联网并在IBM Watson物联网平台上开发
本书首先概述当前业务场景中的物联网概念,帮助读者在IBM Watson物联网平台上开发自己的设备,并使用Watson和Intel Edison创建物联网解决方案。之后介绍如何利用Hyperledger框架开发区块链网络,以及如何创建自己的集成区块链和物联网解决方案。接下来的章节讲述了如何在IBM Cloud平台利用物联网来实现端到端的区块链解决方案。最后,你将掌握如何将物联网和区块链技术融合,利用实践和驱动程序来开发实用集成解决方案。
2425 0
《用于物联网的Arduino项目开发:实用案例解析》—— 导读
分析家预测,到了2020年,会有超过500亿的联网物(设备),在物联网领域的总营收会轻松超过1.5万亿美元。 数字看上去巨大,但是物联网究竟是什么呢?是不是就只是把东西连接到互联网上呢?为什么连接后的东西就有意义了呢?
2318 0
《用于物联网的Arduino项目开发:实用案例解析》—— 3.4 小结
本章我们研究了HTTP和MQTT,在物联网应用中它们是两个非常重要、流行、轻量级的通信协议。这些协议是与具体设备无关的,所以可以用作任何类型的设备或服务器的通信。下一章会大量地使用这两个协议。
1577 0
《用于物联网的Arduino项目开发:实用案例解析》—— 3.2 HTTP
网站使用超文本传输协议(Hyper Text Transfer Protocol,HTTP)。HTTP支持多种数据传输的方法,在这个作品中,我们会用其中两种较常用的方法:GET和POST。GET和POST方法要做的事情是一样的,所以代码也很相似,它们的不同在于请求的格式略有变化。
3347 0
《用于物联网的Arduino项目开发:实用案例解析》—— 第3章 通信协议 3.1 学习目标
第2章已经分别用以太网或WiFi把Arduino连接到了互联网上。这一章将介绍发送和接收数据的协议。协议是一种用于网络通信的约定好了的结构化的格式。它定义了要发送和接收的信息,以及要采取的动作。
1511 0
《用于物联网的Arduino项目开发:实用案例解析》—— 2.5 小结
本章我们设计了用以太网或WiFi盾板把Arduino Uno连接到互联网的代码,还看到了Arduino Yún上的无线设置和用来访问互联网连接的代码。 对于今后任何用以太网或WiFi的互联网连接作品,都可以使用本章的代码作为基础,然后在上面加入自己的代码。
1058 0
+关注
华章计算机
文章
问答
视频
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
HaaS物联网云端一体低代码开发课程(上)
立即下载
HaaS物联网云端一体低代码开发课程(下)
立即下载
阿里云物联网平台技术白皮书V1.0
立即下载