公众号

欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。

一、mqtt介绍

1.1、什么是mqtt?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)由IBM在1999年发布。可以简单理解为给应用层使用的一种传输协议比如我们常见的http、tftp等,为什么会有多种传输协议,就是为了满足不同的使用场景,比如http是一种超文本协议,主要是运用在网页,文件传输上,如果要使用这种协议,需要比较大的数据量传输。但是我们的iot设备不需要传输那么多的数据量,而且http协议不能通过服务端发起传输到客户端,只能客户端发起传输到服务端,在我们的真实案例中比如智能灯泡,灯泡肯定是需要接收手机的控制的,也需要将当前灯泡的亮灭状态传输给用户的,所以在iot的场景上需要双向传输,所以使用http就不是很合适了。在iot的场景里,iot设备一般只需要上传一些状态值比如说灯泡,只需要上传当前灯泡的开关值,或者接受手机远程控制的开关值,这些开关值不需要大量的数据传输,所以也不需要使用一些现在很臃肿的传输协议。mqtt的底层协议使用的也是tcp协议。总结来说mqtt是一种适合于物联网使用场景的一个轻量级传输协议。

1.2、mqtt中的各种角色

MQTT是基于一种CS架构,就是说有客户端(client)和服务端(server)组成。在真实的案例中客户端有灯泡、手机,服务端就是后台服务器。在使用场景一下用户想通过手机app控制家里的灯泡开关,在mqtt下需要进行下面的流程。首先手机app发起一个指令发送到后台服务器,后台服务器将这个控制指令发送到用户家的灯泡,然后实现灯泡的开或者关。

  • 客户端:手机、智能灯泡、智能插座、智能冰箱等。
  • 服务端:百度智能云、阿里云、自己搭建的私有云等。(备注:在mqtt中服务端称为Broker)

1.3、常见的MQTT协议消息通信流程。


在上面的图片我们可以看到有发布方(Publisher)、订阅方(Subscriber)、服务端(Brober)其中我们已经很熟悉了服务端为Brober。那什么是订阅方和发布方?让我们想象一个场景我们的灯泡灯灭了灯泡想向服务器发送一个灯泡熄灭的状态,所以灯泡想发送数据,那灯泡就是发布方。我们知道灯泡不只需要发送灯泡状态的数据,还需要接收手机app传递过来的控制指令,所以灯泡也是订阅方。所以在iot设备上灯泡可以是一个发布方也可以是一个订阅方。

1.4、主题(Topic)

一台服务器每天都要接收很多设备的数据,但是服务器是怎么知道传递过来的数据是那个设备发过来的?然后需要转给谁?这时候就需要引出来一个概念了,那就是主题(Topic),我们知道设备可以是发布方也可以是订阅方。那么设备在那里订阅和发布?那就是在主题上订阅和发布。比如灯泡名字叫Dev1的灯泡在一个主题为“iot/dev1/user/event”上发布灯泡的状态,一个设备Dev2订阅这个主题。灯泡Dev1往主题“iot/dev1/user/event”上发布消息,Brober接收到消息后会转发给订阅这个主题的设备Dev2,如果这时候设备Dev2如果不在线那么Brober会保存这个消息在队列中,当设备Dev2上线后Brober会将这个消息发送给设备Dev2。

1.2、百度智能云在我们实验中的角色

在我们要进行的实验里,百度智能云在这个实验中的角色就是Brober,我们的硬件设备esp8266开发板当成一个智能灯泡设备,esp8266定时5s上传一次状态到百度云,我们使用MQTT.fx这个客户端模拟手机app发送命令控制灯光的亮和灭。
我们实验现象应该是MQTT.fx每5秒回收到esp8266开发板发送上来的灯泡状态消息。然后我们通过MQTT.fx发送一个命令关闭灯泡,这时候esp8266传递上来的就是灯泡灭的状态。

二、硬件设计

我们这个实验不无硬件外设连接,我们使用nodeMCU开发板进行实验,如果手机关闭灯泡的消息的时候打印一条语句“printf(“led off \n\r”)”当成灯泡关闭的硬件控制,反之打印一条语句“printf(“led on \n\r”)”当成灯泡打开的硬件控制。

三、软件设计

3.1、编程要点

在实验中我们使用IBM的mqtt开源库进行实验,对于使用使用这个开源库主要有如下几个API进行调用。

    //为了tcp连接而初始化的结构体    Network network;//描述mqtt client的结构体MQTTClient client;//初始化tcp连接使用的一些参数NetworkInit(&network);//初始化mqtt client的结构体一些参数,将network和client绑定起来,这样就可以使用network里面的tcp收发函数进行数据的收发。MQTTClientInit(&client, &network, 0, NULL, 0, NULL, 0); //建立tcp连接,用来连接tcp服务器NetworkConnect(&network, CONFIG_MQTT_BROKER, CONFIG_MQTT_PORT);//建立mqtt连接,mqtt连接BroberMQTTConnect(&client, &connectData);//用来订阅一个主题,并注册收到主题消息后的回调函数messageArrivedMQTTSubscribe(&client, CONFIG_MQTT_SUB_TOPIC, CONFIG_DEFAULT_MQTT_SUB_QOS, messageArrived))//用来发布消息,消息结构体为messageMQTTPublish(&client, CONFIG_MQTT_PUB_TOPIC, &message)

3.2、代码分析

esp8266教程:esp8266使用mqtt连接百度智能云相关推荐

  1. 【百度智能云】教程:连接百度ai开放平台api接口并完成语音识别的任务

    前言与介绍 本文章介绍了如何在Pycharm上用python语言简单的对连接百度ai开放平台的语音识别功能api端口的调用,并在代码里实现了现录音识别内容. 平台与相关工具 windows10.Pyc ...

  2. MQTT初体验-百度智能云

    说明: 该文章记录了基于百度智能云MQTT服务器的测试使用过程,方便以后查阅. MQTT协议中文版下载 https://legacy.gitbook.com/book/mcxiaoke/mqtt-cn ...

  3. 图文手把手教程--ESP32 MQTT连接腾讯云物联网平台及OTA固件升级

    本文内容 1)在腾讯云物联网开发平台,新建项目,并在项目下新建设备"light_001". 2)下载腾讯云SDK-esp-qcloud,使用例程led_light,通过" ...

  4. 调用百度智能云 api --新手入门教程

    登录或者注册用户 百度找到官网链接: 点击控制台: 登录上去,没有百度账户的可以先注册: 点击产品服务,找到人工智能,然后点击文字识别(下面的图片是老版的智能云): 点击创建应用 随便填自己的想要的名 ...

  5. 时空系统怎么连接mysql_便捷接入再升级!百度智能云时序时空数据库正式兼容MySQL协议...

    百度智能云时序时空数据库(TSDB)是百度天工智能物联网平台推出的用于存储和管理时间序列数据及地理空间数据的专业化数据库,旨在通过高性能读写和强计算能力的分布式云端数据库服务,为物联网设备监控和数据分 ...

  6. 百度智能云SDK或阿里云SDK通用教程

    1.SDK是什么? SDK 就是 Software Development Kit 的缩写,翻译过来--软件开发工具包.这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档.范例和工 ...

  7. 百度智能云身份证识别API的使用

    前言 系统账号需要进行身份认证的时候,注册用户需要上传本人身份证照片.百度云身份证识别接口可以识别身份证照片并提取身份证上面的信息作为响应返回.如姓名,身份证号等. 一.工作准备 1.注册登录百度智能 ...

  8. 百度智能云天工边云融合物联网平台,助力设备高效上云

    设备上云已成为加速各领域企业生产方式变革的重要路径,在工业和信息化部正式印发的<"十四五"信息化和工业化深度融合发展规划>中,也明确提出要"聚焦高耗能设备.通 ...

  9. 百度智能云一口气发布 14 个新产品,三大视频解决方案,产品最高降价 50%

    产业智能化的浪潮正在加速传统互联网行业的升级,视频行业将成为最大的受益者.4 月 11 日,在 2019ABC INSPIRE 百度云智峰会上,百度副总裁.百度智能云总经理尹世明宣布,"百度 ...

  10. AI替你接电话、老电影变4k画质、基于自研芯片服务器,百度智能云一口气发了20款产品...

    郭一璞 发自 国家会议中心  量子位 报道 | 公众号 QbitAI 20款产品,今年百度云智峰会交出了这样一份成绩单. 有面向大众的实用AI功能,让智能来电秘书帮你接听各种来电,记录来电诉求. 有针 ...

最新文章

  1. 学籍管理系统 c语言流程图,程序设计基础 ——C语言第10章 综合应用案例——学生学籍管理系统...
  2. js weibo api
  3. maven-eclipse 中index.html页面乱码
  4. 中国.NET域名注册量近55万个 稳居全球第三位
  5. Lync在Internet上无法登录问题之一
  6. android gradle abi mips x86,NDK android Error:Expected caller to ensure valid ABI: MIPS
  7. c语言运行VBA,C语言选择题部分模块和VBA.ppt
  8. 客户忠诚度及会员等级划分
  9. WCF揭秘——可靠性会话功能
  10. mysql 查询表注释
  11. STM8L EEPROM DATA数据读写
  12. IBATIS开发指南(夏昕)
  13. VMware Horizon 8安装部署(八)访问测试,成功部署。
  14. 详细讲解电脑怎么录屏 电脑录制视频的方法
  15. matlab 判断鼠标按下_如何让MATLAB控制你的鼠标和键盘
  16. Leetcode77 组合
  17. 为颜值和音质充值:南卡N2S真无线蓝牙耳机评测
  18. 一个屌丝程序员的青春(一三七)
  19. LoadImage函数的用法
  20. 河北工程大学计算机考试试题,河北工程大学计算机组成原理08-09考试题B卷.doc...

热门文章

  1. 如何让百度检索Github博客
  2. DL for Scratch 读书笔记
  3. MATLAB语音信号处理系统GUI
  4. 方波峰峰值和有效值_峰峰值,峰值,平均值,有效值的关系.pdf
  5. 大型网站技术架构读书笔记01—大型网站架构演化史
  6. 印象笔记中可以使用html语言吗,你知道吗,在印象笔记里也能用 Markdown 写作
  7. 易用宝项目记录day5-shiro
  8. 使用PopWindow时距离边界有间隙的解决办法
  9. 示波器同步的调节方法
  10. 通信协议(三)——IIC协议