热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

物联网全栈教程从云端到设备(四)

请下载今天的附件,因为有表格,所以比论坛上的内容更详细。 1、MQTT协议是IOT(InternetofThings)领域的一个主流协议 在物联网的时代,每一个传感器每一个设备都想

请下载今天的附件,因为有表格,所以比论坛上的内容更详细。

 

1、MQTT协议是IOT(Internet of Things)领域的一个主流协议

 

在物联网的时代,每一个传感器每一个设备都想接入互联网进行数据交换。MQTT协议非常适合这样的场合。目前国内的主流IOT服务器供应商均提供对MQTT协议的解析比如百度云计算,阿里云计算等。MQTT协议的实现也非常简单,对带宽的要求不高,对网络链接的可靠性要求也不高,而且协议本身制定了一定的机制来处理突发事件。

 

MQTT协议不仅可以在物联网领域发挥重要作用,同时也可以用于多台机器之间的信息交换比如一个车间里面所有的传感器之间数据的交换。

 

MQTT协议也不仅仅局限于运行在互联网通信上。它是一个通信规则,对通信方式的实现不关心。通常我们提到物联网指的是通过 TCP/IP 的方式实现了通信,也就是利用互联网实现,因为互联网可以提供一个非常可靠的双向通信。

 

本学习手册根据MQTT V3.1.1 版本编写

官方手册下载地址:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.doc

下面章节大部分内容均参考此官方手册。

 

2、MQTT 通信协议需要有三个角色参与

 

这段文字参考百度云计算的帮助文档:

https://cloud.baidu.com/doc/IOT/MQTTProtocol.html#.E0.F6.0C.38.86.9F.BE.F8.FD.AC.D9.00.29.12.24.B6

 

MQTT协议提到的一个名词“主题”,类似于文件夹的名字一样。比如小王是电脑的主人,他的电脑上面有a,b两个文件夹,小刘每次存储的文件喜欢放到a文件夹,小宋每次存储的文件喜欢放到b文件夹。那么当小林想看小刘的文件时,只需要看a文件夹就可以了。上述的“a”文件夹的名称,在MQTT协议里面称作主题 。

物联网全栈教程-从云端到设备(四)

 

左图诠释了MQTT协议里的三个角色:发布者客户端(负责发送消息),代理服务器(负责接收和分发消息),订阅者客户端(负责接收消息)。

在MQTT协议里,“主题”就是一个文件夹,发布的消息可以送到一个“主题”里面,订阅者也可以从“主题”里面读取到消息。

代理服务器在国内有百度的 IoT Hub ,也有阿里云的IoTHub,还有很多其他品牌的服务器。

发布者客户端和订阅者客户端既可以是同一台设备,也可以是不同的设备,只要这台设备可以通过服务器的认证,并且遵循MQTT协议,就可以发布或者订阅消息。本学习手册的重要内容就是两个客户端如何与服务器“交流”。

3、MQTT 通信协议和大数据

 

(1)       小刘采集的信号是温度信息,他每间隔1分钟就上传一次温度信息到服务器,同时他发送的主题是 a 。

(2)       服务器接收到小刘的温度信息后,会查找当前都有哪些订阅者想看主题是 a 的信息。

(3)       小林订阅了主题是 a 的内容,只要小刘发送一次信息,小林就可以立马接收到对应的信息。

(4)       小刘和小林都需要事先通过账号密码的方式连接到服务器。小刘就像在野外工作的工作人员辛苦采集信号,而小林就像在办公室的老板千里之外洞察前线的一手信息。

(5)       如果有1000个小林这样的角色不停地给服务器发送温度数据。我们都知道服务器有数据保存和数据处理的能力,这时候就可以结合机器学习的相关知识去处理和分析这些数据,从而为人类的决策提供参考。

 

4、在MQTT 通信协议里,字符串需要遵守UTF-8 编码规范

 

在MQTT通信协议里,数据传送是以Bit(位)为单位的,和我们常见的TTL串口类似不过他们本质上不是一个东西。MQTT协议约定:数据传送时,高字节在前,同时,每个字节里面的最高位先传输。

5、MQTT 一帧消息包含的内容

 

MQTT 的一帧典型的消息最多由三部分组成:

 

固定头(所有的消息必须包含)  +  可变头(有些没有)有效内容(有些没有)

 

MQTT协议约定,根据不同的功能实现,固定头是必须要的,其他两部分内容可有可无(比如心跳包的发送和接收只要固定头即可,而从机发送的链接请求则包含了三个部分)。

6、后面还有内容,我做成了PDF了,里面有表格啥的,论坛上编辑不方便,你下载查看吧。里面详细讲解了组合一帧报文的过程。附件中还有一个是MQTT协议的中文手册,更权威。



推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
author-avatar
暖心我在这_若惜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有