前言


搞智能家居就不得不说到网络通信,因为我们需要通过各种终端去控制我们的智能家居设备,所以网络通信这方面是必备的.而在市面上比较流行的网络通讯协议就是MQTT通信协议.今天我们就简单聊聊如何什么叫MQTT协议,以及基于百度云的MQTT协议使用.

MQTT


MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。逻辑图例如下所示.

通俗的来说,MQTT类似于即时通讯的群聊,里面的用户就是每一个终端,当然了,每一个用户在进入群的时候,就相当于订阅了话题(subscribe) . 用户进入的时候就会被设置为是否可以发言,这个过程就是发布过程(push).MQTT的优点就是上面说到的可靠性,这是很难得的优点,因为很多智能设备所处的网络环境并不是十分的稳定.所以使用MQTT协议来解决这一问题.

另外ESP8266的官方Demo已经对MQTT做了很好的封装,所以我们使用MQTT也是非常方便的.只需要在Demo中修改几个参数就可以了.

这里需要单独说一个 MQTT的概念名称,消息质量等级(Qos),在发送消息的时候需要带上消息质量等级信息.下面我们就简单说一下这个Qos的概念以及等级.

等级 特性
Qos0 发送者只发送一次消息,不进行重试,Broker不会返回确认消息。在Qos0情况下,其他设备可能没有接受到消息,不保证消息是否送达
Qos1 发送者最少发送一次消息,确保消息到达Broker,其他设备需要返回确认消息PUBACK。在Qos1情况下,其他设备可能接受到重复消息,保证消息必然送达.
Qos2 Qos2使用两阶段确认来保证消息的不丢失和不重复。在Qos2情况下,Broker肯定会收到消息,且只收到一次, 保证消息必然送达.

百度智能云


百度云的物接入每个月有 1000000 条免费消息.比较适合入门测试使用.而且后面小范围设备的价格也比较合理,像我买了每一个400 W 条数据,一年也就不到一百块钱而已.而且百度云的物接入没有公钥和私钥各种加密,相对于我这样的小白比较简单.OK,扯了这么多.我们来看一下如何进行基本的配置吧.

  • 首先我们先进入百度云物接入的控制台,然后选择附近的地点,南方就选华南的,北方的就选华北即可.紧接着就是开通即可.如下所示.

  • 紧接着,我们就需要创建一个数据类型的项目了.视图如下所示.

  • 这里选择 数据型 的项目,然后填写完项目名称和描述之后就可以点击完成了.这样我们就创建了一个项目了.

  • 创建完成之后返回到项目列表中,这时候需要我们把项目的几个数据保存下来.主要是连接地址.我们后期主要会用到第一个基于TCP的地址.如下所示.(项目已经删除,请自己尝试创建.)

  • 下面我们就要做的就是类似于注册操作了.但是和普通的注册不同的.这里有四个名词,分别是用户,身份,策略,主题.在创建之前,我们先说说这三者都起了怎样的作用.

物接入用户(thing):简称“用户”,在项目中创建的虚拟用户,每个项目下最多可以创建10000个用户。这也是设备登录的直接账号.

物接入身份(principal):简称“身份”,在项目中创建的虚拟设备的身份,每个设备可以绑定一个身份。每个项目下最多可以创建10000个身份。身份在在创建过程中会生成密钥.由于每个账号需要绑定一个身份,这就造成多个用户设备会使用到同一个身份中的密钥.

物接入策略(policy):简称“策略”,策略中定义了关于特定主题的收发权限,每个身份可以绑定一个策略。每个项目下最多可以创建10000个策略。

MQTT主题(topic):简称“主题”,每个策略都需要指定主题及主题对应的权限。该主题应用于MQTT客户端。物接入允许主题中带一个通配符“#”,例如“temperature/#”就是匹配前缀是temperature/的所有topic;单独的“#”表示匹配所有topic。

上面的四个名称概念可以用下面的图例进行表示.多个用户可以绑定一个身份,也就是可以使用同一个密钥.多个身份可以绑定一个策略.也就是省去了每个身份标签都需要重新创建策略的工作量了.同时.每一个策略都可以添加多个话题.

  • 接下来,我们就从创建策略开始.进入项目之后,点击"策略列表".然后点击"创建策略"按钮.

  • 打开创建策略窗口之后,如下所示.我们可以给当前主题设定权限,并且如果想要绑定多个主题,也可以通过"新增主题"按钮添加更多的主题.填写无误之后就点击确定创建即可.

  • 创建完策略之后,我们进入身份列表创建身份.然后点击创建进入创建身份界面.这时候,我们填写完成身份名称之后,选择"密码认证"即可.

  • 在创建身份的过程中.我们选择我们已经创建好的策略.如下所示.

  • 上一步操作完成之后,就会出现登录所需要的密钥,这个密钥一定要保存好,因为后面是不会出现了.如果忘记了,那么就只能重置密钥了.前期测试阶段你忘了还好说,如果设备上线了.密钥已经写死在内存中了,这时候再去修改就会相当的麻烦了.所以这个一定要注意.

  • 创建密钥完成之后,我们就需要创建用户.我们先进入用户列表.然后点击创建进入创建用户界面.根据实际情况填写内容即可.第二步和第三步分别选择身份和策略.在第三步中,如果身份没有绑定策略,那么系统就会提醒我们去创建一个策略.

  • 经过上面的一顿捣鼓之后,我们就拿到了MQTT所有的服务器数据了.如下所示.我们留着备用即可.

结语


下一篇文章我们就会说一下如何使用官方Demo去开发ESP 8266 ,哈,终于要写到了正题了.这篇文章也就是稍微总结一下,可能百度云官网会发生改变.所以可以参考物接入文档 . 当然了,如果自己有服务器,也可以自行百度如何搭建MQTT服务器.其实也比较简单.就说到了,如果有任何问题,欢迎在评论区留言评论.欢迎指导批评.谢谢大家了.

从头开始做一个智能家居设备:MQTT协议及使用相关推荐

  1. 从头开始做一个智能家居设备:硬件准备

    在一切开始,我们需要先了解都需要使用到什么东西,这正所谓兵马未动粮草先行嘛.主要分为 **电子元器件** 和 **工具** 两个部分. 电子元器件 ESP8266 Node MCU : ESP8266 ...

  2. 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。

    文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...

  3. 安卓手机远程控制DIY智能家居设备(ESP8266)

    一.准备材料: 手机(安卓手机,如果没有请忽略整篇文章). 电脑(windows, 如果没有请忽略整篇文章,此文章不适合大神阅读). DIY智能设备(ESP8266基本上是绕不过去的,如果没有那就买一 ...

  4. zigbee是什么,为什么说它最适合智能家居设备

    Zigbee是什么? 如果您的家里面有使用一款智能家居技术,那么这款技术就很有可能就是用的zigbee协议.Zigbee是一种无线通信协议,是基于IEEE820.15.4标准的低功耗局域网协议.是根据 ...

  5. 小米登录协议分析_小米智能家居设备流量分析及脚本控制

    原标题:小米智能家居设备流量分析及脚本控制 *本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 前言 万物互联的时代即将来临,而现阶段,我们能感触到的,当属智能 ...

  6. win2003 由于可用空间计算失败_幼儿编程启蒙怎么做?智能家居+ai 玩空间是最佳教具...

    以前不识字的人被叫"文盲",而出生在人工智能时代的孩子,如果不懂点编程,可能就要成为"code盲"了.学编程并非为了成为专业的程序员,而是通过学习掌握一定的编程 ...

  7. 如何使用Logitech Harmony遥控器控制智能家居设备

    On some remotes, you may also have home control buttons that you can use with devices like Philips H ...

  8. 智能家居设备可能被利用变成家庭虐待的工具

    前言:智能家居设备可以使我们的生活更加轻松方便,但是诸如智能灯泡和语音控制助手之类的智能家居设备是否也可能成为家庭虐待的工具被使用?智能家居设备被怀疑已变成家庭虐待的武器,这一"另类观点&q ...

  9. 报告称:你的智能家居设备每周可能遭受10000次黑客攻击

    虽然使用智能家居设备可以改善你的生活环境,但它也可能使你的家庭成为一个充满窥探和犯罪活动的人间地狱.英国消费者组织Which发现,配备智能家居设备的房子每周会遭受超过一万次黑客攻击. 与NCC集团和全 ...

最新文章

  1. node 实现blog博客
  2. 谈谈Backlog梳理活动
  3. 异常-java.util.concurrent.TimeoutException: Futures timed out after [100000 milliseconds]
  4. 【01】网页中清除历史浏览记录能不能彻底删除浏览记录?
  5. SQL SERVER 2005 通过链接服务器 访问 ORACLE 的快速设定方法
  6. 【PAT乙级】1091 N-自守数 (15 分)
  7. php中的isset函数,PHP函数isset()只能用于变量
  8. 微信小程序 - 使用npm(第三方包)
  9. 2015-12-15 关于数量个
  10. php防止快速刷新代码(分享)_php防止网站被刷新的方法汇总
  11. geth 转账_eth客户端安装 geth使用 批量转账(一)
  12. hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别
  13. 学习资料:8大行业,30个大数据实践案例分享
  14. 海康威视-海康门禁设备对接SDK-已完成完整封装调用
  15. Python批量将TXT文件转为Excel格式
  16. Windows调试技巧工具
  17. python求方程最小值_python topk()函数求最大和最小值实例
  18. 武魂java_jdk及tomcat的安装
  19. Sequential Recommender Systems: Challenges, Progress and Prospects翻译和笔记
  20. python使用pandas打不开excel文件

热门文章

  1. 99%的人都想要的广告拦截软件
  2. UVA之11549 - Calculator Conundrum
  3. 单位工作制度牌展示_企业各种制度牌汇总
  4. 门禁信息推送不了服务器,十牛校园门禁系统封闭化管理不封闭消息
  5. iOS QQ空间 好友分享
  6. Lambda表达式超详细总结
  7. Android避坑指南,Gson与Kotlin碰撞出一个不安全的操作
  8. 软件技术专业需要学什么?
  9. 2022开年第一个爆款凭什么是山东蓝翔?如何实现破圈传播?
  10. 使用word2vec对微博进行情感分析和分类