快速开发MQTT(一)电子工程师眼中的MQTT
转载:https://zhuanlan.zhihu.com/p/54669124

文章首发于同名微信公众号:DigCore
欢迎关注同名微信公众号:DigCore,及时获取最新技术博文。
原文链接:https://mp.weixin.qq.com/s/hY3y0EpWLeya3YkWwvU1lQ
对于MQTT的介绍,官方文档是直接进入主题,讨论其架构模型,对于未曾接触网络技术的电子工程师来说,这第一章都已经是略微难懂的章节,更别提继续往下看了。因此,此文是站在电子工程师的角度介绍MQTT协议,为方便理解和描述,肯定没有计算机网络方面专业术语那么准确。
作为一名电子工程师,去理解网络工程、软件工程这些范畴的技术,有时候时非常困难的,尤其是做硬件,很多东西感觉很抽象,又很空洞。

日常工作中,电子工程师面对更多的是UART、SPI、IIC、USB,对于触手可及的这些外设接口协议,我们一般更多关注的是他们的信号时序、电气特性、传输速率等参数。并且在开发时,这些外设接口能够看得见摸得着,知道是哪两个或者哪几个设备之间进行连接。
MQTT基于TCP连接进行的网络通信。
都说“基于TCP连接”的通信,那到底啥是“TCP连接”呢?(官网http://www.tcpipguide.com/)这个需要了解到TCP/IP参考模型中的4层的定义:

TCP/IP参考模型图
MQTT是在TCP连接后的基础上进行通信的,那么在此可以简单认为,TCP就是个“外设接口”,就像UART、SPI这样,作为传输层,就负责把数据收发。
而在实际在使用过程中,MQTT数据是带了各种“格式”的条条框框进行封装,这些条条框框的封装就是在应用层定义和实现的。
应用层的协议利用TCP这种“接口”进行收发数据时,为了区别于不同应用程序,而定义了应用协议,类似于MQTT、HTTP、FTP等。
利用工具模拟和对比,串口连接后收发和TCP连接后收发的情况。
这里使用的是单片机开发的时候最常用到的一个串口助手SSCOM V5.10a(http://www.daxia.com/sscom/sscom5.13.1.rar),带有TCP连接功能。首先看看电子工程师非常熟悉的串口通信界面:

串口通信时的数据交互截图
同样的,切换到TCP连接的方式,根据如下截图配置TCP服务器和TCP客户端:

TCP连接后通信时的数据交互截图
可见TCP和串口类似,在连接后就可以对数据进行传输了。并且和串口一样,在传输时,数据是被完全透传出去的,而没有被封装成任何格式(只看TCP层),可见平时在底层开发时使用串口通信都没有上升到应用层协议,基本都是裸数据传输的,即使说有协议那基本都是私有协议,且是自定义的。
可是怎样能够实现连接?
MQTT协议是基于TCP连接进行通信的,TCP可谓是比嵌入式外设要复杂些,不是简单一个硬件实现就可以了的。
串口连接,最少需要的3根数据线(TxD,RxD,GND),然后设置两端设备的波特率、数据位、校验位、停止位,即可完成连接。
而TCP连接,需要往下的多个层协议来实现,然后就是配置IP地址、端口。实现方式有很多,有线方式可以用集成了网卡芯片的单片机或者以太网转串口、SPI模块等,无线的方式可以用集成了wifi的单片机或者wifi转串口、SPI模块等。
TCP连接实现方式很简单,就是芯片搭模块,而实现过程却是很复杂,对于应用开发的电子工程师,需要做的是能够利用低价格高效益的解决方案来实现MQTT协议,实现物联网。
更多原创技术干货,点击阅读原文。
原文链接:https://mp.weixin.qq.com/s/hY3y0EpWLeya3YkWwvU1lQ
★★★★★推荐文章
《【嵌入式编程】平台大小端存储差异解决办法》
《嵌入式硬件通信接口-使用RingBuffer处理数据(二)详细设计过程》
《嵌入式硬件通信接口-使用RingBuffer处理数据(一)》
《快速开发MQTT(一)电子工程师眼中的MQTT》
《快速开发MQTT(二)初识MQTT》
《MQTT客户端搭建-最清晰的MQTT协议架构》
《MQTT服务端搭建-最快方式验证自己开发的客户端》
★★★★★相似文章
《嵌入式硬件通信接口协议-UART(五)数据包设计与解析》
《嵌入式硬件通信接口协议-UART(四)设计起止式的应用层协议》
《嵌入式硬件通信接口协议-UART(三)快速使用串口及应用》
《嵌入式硬件通信接口协议-UART(二)不同电气规范下的标准》
《嵌入式硬件通信接口协议-UART(一)协议基础》
《嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口》
《嵌入式硬件通信接口协议-SPI(一)协议基础》
★★★★★扩展阅读
《【硬件电路】AltiumDesigner18规则检查含义》
《【硬件电路】N沟道、P沟道MOS管基本原理与应用案例》
快速开发MQTT(一)电子工程师眼中的MQTT的更多相关文章
- Sublime插件库新成员基于APICloud快速开发跨平台App
互联网时代强调用户体验,那什么是HTML5跨平台App开发者的编程体验?“不剥夺.不替换开发者喜欢的开发工具,就是人性化的用户体验”,APICloud给出了这样的答案! 重磅发布“多开发工具支持策略” ...
- 第一篇:数据工程师眼中的智能电网(Smart Grid)
前言 想必第一次接触到智能电网这个概念的人,尤其是互联网从业者,都会顾名思义的将之理解为"智能的电网". 然而智能电网中的"智能"是广义上的智能,它就是指更好的 ...
- 软件快速开发平台 JEPF
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- 全栈工程师眼中的HTTP
HTTP,是Web工程师每天打交道最多的一个基本协议.很多工作流程.性能优化都围绕HTTP协议来进行,但是我们对HTTP的理解是否全面呢?如果前端工程师和后台工程师坐在一起玩捉鬼游戏,他们对HTTP的 ...
- Android(java)学习笔记262:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- GAE+bottle+jinja2+beaker快速开发demo - Python,GAE - language - ITeye论坛
GAE+bottle+jinja2+beaker快速开发demo - Python,GAE - language - ITeye论坛 :GAE+bottle+jinja2+beaker快速开发 ...
- 微信小程序快速开发上手
微信小程序快速开发上手 介绍: 从实战开发角度,完整系统地介绍了小程序的开发环境.小程序的结构.小程序的组件与小程序的API,并提供了多个开发实例帮助读者快速掌握小程序的开发技能,并能自己动手开发出小 ...
- 《PyQt5快速开发与实战了》正式发售 !!!
<PyQt5快速开发与实战>正式出售了,该书是国内第一本介绍PyQt5的书籍.是两位一线工程师耗费一年的心血.本书github网址:https://github.com/cxinping/ ...
- Web开发从零单排之一:在新浪云平台SAE上开发一个html5电子喜帖
需求描述: 本人大婚将至,女朋友说“现在都流行在微信上发电子请帖了,你不是技(cheng)术(xu)宅(yuan)嘛,不会连这个都搞不定吧” 本人嘴上说这等小事何足挂齿,但心里还是七上八下的,虽然自认 ...
随机推荐
- linux系统目录权限实践及结论
总结测试结论:Linux目录的读.写.执行权限说明:
- airflow迁移
airflow迁移:airflow.cfg文件可以copydbinit时改数据参数 #airflow震乾源码copy:/data/venv/lib/python3.6/site-packages/ai ...
- PostgreSQL之 使用扩展Extension
目前开发中用到的都是PostgreSQL的一些基本的功能,无意间查到PostgreSQL还支持Extension,不仅源码包中自带有Extension,还有一些其他非官方的Extension.现在不用 ...
- sql server 中 like 中文不匹配问题解决就这么简单
原文:sql server 中 like 中文不匹配问题解决就这么简单 MS-SQL Server select * from Book where BookName like'%C语言%' 在SQ ...
- Jenkins+Github持续环境搭建
⒈前提要求 Jenkins与Github配合实现持续集成需要注意以下几点: 1.Jenkins需要部署在外网上,因为内网地址是无法访问Github的.这一点可以通过租用阿里云.腾讯云等云平台提供的云服 ...
- Android Application的基本组件介绍
一个Android应用通常由一个或多个基本组件组成,常用的一般有Activity.Service.BroadcastReceiver.ContentProvider.Intent等等. ⒈Activi ...
- Java EE Servlet相关的两个包
Servlet in Java EE 在Java EE的规范API中(链接),Servlet相关联的最重要的两个Package为: 1.javax.servlet 包含了一系列接口和类,他们在一个Se ...
- jsp其实是一个java类
我们打开tomcat的D:\Program_Files\apache-tomcat-8.0.32\work\Catalina\localhost\venus\org\apache\jsp, 当我们访问 ...
- element ui input框不能输入的问题(实时学习)
解决: 在input的上面添加数据v-model 既可以 1.菜单中api (2018年8月14号) :default-active 默认根据当前路由选中菜单,值需要和 el-submenu 的属 ...
- webpack的postcss的基本应用
PostCss是什么? PostCSS在webpack中的基本应用 一.PostCss是什么? 如果有深入学习PostCss需求的话可以参考大漠的资料:https://www.w3cplus.com/ ...