大话 IOT 技术(4) -- 答疑篇
文章目录
- 前言
- 手机能与设备直接通信吗
- 多协议能统一用一个吗
- 假设我们统一用http协议
- 假设我们统一用mqtt协议
- bypass服务端和设备不能mqtt直接通信
- 设备必有wifi 和蓝牙功能
- 设备为什么不能自己连接网络
- 配网模式是什么
- 后话
当你迷茫的时候,请点击 物联网目录大纲 快速查看前面的技术文章,相信你总能找到前行的方向
前言
本篇将对前面大话IOT技术系列的一个补充,前面几篇文章中,为了主线剧情简洁流畅,不致于被支线所干扰,有些地方我没有讲的太细,不然很容易掉到另一个坑里面去,同时也会使主线变得杂乱无章,不知所云。
所以本篇将以问答的形式对前面文章中的一些地方进行补充,查漏补缺,本篇就不再拘束,可以天马行空,尽情发挥你的想象,一起探索无尽的可能。
也许,你从中受到启发,顺便引领了一个新的时代……
手机能与设备直接通信吗
问题来自大话 IOT 技术(1) – 架构篇,当时有这么一幅图,手机通过神秘的方式
实现了与家里面的设备进行远程通信。
相信读过文章的朋友们后来都知道了答案:中间多了两个服务端
,而且又是http协议,又是mqtt协议,绕来绕去的,聪明的你不禁要问,不能直接通信
吗?
当然可以直接通信,在我们配网篇中已经有所体现,你猜到了是什么吗?
三,二,一……
答案揭晓:
蓝牙
!
手机可以和设备直接蓝牙通信,在配网的过程中就得利用蓝牙将wifi信息告诉设备,让它内部设置好wifi信息,之后设备就可以成功连接上网了。
Q:为什么实际生产上不用这种方式控制智能家居呢?
A:因为蓝牙属于近距离传输,一般2~5米
,你出个门就控制不了家里的设备了,如果有这样实现的,估计到时候你可能会气的砸手机,这TM什么破智能……而wifi没有距离的限制
,无论你在哪儿,无论你身处何方,只要有网就行,它更能满足人们的远程控制欲。
也许以后会有其他的技术,假设还有绿牙,黄牙……也许它们能突破技术天花板,兼容高效,远距离传输,这个想法也不是不可能哈,那样的话,岂不是简化了很多步骤,让中间商无路可走吗?
很好,让我们尽请期待吧……
不过,我觉得最可能实现还是wifi技术
,现在是5G时代,也许在以后的 8G,9G时代里面,就能实现万物相互通信呢?
正说着,第二个问题接着来到了
多协议能统一用一个吗
该问题出自上面的问题,也源自于架构篇,又是http协议,又是mqtt协议,绕来绕去的。
人生苦短,打工人何苦为难打工人!
Q:我用一个协议行不行
?
A:当然可以!why not?不要急着打我,先容我申辩一下。
那么统一用什么协议好呢?没关系,我们一个一个地试……
假设我们统一用http协议
那真是太棒了,不是吗?http 协议是我们最熟悉的协议
了,哪哪都有它,可谓是程序界的万精油,协议界的大哥大。
首先在物联网的整个链路中,手机到服务端(bypass 服务)
就是通过http请求响应完成的,这条链路前半段可谓是畅通无阻。
那关键就是解决后半段啦,我们可以变一下,简单,安排!
画图容易,实现也不难!
我们只需要在设备上的程序中实现,把设备变成http服务端
,暴露 api接口
给 bypass 调用,bypass 服务想查什么查什么,想改什么改什么,只需要调一个http请求到设备上,设备再进行相应地逻辑处理就完成了,真是太完美了!
上面逻辑有问题吗?没问题啊。
确实没问题,实现起来也是ok的。
那现实中为什么不这样做呢?是我太聪明了?想到了人们想不到的方法?
只能打击一下,你想多了……
归根到底,还是协议间的区别
所致。
了解详情请查看 HTTP 与 MQTT 区别
一辆大车HTTP
,一辆是小车MQTT
。
如果是你,你愿意花几十万买辆大货车开车去买菜
,还是愿意花几千块钱买个小电驴骑着去买菜
?
结果不言而喻,HTTP实在大而全
,发送的http消息丰富多彩,冗余信息量非常之大,试想你在家里看电影,活生生地被家里面的智能家居抢走网
,好脾气的你估计都会骂一声TM的智障设备……
假设我们统一用mqtt协议
这还不简单,安排!
受上面的启发,你可能会直接这么画
但看过架构篇的朋友还是会一眼就看出其中的问题
正确的应该是这样的,我们 mqtt 服务端
怎么可以少呢?
这种形式有点像三国势力,那个mqtt 服务端倒像是汉献帝了。
各方势力上表朝廷,封孙权为吴王,封关羽为汉寿亭侯,刘备自领益州牧……
上图也是类似,手机,bypass,设备
全都是mqtt 客户端,通信全投到 mqtt服务端
,以此来通知 xx 客户端要做什么。
这样可以吗?我觉得也没什么问题。
正如我们架构篇的实现,后半段的链路是一样的,bypass 服务 和设备间的通信确实是围绕mqtt服务端展开的,信息也是以mqtt 消息传递。
所以有出入的在于前半段链路,手机端与bypass服务端
的通信,由原来的 http协议改成了mqtt协议。
那这样会有什么问题呢?
我觉得还是他们协议上的本质区别,mqtt协议消息一般很单一,通常以json格式传输,如果手机端与bypass间的调用都是以application/json方式传输,我是觉得可以这样做,也没有什么不妥。
但事实往往不是理想中的那样饱满,我们的手机可不愿意这样做,它以智能著称,请求,响应多种多样,图片,文档,字节流……
如果把http协议
比作是彩电
,那么mqtt协议
就是个黑白电视机
了。
都进入21世纪了,谁愿意重回那个黑白时代?
说到这里,大家就能清楚为什么要两个协议都用了吧?根本原因还是适合
。
就像是结婚过日子,遇到合适的人才能走的长久,现实中多难找啊!不然就不会有这么多人离婚的新闻了,能找到适合自己的,当然得保护起来,并贯彻下去。
也许有一天,会出来一种新协议,一统 http 与 mqtt,那时候,统一协议的时代才算真正到来!
bypass服务端和设备不能mqtt直接通信
问题出自于大话 IOT 技术(1) – 架构篇,bypass服务端和设备是不能mqtt直接通信的。
所以才会引入mqtt 服务端(broker)
这个是由 mqtt 实现所决定的,mqtt 通信需要有服务端和客户端。
Q:不能mqtt直接通信吗?说的好像很绝对啊
A:当然可以实现mqtt直接通信,那就是bypass服务端与mqtt服务端合二为一
,拥有mqtt 服务端的功能就行了
那你愿意重新开发一套mqtt broker吗?
当然不好了,费时费力不说,可靠性也难保证,还是开源项目香啊!
向所有开源开发者们致敬!正是你们无私的奉献,推动了科技的进步和发展!
设备必有wifi 和蓝牙功能
问题出自大话 IOT 技术(1) – 架构篇 与大话 IOT 技术(2) – 配网篇,我们曾在架构篇中找手机与设备的相同点中对比过,在配网的过程中也有体现
Q:为什么设备一定要有wifi和蓝牙的功能?
A:用处不一样,最终目的
是为了通过 wifi 实现在手机远程控制设备
,也即手机和设备间的通信靠wifi;但是给设备连接网络这第一步得需要手机辅助,在配网的时候就要用蓝牙传递wifi信息,这时就需要蓝牙。
两者缺一不可,缺wifi无法远程通信,缺蓝牙不能帮设备配网
。
也许有硬件技术的伙伴能在没有蓝牙的条件下也能完成设备连接wifi,但是不适用于普通用户,你不可以让用户去烧录程序,去捣腾一些嵌入式开发的活吧?
设备为什么不能自己连接网络
本问题出自 大话 IOT 技术(2) – 配网篇
Q:设备明明有wifi功能,为什么不能自己连接wifi呢?
A:概念的不同
,这就好比你的手机能支持wifi,但是一开始都需要你亲自输入 wifi 账号密码,后面它才能记住并自动重连。
手机就是一台功能强大的设备,而我们普通的设备没有手机的交互页面可以让用户输入wifi账密,那就只能通过其他形式辅助设置账密了。
试想一下,如果设备暴露出一个类似 /set/wifi 的api 接口,那么我们也许就可以省掉蓝牙模块了,直接调用这个设置wifi的接口,多么地简单啊!
又或者以后设备有了操控面板,可以在设备的面板上输入wifi信息设置,这样听上去蛮不错的,也更智能一些,只要成本不是问题,从来就不缺解决方案!
配网模式是什么
问题出自于大话 IOT 技术(2) – 配网篇,一般你给智能家居配网的时候,当你输入完wifi信息后,手机的智能家居app页面就会提示你手动让设备进入配网模式,有的是长按一下设备的某个机械按键,有的是连续按几下。
但无论怎样,都需要手动在设备端触发
。
Q:什么是配网模式?设备内部进入配网模式都在做什么?
A:配网模式只是一个状态而已
,比如你要是喜欢甚至可以用 status=0
来表示,在这个特殊的状态下,需要做到打开蓝牙配对接收wifi消息
,再将设备内部某个配置更新下里面的wifi信息
,然后设备连上网后,向mqtt 服务端发送一条注册的消息。
通俗地理解就是一个状态,在这个状态下面进行一些特殊的操作而已
。
后话
这次就不想写后话了,但还是小小地总结一下。
本文采用问答(Q/A)的形式,补充说明了一下前面几篇文章中一些存疑的知识点,同时加入了天马行空的想象力,对未来的技术充满期待……
技术无处不在,首先不能限制想象,有了好的思路,再找到对应的方法,这就是技术的突破,技术的进步!
相信有一天,技术会变得越来越简单,而那一天,需要我们不断地前行,不断地思考和验证。
我相信,会有那么一天的!