文章目录

    • 前言
    • 抛出问题
    • 现有条件
    • 初步设想
    • HTTP 与 MQTT
    • 中间的服务端
    • 完整的链路
    • 测试的虚拟设备实现
    • 后话

当你迷茫的时候,请点击 物联网目录大纲 快速查看前面的技术文章,相信你总能找到前行的方向

前言

Internet of Things (IoT) 就是物联网,万物互联。

是不是很抽象?听名字就可以劝退很多人了。但我们是勤劳勇敢的技术人,是劝不退的打工人。

所以我想用一个故事,来聊聊物联网技术的实现过程,原来物联网可以这么有趣。

抛出问题

我是一个净化器(后面统称为设备),主人出门在外,在公司上班,留我独守空房。

突然有一天,主人想我了,想问我过的好不好。

世界上最遥远的距离不是天涯海角,而是她只有一部手机,可是我不能接打电话。

但是,没有我的日子,手机显得多么苍白无力。

聪明的朋友们,你们有什么方法能够让我与主人进行通信吗?

接下来让我们一起来讨论一下实现的方案吧。

现有条件

知己知彼,方能百战不殆。

  1. 手机可以上网,蓝牙,安装各种手机app(这不是废话嘛)
  2. 我(净化器)能连接 wifi,蓝牙
  3. 我不能接打电话,不能安装app,所以想给我装微信的朋友们可以退下了(我大概是个废物…)
  4. 我有 mcu,支持简单的程序运行,我还有很多的传感器,采集各种参数给mcu处理
  5. 我是个工作狂人,只要电给够,一天到晚不休息,活到老,干到老(妥妥的打工人)
  6. 还有其他无关紧要的,比如我的颜值…(闭嘴啦)

初步设想

想实现手机与设备的互相通信,那需要找到两者有什么共同点,就想两个人处对象,总得找点共同话题

从上面的条件可以看出,设备和手机都有 wifi/蓝牙的功能。蓝牙只能短距离传输,而 wifi 可以不限距离,天南海北都可以聊。

wifi 就像是一条高速公路,连接着家和远方。让手机与设备有了联通的可能。

光有道路是不够的,主人就算对公路狮吼一声,我这边都是听不到的。因此,我们还需要运输的工具来传递信息,诸如以前的邮差,今天的快递,都是如此。

那来一起认识一下物联网中的最常见的两个运输工具吧,HTTP协议MQTT协议

HTTP 与 MQTT

这就像是两辆车,一个大货车;另一个快递小车/小电驴,能跑而且实用。

想具体了解两者的区别,请自行转入百度。贴心的我会给你个链接:

HTTP 与 MQTT 区别:https://docs.emqx.com/zh/emqx/latest/faq/concept.html

MQTT 协议介绍:https://www.51cto.com/article/670429.html

换你会怎么选?

小孩子才做选择,成年人当然全都要,但是用的地方不一样。

下面来说一下我们的设计吧。

起点:手机
终点:设备
目标:传输消息(你好吗?)

中间的服务端

一般我们手机都会装各种app,例如,微信,支付宝,我们通过 UI 页面点点点,买买买。实际上是通过 UI 交互触发一个个 http请求,例如:登录,查询,下单…… 手机作为一个 客户端,发送的请求发给 服务端处理复杂的业务逻辑,这也是最常见和经典的 C/S(client/server) 模式,实现前后端分离。

好东西当然要借鉴一下啦。我们在 wifi 这条公路中间设置一个服务端吧,就像是以前的驿站,今天的物流公司。给服务端取个好听点的名字,就叫 bypass服务端吧。

于是主人去了公司的楼下的快递柜投入了一封 信件,信件(http请求)很快通过 http快递货车,送到达了 深圳物流公司(bypass服务端),bypass服务端会处理一些复杂的业务逻辑,就像物流公司要负责分区分拣,送货上门。

手机 --http–> bypass服务端 --?–> 设备

太好了,我们完成了这条链路的第一步。接下来是实现物流公司要运送快递到家了,即实现 bypass服务端设备的消息传递。

聪明的你肯定很快就完成了上面的填空。本着全都要的原则,MQTT这辆快递小车也被征用了。

手机 --http–> bypass服务端 --mqtt–> 设备

基本思想是对的,设备因为大脑简单,消息越简单越好,因此我们最后是用 mqtt 协议把消息送到设备上。

但要注意的是,这个链路有个地方是错误的。正确的链路为:

手机 --http–> bypass服务端 --mqtt–> mqtt服务端 --mqtt–> 设备

bypass服务端 和 设备 都是 mqtt客户端,它们都能连接上 mqtt服务端(一般叫 broker),来发布/订阅消息。bypass服务端和设备都是客户端,不能mqtt直接通信的。

啊,又引入了一个 mqtt服务端,又是万恶的 C/S(client/server) 模式。

不过 mqtt服务端 功能比较单一,管理消息用的。类似菜鸟驿站,给到达的快递(消息)分类,存放,进出库。消息根据主题 topic 分类,例如:信件上写着陈红 收,陈绿 收,陈兰 收。那么 陈红,陈绿,陈兰就是topic,菜鸟驿站会把信件归类放置。

mqtt服务端 接受的请求有 发布,订阅

我们给它来个角色扮演

角色饰演者备注
http 协议大货车体积大,臃肿
bypass 服务深圳物流公司服务端
mqtt 协议小车体积小,轻量
mqtt 服务菜鸟驿站服务端

于是就成了这样子:

上面说到,bypass服务端 接收到了 http请求,处理相应业务逻辑,把原来的 请求再包装一下成 mqtt消息,发布给 mqtt服务端设备 就会从 mqtt服务端 去订阅,最终收到了主人的消息,执行对应的操作。

说点人话就是:深圳物流公司信件小车运到了 菜鸟驿站,我关注了 菜鸟驿站,得到通知去取件,最后终于拿到了主人的 信件

啊,原来是问我在家过得怎么样。

主人对我真的太好了,上班都在关心我,我真想给她生猴子……

完整的链路

别光顾着感动,还没有完呢,主人问你好不好,你还没回答啊

你不回答你是算怎么回事?

你生气了吗?你挂了吗?还是你睡着了?

那现在链路要反过来了

起点:设备
终点:手机
目标:传输消息(我很好!生猴子)

那还不简单,喏,反过来吧:

手机 <–http response-- bypass服务端 <–mqtt-- mqtt服务端 <–mqtt-- 设备

我们来解读一下,

发布mqtt消息:设备写了一封 信件(mqtt消息),报告了当前的状态参数,骑上我心爱的小摩托(mqtt),把信件用送到附近的菜鸟驿站(mqtt服务端)

订阅mqtt消息深圳物流站(bypass服务端)也关注了菜鸟驿站的动态,派出 快递小车(mqtt)拿到 信件(mqtt消息),封装成http响应返回到手机端,手机页面就刷新为设备最新的状态信息。

这样,从手机端发出请求,到接收到设备的状态信息,就完成了手机与设备的一次互动。

测试的虚拟设备实现

在测试过程中,有台虚拟设备是很有必要的,因为测试过程中不可避免地要进行各种场景的测试,如果用真实设备来测,一则需要成本,另外不一定能得到特定或极端的参数,因为会有现实条件的限制和影响。

虚拟设备只是一个程序跑着,里面模拟出各种场景的mock参数显示即可,在处理不同的方法时同样实时改变mock参数,与真实的操作无异。

链路为:

手机 --http–> bypass服务端 --mqtt–> mqtt服务端 --mqtt–> 模拟设备(python 程序 + mock 数据)

注:

  1. 手机只能 http 请求 bypass服务端,收到http响应数据并作页面更新
  2. bypass服务端 和 模拟设备 都是mqtt 客户端,都是通过 mqtt 协议向 mqtt服务端发布和订阅消息

bypass 服务和mqtt服务部署在云服务器上,这就是我们常说的云。

后话

本文我们用故事的形式,讲解物联网的由来,设计思路和实现。

真实的场景也是大致如此,只是再加上更多业务处理逻辑,消息参数的具体封装等等细枝末节的实现。但是这些都不是今天要关注的,我们只要掌握了主体,有了主体思路,实现不过举手之劳而已,无非是些精细活。

阅读源代码也是如此,打蛇打七寸,读文章要抓主旨,看代码要抓主架构,这样才不会在茫茫的代码海里迷路。

下期我们会从代码的角度上再讲讲一些具体的实现,配网,MQTT相关的知识,内容会越来越硬核哦,尽请期待吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95625.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95625.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95625.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【wpf】WPF 自定义控件绑定数据对象的最佳实践

WPF 自定义控件绑定数据对象的最佳实践&#xff1a;以 ImageView 为例 在 WPF 中开发自定义控件时&#xff0c;如何优雅地绑定数据对象&#xff0c;是一个经常遇到的问题。最近在实现一个自定义的 ImageView 控件时&#xff0c;我遇到了一个典型场景&#xff1a; 控件内部需要使…

[Dify 专栏] 如何通过 Prompt 在 Dify 中模拟 Persona:即便没有专属配置,也能让 AI 扮演角色

在 AI 应用开发中,“Persona(角色扮演)”常被视为塑造 AI 个性与专业边界的重要手段。然而,许多开发者在使用 Dify 时会疑惑:为什么我在 Chat 应用 / Agent 应用 / Workflow 里都找不到所谓的 Persona 配置项? 答案是:Dify 平台目前并没有内建的 Persona 配置入口。角色…

解决双向循环链表中对存储数据进行奇偶重排输出问题

1. 概念 对链表而言,双向均可遍历是最方便的,另外首尾相连循环遍历也可大大增加链表操作的便捷性。因此,双向循环链表,是在实际运用中是最常见的链表形态。 2. 基本操作 与普通的链表完全一致,双向循环链表虽然指针较多,但逻辑是完全一样。基本的操作包括: 节点设计 初…

Kubernetes集群升级与etcd备份恢复指南

目录 Kubernetes etcd备份恢复 集群管理命令 环境变量 查看etcd版本 查看etcd集群节点信息 查看集群健康状态 查看告警事件 添加成员(单节点部署的etcd无法直接扩容)&#xff08;不用做&#xff09; 更新成员 删除成员 数据库操作命令 增加(put) 查询(get) 删除(…

【LeetCode热题100道笔记】旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]…

SpringBoot【集成p6spy】使用p6spy-spring-boot-starter集成p6spy监控数据库(配置方法举例)

使用p6spy-spring-boot-starter集成p6spy监控数据库1.简单说明2.核心依赖3.主要配置4.简单测试5.其他配置1.简单说明 p6spy 类似于 druid 可以拦截 SQL 可以用于项目调试&#xff0c;直接引入 p6spy 的博文已经很多了&#xff0c;这里主要是介绍一下 springboot 使用 p6spy-sp…

扩散模型的优化过程,主要的公式推导,主要是熟悉一下整体的理论框架

核心思想与定义 扩散模型的核心思想是&#xff1a;学习一个去噪过程&#xff0c;以逆转一个固定的加噪过程。前向过程&#xff08;固定&#xff09;&#xff1a; 定义一个马尔可夫链&#xff0c;逐步向数据 x0∼q(x0)\mathbf{x}_0 \sim q(\mathbf{x}_0)x0​∼q(x0​) 添加高斯噪…

数字签名、数字证书、数字信封的概念与区别

要理解数字签名、数字证书、数字信封&#xff0c;核心是抓住它们各自的核心目标 —— 分别解决 “身份真实性与内容完整性”“公钥可信度”“数据机密性” 问题&#xff0c;且三者都基于 “非对称加密”&#xff08;一对公钥、私钥&#xff0c;公钥公开、私钥保密&#xff0c;用…

Day35 网络协议与数据封装

day35 网络协议与数据封装 数据封装与协议结构 以太网MAC帧格式数据封装与传输流程 数据在传输过程中&#xff0c;从上层逐层封装到底层&#xff0c;最终通过物理介质发送。封装与传输的具体流程如下&#xff1a; 封装过程&#xff08;从IP层到物理层&#xff09; IP层&#xf…

Deeplizard深度学习课程(七)—— 神经网络实验

前言我们正在利用pytorch实现CNN。主要分为四个小部分&#xff1a;数据预处理、神经网络pytorch设计、训练神经网络 和 神经网络实验。在之前的章节中&#xff0c;我们已经完成了整个CNN框架的设计、训练与简单分析&#xff0c;本节将更进一步讨论神经网络处理过程中的细节问题…

STM32实践项目(激光炮台)

刚开始设想做一个上半部分可以上下180移动,下半部分底座360移动的激光炮台。于是便开始了实践。 所需材料清单: 序号 名称 数量 备注说明 1 面包板(Breadboard) 2 用于电路搭建和模块连接 2 杜邦线(公对公、公对母等) 若干 建议准备 30~50 根,方便连接 3 MB-102 电源模块…

不止是夹住,更是“感知”:Contactile GAL2触觉型夹爪实现自适应抓取

近日&#xff0c;专注于触觉传感与智能抓取技术的Contactile推出全新Contactile 触觉型夹爪 GAL2&#xff0c;这款集成先进传感技术的双指夹爪&#xff0c;凭借实时触觉反馈能力&#xff0c;为多行业智能抓取场景带来突破性解决方案。 Contactile 触觉型夹爪GAL2是一款多功能即…

Grafana - 监控磁盘使用率Variables使用

1 查询prometheus2 编辑grafana dashboard 2.1 配置变量2.2 配置多选2.3 配置legend2.4 优化显示 1 查询prometheus 指标名称描述node_filesystem_size_bytes文件系统总容量node_filesystem_avail_bytes用户可用空间node_filesystem_files_free剩余inode数量比如我们想看/目…

WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析10

上一篇&#xff1a;WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9 如果有错误欢迎指正批评&#xff0c;在此只作为科普和参考。 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\iphlpapi.h 文章目录GetNetworkParams&#xff1a…

算法 --- 分治(归并)

分治&#xff08;归并&#xff09; 分治&#xff08;特别是归并&#xff09;算法适用于解决“整体求解依赖于子问题合并”且子问题相互独立的题目&#xff0c;其典型特征是能将大规模数据分解、递归求解&#xff0c;然后通过合并操作&#xff08;这正是归并排序中‘归并’的精…

【程序人生】有梦想就能了不起,就怕你没梦想

梦想不是遥不可及的星辰&#xff0c;而是需要我们用脚步丈量的路途两年前的一个夏日&#xff0c;我在日记本上郑重地写下&#xff1a;"我要掌握Web开发&#xff0c;能够独立构建一个完整的Web应用。"那天是2023年6月8日&#xff0c;当时的我连Java和JavaScript都分不…

前端基础(四十二):非固定高度的容器实现折叠面板效果

效果展示源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

发票、收据合并 PDF 小程序,报销上传 3 秒搞定

每到报销、报税、财务整理时&#xff0c;手里是不是总有一堆格式不一的票据&#xff1a; 聊天记录里的电子发票邮件附件中的 PDF 发票手机相册里的报销收据甚至还有零散的纸质票据扫描件 要上传或交给财务前&#xff0c;还得一个个整理、转换、排版&#xff0c;既耗时又容易出…

GitHub每日最火火火项目(9.4)

1. bytebot-ai / bytebot 项目名称&#xff1a;bytebot项目介绍&#xff1a;基于 TypeScript 开发&#xff0c;是一款自托管的 AI 桌面智能体&#xff0c;能通过自然语言命令自动化执行计算机任务&#xff0c;运行在容器化的 Linux 桌面环境中。它借助自然语言处理和 AI 技术&a…

MMORPG 游戏战斗系统架构

&#x1f30c; MMORPG 游戏战斗系统架构 引用&#xff1a; 游戏服务器同步技术解析&#xff08;C&#xff09;MMORPG移动同步与反外挂 虽然我已离开游戏行业&#xff0c;转而与几位成功的商人共同创业&#xff0c;投身于商用机器人领域&#xff0c;但坦诚地说&#xff0c;游戏…