This commit is contained in:
louzefeng
2024-07-09 18:38:56 +00:00
parent 8bafaef34d
commit bf99793fd0
6071 changed files with 1017944 additions and 0 deletions

View File

@@ -0,0 +1,147 @@
<audio id="audio" title="01 | 入门介绍:如何定义物联网?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/72/18/728b98c97797402581b53499fb437318.mp3"></audio>
你好,我是郭朝斌。
在课程的第一讲,我想跟你讨论一个入门级的问题:怎么定义物联网呢?
看到这个问题,你肯定希望我直接给你一个一针见血的定义,帮你打通认识物联网的任督二脉。
但是我跟你说实话,定义物联网真的不是一件容易的事情。因为物联网行业是一个新兴行业,它的内涵和外延都在发展变化的过程当中。今天是智能家居、智慧城市,明天是车联网、边缘计算,未来还会有更多……新的应用和新的理念还在源源不断地出现。
那么,我们还有办法讲清楚物联网这个概念吗?别着急,我想请你先思考一个问题,说到物联网,你会想到哪些关键词呢?是不是包括这些:**互联网传感器5G云计算MQTT大数据人工智能智能家居**……
其实,只要你搞清楚它们跟物联网的关系,也就知道物联网到底是怎么一回事儿了。
## 1. 物联网和互联网有什么关系?
我先来说说物联网和互联网的关系,因为很多人都对这两个概念“傻傻分不清楚”。
有人说,物联网和互联网没有区别,手机也是一个物品,所以移动互联网就是一个物联网。
这种说法并不准确,因为他没有看到手机的本质。
手机本质上是一个移动化的电脑设备:
- 电脑的鼠标点击,变成了手机的手指触摸;
- 电脑的实体键盘,变成了手机上的虚拟按键;
- 电脑联网要用Wi-Fi或网线手机也可以用Wi-Fi但舍弃了网线支持移动蜂窝网络
- 电脑的摄像头、音箱、麦克风,集成到手机上时都进行了小型化……
这也是为什么主导手机行业发展的企业,和主导电脑行业发展的企业一样,仍然是操作系统厂商和芯片厂商。谷歌就相当于微软,高通就相当于英特尔。 当然,还有同时控制操作系统和芯片的苹果公司,它在手机和电脑行业都很有分量。
所以手机和电脑一样,仍然是**围绕人的需求来设计的设备**。
人是信息的“生产者”,手机为人生产信息提供各种工具。这些信息可能是一篇微信公众号文章,一条语音消息,或者一段抖音短视频。
同时,人也是信息的“消费者”。这些信息的各种媒体形式都是给人浏览、收听和观看的。
所以我说,互联网是连接人,连接人与信息。人和信息的关系就像下面这张图所展示的:
<img src="https://static001.geekbang.org/resource/image/9b/11/9b599f91e0c233d04907f175dbd6bc11.jpg" alt="" title="传统互联网中人和信息的关系">
那么,物联网和互联网相比,最本质的区别是什么呢?答案就是,**设备(物)**成了另一个重要的参与主体。设备跟人一样,也是信息的生产者和消费者。
怎么理解呢?我举一个例子。在智能家居的安防设计中,有一种磁力传感器,它可以监测你家窗户的开关状态。比如,当它发现窗户被打开时,这个信息将传送到云端服务器,然后服务器就会下放指令给监控摄像头,让摄像头拍摄照片、录制视频,并且推送给你。
这个过程中,磁力传感器“生产”了窗户打开这个信息,而监控摄像头和人“消费”了这个信息。这个安防系统就是在你家时刻待命的“电子保安”,跟真人保安有类似的功能。这种情况下,人、信息和设备的关系可以参见下图:
<img src="https://static001.geekbang.org/resource/image/e9/5d/e98f15af3abc831ddf781beafc241c5d.jpg" alt="" title="物联网中人、信息和设备的关系">
看到这里,可能你会说,物联网和互联网确实是两个不同的事物。
其实,这个理解也不够准确。在刚才提到的智能家居场景中,我们可以发现,设备产生的数据,仍然是通过互联网的网络传输到互联网的云服务器上的,而且人仍然是物联网中信息的重要参与者。
所以,物联网和互联网并不是完全割裂的,**物联网是互联网的发展和延伸**。而且,因为接入设备在供电情况、网络环境、功能和数量上的差异,物联网也会出现很多跟传统互联网不一样的技术需求和特性。
## 2.物联网和传感器有什么关系?
在智能家居安防设计的例子中,我们提到了一个很重要的技术,**传感器**。
有人说,物联网就是一个传感器网络,把各种传感器设备接入互联网,就组成了物联网。
这曾经是很流行的想法,有些物联网的书籍,甚至直接把物联网的设备层称为“感知层”。这可能是因为,在物联网发展的初期,传感数据的远程收集是主要的应用领域。比如 MQTT 协议,就是 IBM 在20世纪90年代为了监测偏远地区的石油和天然气管道而开发的。
但是物联网早就不只是通过传感器设备监测数据那么简单了,而是已经发展到了基于信息实现设备联动控制的阶段。比如,我在下班的路上就可以通过手机,提前打开电饭煲开始熬粥;打开热水器,进门前为我准备好热水。
不过有一点不得不说,因为传感器设备一般是计算资源少、网络环境差、电池供电的资源受限设备,所以传感器网络技术,尤其是**无线传感器网络**WSNWireless Sensor Networking技术极大地推动了物联网的发展。
## 3.物联网和5G有什么关系
除了刚才说的无线传感器网络技术,还有一种网络通信技术也对物联网的发展有非常重要的意义,那就是 **5G**
你可能经常在媒体上看到这样的言论“5G时代物联网才会真正落地。”真的是这样吗现在用于物联网的通信技术只是过渡方案吗
我先不着急回答这个问题因为我想先谈谈5G技术本身。
提到5G你可能首先想到的是网速快其实这只是一方面。实际上5G 被分为3个主要应用场景分别对应 eMBB、uRLLC 和 mMTC 3个标准
1. **eMBB** 用于我们日常的手机移动通信,网络传输速率高主要就是指这个标准。
1. **uRLLC** 应用的场景是无人驾驶、远程手术等,所以强调的是极低时延,而且是稳定的时延和速率,这不难理解,如果远程做手术,那肯定不能出现卡顿和忽长忽短的时延。
1. **mMTC** 可以支持大规模设备的连接上网,适合智能门锁、烟感传感器、路灯等低速率、低成本、低功耗的物联网设备。
为物联网场景提供新的想象空间的,其实是 uRLLC 和 mMTC ,但是这两个标准还没有正式发布,真正部署的时间更是不确定。
不过,这并没有影响物联网的落地,原因主要有两个:
1. 像智能门锁等场景可以选择 NB-IoT、LTE-Cat1等已经成熟的蜂窝网络技术
1. 物联网的场景非常多样Wi-Fi、BLE、LoRa等非蜂窝技术一样有用武之地。
这些通信技术我会在下一讲为你介绍。
现在我们可以回答刚才的问题了5G 时代,物联网才会真正落地吗?并不是这样。虽然 5G 中的 uRLLC 和 mMTC 将推动物联网在更多的场景落地,但也有很多场景不需要等到 5G 时代就可以走进现实。
## 4.物联网和云计算有什么关系?
除了5G还有一个经常被提到的概念那就是**云计算**。
云计算厂商都有各自的物联网平台,而且不遗余力地推动着物联网设备厂商和解决方案企业作为合作伙伴加入它们自己的平台。
于是很多人开始担心,云计算厂商会不会主导物联网标准的建立?
实际上,这种担心是多余的。因为云计算厂商可以把控的地方主要是物联网设备的平台接入,还有数据的存储和处理。
平台接入会涉及到网络协议的选择,目前他们主要支持 **MQTT** 等协议。而这些网络协议都是开放的标准,他们很难控制。
对于数据的存储和处理,云计算厂商会提供基于分布式系统的高性能、可伸缩的**大数据**存储产品,还有各种数据处理产品,甚至**人工智能**算法平台等等。虽然这的确会导致设备厂商对云计算厂商有一定的依赖性,但是产品主要还是基于社区主导的开源软件来开发的。
因此,在设备厂商、技术标准组织、开源社区、云计算厂商和网络运营商等多方参与的物联网中,云计算厂商很难主导物联网标准的建立和发展。
## 5.物联网和智能家居有什么关系?
随着云计算的发展,平台对海量数据的处理能力大幅提升。也许你在生活中最直接的感受就是,**智能家居**设备的功能越来越多,响应速度也越来越快。
的确,从日常感知的角度来看,很多人认为,物联网的火热似乎主要体现在智能家居领域。尤其当看到很多知名公司的宣传时,这种感觉会更强烈。
其实,我们想一想那些知名家电品牌,比如西门子、海尔、格力等等,就知道家电向来是个大产业,所以很容易想到智能家居的未来充满前景。
而手机厂商、互联网巨头和创业公司当然也看到了这个机会因此一拥而上使智能家居成为物联网中发展迅猛的行业。这样一来一个正常价格在500元左右的智能音箱在互联网流行的补贴大战下只需要一两百元也不奇怪。
那么,智能家居就是物联网的主要应用场景吗?
其实,物联网不只有智能家居这一个主流应用。我经常以智能家居举例,也只是因为它贴近生活,你可能更容易理解。
除了智能家居,工业制造中的工业物联网应用因为可以直接提高效率、降低人工成本,市场规模逐年增长。尤其大热的**工业4.0**,更是推动了整个产业的发展。另外,还有农业,基于物联网技术,农业正在改变劳动力密集、靠经验等缺点,从而提高产量、解放人力。
## 小结
讨论完上面这些问题,物联网的样子,我们已经看得越来越清楚了:
1. 物联网是互联网的发展和延伸,是设备和人一起作为主体组建的互联网。
1. 物联网不只是通过传感器设备监测数据那么简单,而是已经发展到了基于信息实现设备联动控制的阶段。
1. 5G 通信技术可以推动物联网在更多的场景落地,但对很多场景来说, 5G 不是必需的。
1. 云计算平台提供的标准网络协议接口,还有海量数据存储、处理能力,这些都是物联网的重要基础设施。不过,物联网行业的发展一定是多方共同推进的。
1. 物联网应用不止是智能家居,大家看到了智能家居的前景,但是工业、农业、交通、物流等各个领域同样是物联网的大舞台。
如果你对我在开篇词提到的物联网三大层面还有印象的话,不难发现:
这里讨论的传感器和通信技术5G对应了**设备层**与平台接入有关的MQTT协议对应了**网络层**;云计算的大数据存储、处理,以及智能家居等领域的应用,对应了**应用层**。
正是这三大层面技术的发展,推动了整个物联网的发展,并改变着我们生产和生活的各个领域。
在基础篇接下来的几讲中,我将沿着信息数据流转的路径,依次带你初步了解设备层、网络层和应用层三层相关的一些技术,然后通过智能家居场景的简易物联网系统设计,带你建立对物联网基本框架的认知。
## 思考题
最后,给你留一个思考题。许多互联网巨头都已经看到了智能家居的发展前景,但是它们主要发力的细分市场可能有所不同。在未来的智能家居市场争夺战中,你觉得关键的突破口会是什么呢?智能音箱是你心目中的答案吗?
欢迎你在评论区留言和我交流,也欢迎你将这一讲分享给对物联网感兴趣的朋友,大家一起交流学习。

View File

@@ -0,0 +1,213 @@
<audio id="audio" title="02 | 通信技术:设备接入网络的方式有哪些?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/56/03/5626e4f79fe6d9cb3afa87418c842003.mp3"></audio>
你好,我是郭朝斌。
在上一讲的讨论中,我们得到一个结论,物联网是互联网的发展和延伸,是由设备和人作为主体共同组成的互联网。而在设备、人和信息之间搭建联系的物联网,可以分为设备层、网络层和应用层三个层面。
今天这一讲,我们先来看看物联网数据流的第一站,设备层。
物联网设备和单机设备最大的区别在哪儿呢?就在于它们**接入了网络**,所以这些设备才能将传感器采集的数据(生产信息)上传到云平台,然后根据平台对数据的分析做出反应(消费信息)。
因此,接入网络的技术,也就是通信技术,是你在做物联网设备设计时需要重点关注的。
想一想你的手机,刷票进地铁站会用到**NFC**,追剧会用到**Wi-Fi**或者**4G**,连无线耳机听音乐会用到**蓝牙**。正是因为集成了这么多的通信技术,它才可以满足你不同使用场景下的使用需求。
那么在物联网领域,我们有哪些通信技术可以选择呢?手机上使用的这些技术,可以用于其他物联网设备吗?
当然可以。除了刚才提到的这些智能手机上已经不流行的2G、3G网络技术在某些不需要高速率的物联网场景仍会使用到。另外物联网行业也有一些自己专有的通信技术比如[LoRa](https://www.semtech.com/lora/what-is-lora) 和 [SigFox](https://build.sigfox.com/sigfox)。
当然,设备接入网络不仅可以通过无线通信技术,还可以通过有线通信的方式,比如工厂中广泛应用的 **PLC** Power Line Communication电力载波通信接入技术。但是无线通信无疑是物联网应用的主流。
这一方面是因为有线技术的部署成本很高;另一方面,物联网是亿级数量设备的接入,如果每个设备都需要像古老的座机电话一样,连线接入,那么就对便利性构成了挑战,对网络中继设备来说更是灾难。
在这一讲中,我会介绍几种最重要的无线通信技术的特性。在后面的实战中,我们将基于这些特性来设计产品的通信方式。同时,我也会说一说在实践中需要关注的一些知识点。
## 无线通信技术的4个重要参数
在学习具体的无线通信技术之前我们得先熟悉无线通信技术的4个重要参数
1. 频段
1. 信道
1. 信道带宽
1. 传输速率
你可以把它们作为了解和分析其他通信技术的工具,指导日后的实践。
### 频段
我们先来看频段。无线通信当然用的是电磁波,在实际应用中,电磁波是按照频段来使用的。
频段是指电磁波频率的一个范围,对应到频谱中就像是一段一段切割开。你看“频段”这个名词,是不是很形象?
<img src="https://static001.geekbang.org/resource/image/0a/c0/0af3db9580eaf20523783fa0262067c0.png" alt="" title="整个频谱的频段分布(图片引自光通信百科)">
上面这张图展示了整个[频谱](http://news.moore.ren/industry/113320.htm)的[频段分布](http://www.c-fol.net/baike/content/3/1712.html)。图中的分段基于电磁波不同的特性,而通信技术则需要考虑不同的使用需求和管理,对无线电波做更进一步的分段。
在这个频谱图中Wi-Fi 的频段是2.412GHz-2.484GHz。这是一个**非授权频段**其他的通信技术也可以使用所以在后面你会看到蓝牙技术也基本是这个频率范围。理解了这一点也许你就能明白为什么Wi-Fi 路由器和蓝牙耳机、键鼠,在某些情况下会相互干扰了。
有没有什么办法能解决通信干扰呢?答案是肯定的,其中一种有效的方法是基于信道的跳频技术。
### 信道
说到这,你可能会问:信道是什么?
它是信息通过无线电波传送的具体通道介质。每种通信技术的频段会被划分、规划成多个[信道](https://en.wikipedia.org/wiki/List_of_WLAN_channels)来使用。
比如Wi-Fi 的频段被分为14个信道中国可用的是13个信道信道14排除在外。这里需要注意的是相邻信道的频段是存在重叠的。比如Wi-Fi 的信道 1 频段是2.401GHz2.423GHz,信道 2 频段是2.406GHz2.428GHz。
### 信道带宽
信道频段的最大值和最小值之差就是信道覆盖的范围大小也叫信道带宽。比如Wi-Fi 信道1 的带宽是22MHz它是由2.423GHz减去2.401GHz得到的。
需要注意的是22MHz是信道1的实际带宽而它的有效带宽只有20MHz因为其中有2MHz是**隔离频带**。隔离频带主要是起保护作用的,就像高速公路上的隔离带。
### 传输速率
上高速公路的时候,我们会注意当前路段对车速的要求。而在选择通信技术的时候,传输速率就是我们需要关注的重要指标。它是指数据传输的快慢,单位是比特/秒bit per second简记为bps
不同的传输速率可以支撑不同的应用场景。比如5G 峰值 20Gbps 的传输速率为移动 VR/AR 应用提供了技术可能。在4G时代这种应用就会受到限制我们只能在室内拖根线来感受 VR/AR 的魅力。
传输速率受很多因素的影响,比如信道带宽和频率。一般来说,带宽越大,传输速率就越大,就像路面越宽可以承载的通行车辆越多一样;频率比较高时,电磁环境相对比较干净、干扰少,传输速率会更高,就像道路更平坦自然可以通行更多车辆一样。
另外,为了提高传输速率,越来越多的提高频段利用率的技术也被开发出来并投入使用,比如**正交频分复用**。也许你对这个技术比较陌生,我再举一个更为人熟知的例子好了,**MIMO**Multiple-Input Multiple-Output技术你可能在Wi-Fi路由器上或者手机宣传资料中见到过它它是通过使用多重天线收发信号来提高传输速率的。
好了频段、信道、信道带宽和传输速率这4个无线通信技术的关键概念咱们就讲完了。我再用一张图来表现它们的关系帮你加深一下印象。
<img src="https://static001.geekbang.org/resource/image/98/d1/9868d9f1c42a880d09c06053d437bdd1.jpg" alt="" title="无线通信技术的4个概念">
针对图中的信道个数,我补充说明一下,这里的 12 个信道只是举例。实际应用中,不同的通信技术有不同的信道个数;同一种技术,不同的版本也会对信道做不同的划分。
接下来我们继续学习几种无线通信技术包括Wi-Fi、BLE、2GGPRS、LTE-Cat1&amp;NB-IoT。因为目前家庭和办公空间等局域网中应用最广泛的无线通信技术就是 Wi-Fi 所以咱们就从Wi-Fi学起吧。
## Wi-Fi
Wi-Fi 是 IEEE 802.11 无线网络标准的商品名。所以,支持 Wi-Fi 功能的设备上,都会标注 “兼容 IEEE 802.11b/g/n 2.4GHz” 之类的说明。其中802.11b、802.11g、802.11n 就是 Wi-Fi 的不同版本。
这种版本命名方式当然不够直观,所以 Wi-Fi 联盟从2018年开始推进数字版本号比如Wi-Fi 5、Wi-Fi 6。我在这里放了一张[表格](https://en.wikipedia.org/wiki/Wi-Fi#Versions),展示了新旧版本号的对应关系。
<img src="https://static001.geekbang.org/resource/image/9f/a6/9fcae5d803478e968f9afbdd4586b5a6.jpg" alt="">
没错,你可能也发现了,蓝牙早就这样定义版本号了。数字版本号的好处是,可以让开发人员避免使用错误版本的模组或者芯片,也方便了他们与用户沟通使用中的问题。
Wi-Fi 网络分布广泛,在家里、在办公场所,包括很多公共区域都有覆盖。所以,它自然也成了很多智能设备的选择,尤其是连接电源线、不需要关心功耗的设备,往往优先考虑 Wi-Fi。
不过,实践中有一个事情需要注意,那就是 **Wi-Fi 的配网**
配网失败是Wi-Fi 智能硬件被用户投诉和退货的非常重要的原因。据我了解有厂家使用2016年的微信硬件AirKiss2.0配网退货率达到了15%,是不是非常吓人?
之所以需要“Wi-Fi 配网绑定”这个操作流程,根本原因是,物联网设备不像手机、电脑,没有便利的信息输入手段,也没有完备的信息显示器件。因此,我们无法像在手机上一样,帮设备搜索、连接上 Wi-Fi 热点。相反,我们需要借助其他手段来完成两件事情:
1. Wi-Fi 设备需要连接上路由器Wi-Fi热点或者AP实现数据上传和远程控制即获取到 Wi-Fi 热点的名称(称为 SSID和密码。
1. 获取到 Wi-Fi 设备的 MAC 地址,或者设备生产时预存的信息,并与用户账号一起上传服务器完成绑定。
完成这两步之后,设备才可以联网使用。
### 一键配网技术
万事开头难,当你拿到一个 Wi-Fi 智能设备时,第一件麻烦的事情就是 Wi-Fi 配网绑定,所以很多物联网平台、模组厂家就推出了**一键配网技术**SmartConfig
顾名思义,一键配网技术就是你只要在手机 App 上按一个按键,就可以自动完成配网的一系列操作。
然而愿望很美好现实却很打脸。一度覆盖市面上90% 以上 Wi-Fi 设备的一键配网技术,竟然成了导致配网失败率高的罪魁祸首。这又是为什么呢?
原来,一键配网技术的工作原理,是通过手机或 Wi-Fi 路由器发送 UDP 广播包的形式,将 Wi-Fi 的 SSID 和密码广播出去。Wi-Fi 设备在进入配网模式后,会将接收到的广播包进行解析,从而获取到 Wi-Fi 的 SSID 和密码然后连接上路由器。同样地Wi-Fi 设备连接上路由器后,也会广播自己的 MAC 地址,这样手机 App 就可以接收到设备的 MAC 地址完成绑定。
这个原理看着不复杂,但却有几个容易出错的地方:
1. 很多路由器不支持 UDP 广播,例如 Wi-Fi 放大器或者关闭 UDP 广播的路由器,会导致在发广播包这步就失败了。
1. 目前很多路由器已经支持 2.4GHz 和 5GHz 两个频段Wi-Fi 4之后这两个频段的网络是相互隔离的。手机很可能连接的是 5GHz 频段,那包含 SSID 和密码的广播包也在 5GHz 频段,而目前所有 Wi-Fi 智能设备都只支持 2.4GHz 频段,这就导致无法收到广播包。
1. 2018年之前的 Wi-Fi 产品(比如微信 AirKiss 2.0)存在广播包解析错误的问题,很可能发生解析的密码不正确的情况,导致无法连接路由器。
1. 路由器不支持局域网通信(比如路由器的访客网络),或者空间中有几个 SSID 相同的 Wi-Fi 热点,手机和 Wi-Fi 设备分别在不同的路由器下面,会导致设备即使连接上了路由器,但是手机无法获取设备信息的广播包的情况。
用户路由器或者设备的 Wi-Fi 模组引起的问题很难改变。遇到这类问题时,你可以让用户把手机热点打开,并且把热点的 SSID 和密码设置成与配网的 Wi-Fi 路由器一样的,然后拿到离路由器很远的地方,使用手机的 Wi-Fi 网络配置成功后,再回到路由器的环境下使用。
如果是 2.4GHz 和 5GHz 两个频段的问题,那么可以切换手机的 Wi-Fi 连接到 2.4GHz 的频段后再配置网络。
当然,这些操作的要求不低,很多用户很难独立完成,所以选择其他配网方式或者为一键配网的设备预备其他配网技术是一定要考虑的。小米米家的物联网平台的设备热点配网技术,就是一个值得借鉴的方式。它可以在不增加成本的情况下,保证基本 100% 的成功率。
**设备热点配网技术**是让 Wi-Fi 设备先进入 Wi-Fi AP的模式也就是说由设备创建出一个 Wi-Fi 热点,然后让手机连接到这个热点,接着把路由器 Wi-Fi 的SSID 和密码发送给 Wi-Fi 设备,同时手机也可以直接获取到设备的 MAC 地址。
这种方式的麻烦之处在于,你需要手动输入路由器 Wi-Fi 的密码。在苹果手机上,你还需要进入设置界面,手动选择连接智能设备的 Wi-Fi 热点。
其他 Wi-Fi 配网技术还有零配置配网、蓝牙配网、手机热点配网和路由器配网等技术方式,有兴趣的话,你可以单独再查询了解一下。[下图](https://help.aliyun.com/document_detail/97570.html)展示了各种配网技术中角色之间的关系,供你参考。
<img src="https://static001.geekbang.org/resource/image/de/08/de36ca9d86a5c962d0f84c4e1dd11308.png" alt="" title="各种配网技术中角色之间的关系(图片引自阿里云)">
## BLE
刚才我提到连接电源线、不需要关心功耗的设备往往优先考虑Wi-Fi那么功耗要求严格的设备要怎么办呢
BLE是一个不错的选择。它的频段是非授权的2.400GHz-2.4835GHz采用40个带宽2MHz的通道。
听到BLE你也许会觉得有些陌生。其实它是**Bluetooth Low Energy**的缩写,也叫**低功耗蓝牙**,是对 Bluetooth 4.0 / 4.1 / 4.2 的统称。现在它已经成为低功耗物联网设备的首选,仅仅依靠一颗纽扣电池供电就可以工作数年。
而蓝牙 5 更是针对物联网增加了很多特性,比如 Mesh 组网、更远的通信距离、更快传输速率BLE 4.2 的2倍和更大数据承载量的广播包BLE 4.2 的8倍此外还有厘米级精度的定位功能。
除了这些,蓝牙技术还有一个优势,那就是应用实践非常广泛,是智能手机等设备的标配。因此,无论是从芯片模组的价格考虑,还是从生态的丰富度考虑,它都是电池供电的智能设备的理想选择。
虽然蓝牙 5 有许多很好的特性,但是它还在普及中,目前 BLE 仍然是主流,所以我们的目光还是先回到 BLE 身上吧。
BLE 的数据通信主要基于**广播包**和 **GATT 协议**。如果你对它们还不是很了解,在从事开发工作之前,最好先补充一下这方面的基础知识。我在这里提供了一份[资料](https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt)给你参考。
连接参数的调节对于 BLE 设备的扫描和连接等影响很大。这些参数包括广播间隔、最大连接间隔、最小连接间隔和连接监听时间等,它们都可以在设备的固件开发中进行调整。比如广播间隔会影响扫描的响应速度,也会对设备的功耗有影响,所以需要平衡功耗和响应速度的不同需求,选择一个合适的值。
如果扫描连接体验需要非常流畅迅速你可以选择20ms的间隔但是这会增加设备的功耗减少待机时间如果你能够容忍一定的扫描等待时间那么可以选择 1-2 秒的广播间隔来降低功耗。
另外,如果你在 Android 手机上开发 BLE 相关的应用,还有两点是我想提醒你的。
一是不同品牌 Android 手机的芯片解决方案往往是不同的,它们的蓝牙协议栈实现也存在很大的差异。所以开发者需要针对不同的手机进行充分的测试,保证开发的应用在不同的手机上都可以正常运行。
二是因为基于 BLE 可以进行地理位置定位,所以从 Android 6.0 开始,进行 BLE 开发时需要请求位置权限。这一点经常被忽略,也是需要注意的。
## 2G
在Wi-Fi流行之前智能手机进行数据通信的主要方式是**蜂窝通信技术**,也就是我们常说的**“ x G”**。
2G是相对早期的蜂窝通信技术你可能觉得这个词听起来都已经有些年代感了。不过在一些传输数据量不大的场景中采用 2G 技术的联网设备还有不少,比如路灯控制器、冷链运输监测设备等。
但是,你在新产品的设计中要尽量避免使用 2G 模组,因为 2G 的退网已经不可避免。
联通已经率先推进,移动也开始逐步实施,腾出的频段会用于发展 5G 网络通信。如果新产品仍然采用 2G 模组,未来无网可用时会非常麻烦,甚至在那之前你就会遇到很多因网络引起的产品体验问题。
## LTE-Cat1 &amp; NB-IoT
那么2G 的替代选择是什么呢?从目前国内通信产业的发展看,[LTE-Cat1 和 NB-IoT](http://www.gov.cn/zhengce/zhengceku/2020-05/08/content_5509672.htm) 是你值得关注的选项。NB-IoT 模组的价格已经和 2G 模组基本持平LTE-Cat1 的模组相比要贵一些,但是也要远低于 4G 模组的价格。
LTE-Cat1 有一个独特优势是网络覆盖,它属于 4G 网络的低速类别,可以直接使用我们国家完善的 4G 的网络设施。而NB-IoT 虽然已经发展多年,但是目前网络覆盖仍然不够理想,这也限制了这些年 NB-IoT 的广泛应用。
不过NB-IoT 大概率会成为 5G 的重要组成部分。随着 5G 产业的发展,我相信 NB-IoT 仍然会广泛应用在低速率、广域网络的场景中。
那么LTE-Cat1 和 NB-IoT 分别适合哪些应用场景呢?我们可以根据它们各自的特性来分析。
LTE-Cat1 的带宽是 20MHz上行速率 5Mbps下行速率 10Mbps。它有良好的移动特性功耗比 NB-IoT 大些,但是低于传统的 2G/3G 设备。所以它适合可穿戴设备、ATM机、自助售货机和无人机等场景。这些场景对数据传输速率有一定要求但是又不需要达到 4G 的水平。
NB-IoT 的带宽是 180KHz上行速率 16.9Kbps,下行速率是 26Kbps功耗很低。所以它不适合移动环境但却很适合智能抄表、智能灯杆和烟感报警器等低数据速率的场景。
<img src="https://static001.geekbang.org/resource/image/9f/99/9feab317fdb5yy2048dbbeeb978b0599.jpg" alt="">
我想说到蜂窝网络你最感兴趣的肯定是5G。不过关于5G值得说的东西太多了。所以今天我们先学到这里我会在后续的加餐中跟你详细聊聊5G这个话题。
如果你对前面提到的 LoRa 和 SigFox 技术同样感兴趣,我也很乐意在加餐中跟你分享。
## 小结
现在,我们总结、回顾一下对这一讲的重点内容。
1. 无线通信技术有 4 个重要的参数:频段、信道、带宽和传输速率。当遇到新的无线技术时,你可以把它们作为了解、分析的一个角度,进而更好地指导实践。
1. Wi-Fi 和 BLE 在移动互联网时代应用广泛未来仍是理想的技术选择。连接电源线、不怎么关心功耗的设备往往优先考虑Wi-Fi而依靠电池供电、比较关心功耗的设备则更加适合BLE。
1. 对于Wi-Fi 智能设备来说Wi-Fi 配网绑定是比较麻烦的事情所以很多物联网平台和模组厂家推出了一键配网技术。但是因为其不能保证100%的成功率,设备热点配网技术可以作为备选方案一起提供,甚至也可以作为主选方案。
1. 2G 的退网已是趋势,在实践中可以考虑 LTE-Cat1 和 NB-IoT 两种蜂窝通信技术。对于非移动的、传输数据量很小的设备可以选择 NB-IoT传输数据量更大又不需要达到 4G 能力的设备可以考虑模组越来越成熟的 LTE-Cat1 技术。
总之,物联网场景丰富,设备的工作环境和传输的数据量差别很大,你在应用中要合理地评估和选择通信技术。我画了一张对比图,供你参考。
当然,关于物联网的设备层,你需要了解的远远不止这些。更多核心技术,比如组网技术,等我们到了进阶篇再逐一剖析吧。
<img src="https://static001.geekbang.org/resource/image/a0/19/a074bb163611636443dbdf916281f919.jpg" alt="">
## 思考题
最后,我再给你留一个思考题。
5G 技术已经逐渐走到我们的生活中,而且围绕它的应用场景,行业讨论热烈。除了高速率,我也提到过 5G 还有两个重要的特性,你还记得是什么吗?这些特性的实现原理你了解多少呢?
欢迎在留言区写下你的思考,我们一起交流学习;也欢迎你把这一讲分享给更多的朋友,一起阅读讨论。

View File

@@ -0,0 +1,186 @@
<audio id="audio" title="03 | 网络协议:设备使用什么语言与互联网对话?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/fb/de/fb9a147b654710c5b47d32fa93e01fde.mp3"></audio>
你好,我是郭朝斌。
在上一讲中,我为你介绍了物联网设备常用的几种无线通信技术。通过这些技术联网之后,物联网设备就可以向云平台上报数据了吗?还不可以。
成功传输数据的前提是,通信双方必须使用**同一种“语言”**。这就像你拨通了比尔·盖茨的电话如果说“喂你好”他大概会一头雾水但如果说“Hello!”,他一下就能听懂了。
而物联网设备间沟通的语言,就是**网络协议**。说起网络协议,你可能马上就想到了 HTTP 协议。是的在日常的Web开发中我们总是需要跟它打交道因为 HTTP 协议是互联网的主流网络协议。
类似地应用在互联网中的网络协议还有收发电子邮件的POP3 、SMTP 和 IMAP 协议,以及用于区块链中的 P2P 协议。
那你马上会问了,物联网设备之间的通信,可以直接使用这些协议吗?
## 物联网通信的特点
想要回答这个问题,我们得先来分析一下物联网的网络通信特点。
1. 物联网设备很大可能工作在**不可靠、高延迟的网络环境**中。
比如共享单车,使用 NB-IoT 这样的通信技术本身的通信速率就只有不到几十Kbps要是被人停在城市的角落里信号可能很不稳定。
假设你使用 HTTP 协议,就需要单车先发出连接请求,然后等待服务器的响应(下发开锁指令)。这样一来,受网络通信质量的影响,很可能连接经常中断,而需要单车与服务器交互多次,那用户可能就要等很长时间。
对于这种场景来说不只是HTTP其他跟HTTP一样单向的、同步的网络协议都不是理想的技术方案。
1. 物联网系统中,**设备数量多,<strong><strong>而且**</strong>交互非常复杂</strong>
比如你家里的环境监测,温度、湿度、光照、二氧化碳、甲醛含量……这些都需要不同的设备测量,而且每个房间用到的设备也不同。
如果你让云平台的服务对每个设备分别做权限控制和数据阈值设置,这会非常麻烦。因为当数据的“生产者”和“消费者”直接交互时,要是没有中间角色基于共同的目标协调,双方的耦合度会很大,导致系统很难实现。
这时候,你需要把你家作为一个整体来处理,交互逻辑就会变得简单多了。
1. 设备经常需要**根据实际使用环境做增加、减少等调整**。
比如你用一个设备测量房间的温度,现在这个设备损坏了,你要换一个。你肯定不希望因为设备 ID 这么一个小小的变化,就要去修改判断房屋温度的逻辑代码,这太麻烦了,也不符合软件开发的开闭原则。
这要求系统必须具备可伸缩性(或者说可扩展性),设备的增减不会导致系统逻辑的调整。
正是因为这些特点,物联网系统在选择网络通信的协议时,一般采用**发布-订阅**的通信模式。为什么说发布-订阅模式适合呢?我来解释一下它的设计,你就明白了。
## 发布-订阅模式
发布-订阅模式包含三个角色分别是发布者Publisher、经纪人Broker和订阅者Subscriber它们的关系如下图所示。
<img src="https://static001.geekbang.org/resource/image/b5/22/b597dfbda6f748c9858d021770be7a22.jpg" alt="">
三个角色之间的消息传递,基于一个重要的概念——主题。主题用于消息的过滤(或者说路由),它确定了消息的不同类别。消息传递的过程可以分为三步:
1. **发布者**负责生产数据。发布者发送某个主题的数据给经纪人,发布者不知道订阅者。
1. **订阅者**订阅经纪人管理的某个或者某几个主题。
1. 当**经纪人**接收到某个主题的数据时,将数据发送给这个主题的所有订阅者。
我们举个例子你就理解了。到中午了你有点饿。今天吃什么呢你想了想拿出手机打开外卖App选择了牛二楠家的咖喱牛肉盖饭外加双份肥宅快乐水加冰。
当你发布牛二楠家的订单给外卖订单中心服务器时,隔壁的产品经理小王也在点外卖,他点了猪三排家的红烧排骨盖饭。
外卖订单中心收到这两个订单之后,会把你的订单发送给牛二楠家,把小王的订单发送给猪三排家。
<img src="https://static001.geekbang.org/resource/image/91/b7/91aff5a163b4944bf3481f30102e40b7.jpg" alt="">
相信你也看出来了,你和小王都是“发布者”,牛二楠家和猪三排家就是“订阅者”,而外卖订单中心就是“经纪人”。
当然,你内心可能在祈祷外卖订单中心出个错,把小王那个订单(猪三排家的红烧排骨盖饭)发送到做卤煮的猪三下水家那里,给他的午饭增加一点难忘的体验。
为什么我说发布-订阅模式适合物联网系统呢?因为在物联网场景中,一个传感器数据需要**触发多个服务或者终端执行动作**。
比如红外传感器,当它检测到有人体靠近时,就需要触发一系列动作:通知摄像头拍照,声光报警器执行报警,推送消息给主人的手机等。
怎么满足这种需求呢?我们最好让摄像头、声光报警器和手机都订阅“人体靠近”这个主题消息。当红外传感器被触发时,它发送人体靠近的消息,然后这些设备就能同时收到这个消息,接着完成系统定义的那些动作。这就是发布-订阅模式的工作方式。
另外,发布-订阅模式减少了发布者与订阅者之间的耦合度,所以网络不稳定导致的临时离线就不会影响彼此的工作。它的拓扑结构也使系统更容易扩展,更容易满足动态变化的需求。这些优点都使得发布-订阅模式在物联网应用协议中非常流行。
那么,具体有什么网络协议采用的是发布-订阅通信模式呢MQTT 协议就是其中的佼佼者。
### MQTT
[MQTT](https://mcxiaoke.gitbooks.io/mqtt-cn/content/)MQ Telemetry Transport协议是 IBM 公司在 1999 年开发的轻量级网络协议,它有三个主要特点:
1. **采用二进制的消息内容编码格式**所以二进制数据、JSON和图片等负载内容都可以方便传输。
1. **协议头很紧凑,协议交互也简单**,保证了网络传输流量很小。
1. **支持3种 QoS****Quality of Service服务质量****级别**,便于应用根据不同的场景需求灵活选择。
这里我解释一下什么是QoS。它是指通信双方关于消息传送可靠程度的协商。QoS 0消息只发送一次消息可能丢失QoS 1呢发送方会接收反馈保证消息的送达但是可能消息会重复。QoS 2级别通过发送方和接收方的多次交互保证消息有且只有一次。
现在我们说回MQTT。刚才提到的这三个特点让 MQTT 协议非常适合计算能力有限、网络带宽低、信号不稳定的远程设备,所以它成为了物联网系统事实上的网络协议标准。关于 MQTT 协议的详细内容我还会在进阶篇第8讲为你进一步剖析。
### AMQP
除了 MQTT 协议以外,也有其他采用发布-订阅模式的网络协议,比如 AMQP 协议。
虽然 AMQP 协议拥有庞大的特性集,比较重,不适合计算资源有限、对功耗要求严苛的物联网设备,但是它可以满足后台系统对于**可靠性**和**可扩展性**的要求。因此,它在物联网的平台系统中应用广泛。比如,在分布式系统中应用广泛的 RabbitMQ 消息中间件软件,就是基于 AMQP 实现的。
AMQP 和 MQTT 一样,也是基于 TCP 协议采用二进制消息格式也支持3个 QoS 级别。
顺带说一句现在被广泛使用AMQP 1.0 和 AMQP 0.9.1 这两个版本在设计上有很大的差异。你在查询资料或者应用这两个版本的AMQP协议时一定要注意看版本避免用错。
## 请求-响应模式
刚才我介绍了发布-订阅模式的很多好处,但是凡事都有例外,也有一些物联网应用场景,并不适合使用这种模式。
比如,现在小区里面都有智能快递柜,当你输入取件码后,服务器会向对应的柜门发送开门指令。
在发布-订阅模式下,服务器知道指令发送成功了,但是它无法知道柜门是否真的打开了。这时,你就需要让柜门能够向服务器反馈一下命令的执行结果。
当然,你也可以让服务器订阅一个“柜门关闭”的主题消息,然后等待柜门发布这个消息。但是这样的话就非常繁琐、不够直接。
在这种场景下,另一种通信模式就能派上用场了,那就是**请求-响应**模式。
请求-响应模式有两个角色一个是客户端Client另一个是服务器Server
**客户端**是请求数据或者服务的一方。**服务器**则用来接收客户端的请求,并提供相应的数据或者服务。服务器在收到请求后,会获取数据,对资源数据(比如数据库)进行加工处理,准备好响应,然后返回给客户端。
请求-响应模式是无状态的通信方式,每个完整的请求-响应都是相互独立的。进一步细分的话,它还可以分为同步和异步两种。你可以看下这张图片。
<img src="https://static001.geekbang.org/resource/image/6d/5d/6d3131d39d271c12aee82ddcf4a58a5d.jpg" alt="">
我们还是以外卖来举例。当你拿出手机点好外卖后,牛二楠家的服务员会收到外卖订单,然后通知厨师准备盖饭,同时另一个服务员已经熟练地打好了快乐水。
半个小时后外卖小哥拿着装有你心仪午餐的袋子出现在公司门口然后交到你的手里。他满脸笑容地说闯了2个红绿灯才这么快送到希望你给个好评。
这就是请求-响应模式。你是“客户端”,牛二楠家是“服务器”,你发出“请求”后,等待一段时间,然后外卖小哥将“响应”给到你。流程如下面的图片所示:
<img src="https://static001.geekbang.org/resource/image/16/ab/16aecc7c73a3bee6yyf3aae5897b8bab.jpg" alt="">
### HTTP
有哪些网络协议采用了请求-响应模式呢HTTP 就是典型的代表。HTTP/2 协议还引入了异步请求-响应模式,客户端可以对请求设置不同的优先级,服务器可以根据优先级决定先响应哪个请求。
虽然 HTTP 协议的报文格式非常重,光是报文头就能达到 KB 大小不太适合资源有限的嵌入式设备。但在一些计算资源和网络资源都比较充足的物联网设备上HTTP协议仍然是一个可选项。而且它和现有的 **Web 系统**兼容,可以利用已有的 Web 服务器资源。
### CoAP
那么有没有跟 HTTP 协议类似,但是设计轻量,可以用于资源受限的物联网设备的协议呢?
有的,那就是 CoAPConstrained Application Protocol协议。
跟HTTP协议一样CoAP 协议同样有 GET、POST、PUT、DELETE 等方法和响应状态码,同样使用 URI 而不是 Topic 来标识资源。
比如我们需要访问服务器 iotdemo.com 下面的 bedroom/temp 这个资源,那完整的资源地址是:
```
coap://iotdemo.com:5683/bedroom/temp
```
CoAP 的消息采用二进制格式支持可确认消息和不可确认消息两种QoS级别。可确认消息Confirmable Message与 MQTT 协议的QoS 1类似不可确认消息Non-confirmable Message对应MQTT协议的 QoS 0级别。
另外CoAP 协议基于的传输层协议是 UDP而不是 HTTP 、 MQTT 协议的 TCP协议所以对于设备的**计算资源要求更低**。传感器设备一般只需要上传数据,不用随时接收服务器的控制命令,这都说明 CoAP 协议适合电池供电的传感器设备。
### LwM2M
说完 CoAP我再介绍一下跟它有关 LwM2MLightweight M2M协议。
LwM2M 协议定义在 CoAP 协议之上,不过它在消息传输的基础上更进一步。因为它基于 IPSO IP-base Smart Object对设备模型进行了标准化提供了一组轻量级设备管理和交互接口协议。
LwM2M 协议目前主要的实现是 C 语言的 Wakaama 和 Java 语言的 Leshan相对来说应用还比较少。CoAP协议的应用场景同样适合 LwM2M协议如果你希望在CoAP 协议的基础上更方便地实现**设备的管理**可以考虑LwM2M协议。
## 通信模式的共存
到这里呢,我就讲完了“发布-订阅模式”和“请求-响应模式”的各自特点,以及相应的网络协议。那你可能会问,有没有网络协议可以同时拥有这两种通信模式呢?有这种想法,说明你非常善于独立思考。确实,这样也更能满足实际场景的需求,而且从原理上看,也完全可以实现共存。
现在行业内也意识到了这一点,所以一些网络协议已经纷纷做出了尝试。比如 MQTT 5.0中增加了请求-响应模式的新特性AMQP 1.0版本也定义了请求-响应模式。而 CoAP协议呢在新的初稿版本Draft中也增加了发布-订阅模式特性。
这种网络协议中的通信模式的共存,相比单一模式的设计都大大方便了具体场景中的应用,代表了一种网络协议的发展方向。
## 小结
在这一讲中,我对比了“发布-订阅”和“请求-响应”这两种主流的通信模式,并简单介绍了两种通信模式下的网络协议。
物联网应用是一个复杂的综合性系统,这要求你了解不同网络协议的功能特性和局限,并且为系统的不同部分做出合适的选择。这些选择原则,我总结为下面三点:
1. 物联网设备通常需要运行在网络不太可靠的环境中而且在功耗、体积和计算资源方面也有诸多限制所以我们在设备的开发中可以考虑使用MQTT和CoAP协议。
1. 云平台各服务之间需要快速、可靠地进行消息转发,这种情况可以选择 AMQP 协议。
1. 一些应用需要兼容 Web 系统的 RESTful 架构,比如通过 REST 开放物联网中的资源能力,供其他应用调用,这时 HTTP 和 CoAP 协议是合适的选择。
我在这里再提供一个网络协议的思维导图,供你参考。
<img src="https://static001.geekbang.org/resource/image/ff/81/ff230bbc7d6yy2c7c10e986f7dbe4581.jpg" alt="">
## 思考题
最后,我想给你留个问题。你还知道有哪些协议,适合用在物联网系统中吗?它们又是采用了哪种通信模式呢?
欢迎你在留言区写下你的答案,和我交流一下,也欢迎你将这一课分享给你的朋友,共同交流学习。

View File

@@ -0,0 +1,170 @@
<audio id="audio" title="04 | 数据分析:数据的价值有哪些?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/fe/9f/fe103ef2a5b3d55a7947cbc3194bf49f.mp3"></audio>
你好,我是郭朝斌。
在前两讲,我们了解了物联网设备层的通信技术和网络层的网络协议。设备借助通信技术,能接入网络;而统一的网络协议,保证了云平台能够“看懂”这些上报的数据。
但是,如果只是单纯地采集和存储的话,那么数据就只是数据库中的 0 和 1 ,很难谈得上有什么价值。某种程度上说,物联网系统的价值其实就在于**数据的价值**,而数据的价值则来源于我们对数据的分析和应用。
所以这一讲,我们来到了物联网数据流的第三站,应用层。开始下面的学习之前,你可以假设一下,如果你是物联网平台开发人员,你会怎么有效地分析和应用数据呢?
## 从数据的角度审视物联网
回答这个问题之前,我想先从数据的角度,带你对物联网体系结构再做一次梳理。
你可能有疑惑了,之前我们整理的物联网三大层面,不是也跟数据流向有关吗?是的,但是那三个层面是基于各部分的特性划分的,包含的技术内容更广。
而今天这一讲,我只专注数据这一个维度,对数据从“生产”到“消费”的过程做一个更细化的拆分和整理,得出一个技术体系。通过这个体系,你就能够对数据相关的技术有一个更加清晰的认识,而且学习过程中心里时刻有个宏观视角,不会“迷失”在各种技术的琐碎细节里面。
我先给出这张物联网数据分析的技术体系示意图,然后我会结合这张图片,从下往上分别讲解其中的每一步:
<img src="https://static001.geekbang.org/resource/image/c2/3f/c2dd869e58fe025e8e9faa727bd7c83f.jpg" alt="">
### 第一步:数据源数据采集
数据源数据采集,就是通过各种物联网设备,实现各种数据数字化的任务,同时也可能需要将数据临时存储起来,准备好数据的上传工作。
因为数据类型多种多样,比如我们常说的温度、湿度、甲醛含量,另外还有图像、声音、震动等等,所以采集这些数据的设备也具有明显的**多样性**。
除了传统的**嵌入式系统**涉及的软件和硬件开发外,**传感器**是这一部分需要重点关注的关键元器件。随着物联网的发展,新的应用在不断涌现,比如监测人体心率和血氧饱和度的可穿戴设备,以及在智慧农业中用来测量土壤反射率和植物颜色的光学传感器等等。
传感器是一个具有技术门槛的行业,高度依赖**材料技术**的进步。除了半导体和光纤这些相对传统的材料,现在一些纳米和生物材料的应用也发展很快。
采集完数据后,你就要利用网络将数据传输到云服务器。
### 第二步:数据传输
数据传输,就是把采集的数据快速地、可靠地上报到云平台。
这里的技术难点是实现**高并发**。因为物联网设备的数量巨大,而且它们在时刻不断地产生数据,所以海量的数据对云平台的性能构成了挑战。云平台只有具备高并发的能力,才能有效地、可靠地实现数据的传输。
高并发的实现,需要借助**分布式**的架构设计,同时使用**负载均衡**、**消息队列**和**缓存**等相关技术。我将在进阶篇针对这个话题再展开讲一讲。
### 第三步:数据存储
数据传输完成之后,你要面对问题是**海量数据的存储**。
比如,一辆共享单车一天会产生 1MB 的数据如果按照2000万辆的保有量计算每天就会产生 20TB 的新增数据。而在智慧城市的系统中一个800万像素的摄像头一个小时就能产生3.6GB 的数据。那么一座城市,光是摄像头,一个月的数据量就可以达到数百 PB。
除了数据量大数据的种类也很丰富它们大体上可以分为3类分别需要有不同的存储手段
1. **结构化数据**,比如用户和设备的关系,用户信息、设备参数等。这类数据还是适合**关系型数据库**,那为了应对海量数据,你可以采用**分布式数据库**。另外,物联网中的传感器设备,随时间不断产生新数据。要存储这类数据,你可以选择**时序数据库**,来获得更高的读写和查询性能。
1. **半结构化数据**比如JSON结构的数据日志记录等。这些数据的存储一般采用 **NoSQL 数据库**产品。
1. **非结构化数据**比如视频、音频等数据。它们一般采用文件的形式存储Hadoop 体系中应用广泛的**分布式文件系统 HDFS** 是常用的选项。
关于数据存储的详细内容,我会在进阶篇为你进行剖析。
只有当实现了海量数据的存储,我们也才能为数据的处理打好基础。
### 第四步:数据处理
数据处理阶段,非常考验你对海量数据的处理能力,你需要用到**大数据计算引擎**。大数据的处理,从应用场景划分的话,可以分成两个大类:
<li>
**批处理**,顾名思义,它是对批量的数据进行统一处理的方法。比如我们需要知道一个月里,共享单车的总骑行时长和距离,骑行距离最远的单车等信息,就需要对所有单车的数据做汇总的计算,得出想要的结果。批处理的计算过程可能耗时较长,几分钟、几个小时,甚至几天都有可能。
</li>
<li>
**流处理**,它是对数据流做及时的处理计算。相比批处理,它具有低延时的特点,一般可以达到毫秒甚至微秒的级别。这样可以满足海量数据对于大吞吐量的处理能力的需求。比如温度、湿度数据基于高、低阈值的实时判断,就需要采用流处理的方式。
</li>
这里要说明一下,批处理延时高的主要原因,是大量数据需要从低速的磁盘中进行存取。它追求的目标和流处理一样,还是高效地处理和尽量简单地计算任务开发工作。
关于批处理和流处理的具体应用,我还会在进阶篇中为你进行讲解。
### 第五步:数据应用
数据应用处于整个体系的最顶端,是物联网系统的最终目的。我们关注的核心点是通过数据创造**价值**,而实现的基础是各种**算法**。
接下来,我就围绕价值和算法来讲解一下数据应用。
## 数据如何产生价值呢?
数据产生价值的方法概况来说可以分为4种
1. 可视化
1. 挖掘
1. 预测
1. 控制决策
最直接的方法是**可视化**,也可以称为**图表分析**。
可视化可以非常直观地向人们展示数据的含义。比如共享单车的地理位置,如果给用户一个经纬度坐标,那无异于没有给这个信息;而在地图上以光标的方式显示出来,那用户就可以马上知道这个单车相对于自己的方位和距离。
类似的还有以曲线、柱状图表示数据变化趋势,以饼状图表示百分比数据,用网络图表示的事物关系等等。它们都可以为原始数据,和分析结果数据提供理想的展示手段。
比如我们可以查询共享单车近一年的开锁数据,然后基于这个数据,绘制一张开锁量的趋势曲线图。
<img src="https://static001.geekbang.org/resource/image/6d/01/6df89150f6347ba7aa76ac227eacea01.jpg" alt="">
另外,可视化的各种图表也可以作为我们**人工分析数据**的工具。
首先你需要从数据库或者 HDFS Hadoop的数据存储格式把数据提取到 Excel 表格(或者 CSV 文件)里面;然后你可以在 Excel 软件中,使用数值计算函数得到总和、平均值等统计数值,或者使用数据透视表等功能得到新的统计表格。
除了 Excel我们也可以利用其它图表软件来进行分析比如 [Gephi](https://en.wikipedia.org/wiki/Gephi) 和 [NetMiner](https://en.wikipedia.org/wiki/NetMiner)。
比图表分析更进一步的方法是**挖掘分析**。
我们可以基于各类算法来分析数据的规律和关联关系等。这种方法基于各种现成的模型,或者自定义的模型,可以从数据中提取出人工分析无法看出来的、隐藏着的规律和联系。
比如那个经常被提到的啤酒和尿布的例子,美国沃尔玛超市通过分析销售数据发现啤酒和尿布经常被一起购买,所以调整货架,将啤酒和尿布放在一起来促进销量(有说法认为,这是由于美国年轻的爸爸出门买尿布的时候,经常顺便买几瓶啤酒犒劳自己)。如果不是挖掘出这个隐藏的联系,我们很难凭直觉得出这个结论,这也体现了挖掘分析的价值。
还有一种进阶的方法是**预测分析**。
随着积累的数据和经验越来越多,我们可以用算法来构建预测模型。当新收集的数据输入给模型时,我们就可以预测出未来的状况。
还是以共享单车做例子,当单车连接到网络平台之后,共享单车出现了。走在路上,掏出兜里的手机,你就可以打开一辆单车的锁,自由骑行;到达目的地后,锁上单车,计费马上完成;你还可以在手机上查看这次骑行的花费时间和骑行速度,甚至计算出你“燃烧的卡路里”。
为什么大部分时候,共享单车可以恰巧出现在你需要它的地方呢?
因为共享单车的系统平台有充足的信息,可以分析出城市的热点区域在哪里,并且预测出第二天每个区域的单车需求量。运营人员正是基于这些数据,提前确定在什么时候、什么地点、投放多少辆车。
最后一种方法是**控制决策**。
物联网设备可能具备**执行器**,物联网系统可以基于业务目标控制这些执行器。而控制决策是采集的数据基于算法计算得到的。
比如在农业中,有经验的种植能手会观察日照、土壤等条件,然后确定施肥、灌溉的节奏。那智慧农业呢,就需要在系统中把这种经验转化为**专家系统**。只要获得光照强度、水分、土壤成分等数据,你就可以根据专家系统的计算结果,控制水泵和卷帘等设备。
## 数据分析可以使用的算法有哪些?
挖掘分析、预测分析和控制决策要用到统计分析、机器学习,包括人工智能的各种算法。这些算法分为监督学习和非监督学习两类。
1. **监督学习算法**需要我们像尽心尽责的父母,明确告诉它“什么是正确的”,“什么是错误的”。
1. **非监督学习算法**面对的是“放羊式”父母,需要自己将数据中的“异常值”区分出来。
常见的监督学习算法有**决策树**和 **SVM**支持向量机算法等。决策树类似我上面描述的专家系统SVM 算法是一种分类算法,也可以用于线性和非线性回归问题,比如基于骑行习惯构建用户的画像。
非监督学习算法有**K-means 算法**等。K-means 算法是聚类算法,比如,基于共享单车的使用次数和时间段,我们可以区分出故障车和正常单车。
这里,我没有提到**强化学习**、**半监督学习**等概念,毕竟它们不是这一讲的重点,简单的两句介绍可能让你增加更多疑惑。总之,使用算法的一个原则是,你先要分析数据的**特征**,掌握大体的**倾向**,然后结合你要实现的**目标**,再选择合适的算法。
## 小结
总结一下,这一讲里,我展开介绍了数据应用涉及的分析方法和相关算法。
1. 数据的分析方法可以分为:可视化、挖掘分析、预测分析和控制决策;
1. 具体的分析中会用到统计分析、机器学习和人工智能的各种算法,这些算法大体可以分为监督学习和非监督学习两类。
1. 算法选择的一个重要原则是,先使用一些可视化的工具分析数据的特征,掌握数据的大体倾向,然后结合业务目标或者控制目标,选择合适的算法。
数据分析和应用是物联网系统中数据流的最后一站。通过数据分析,海量的数据为用户带来了巨大的价值。
数据的价值,首先当然是商业价值,比如超市中的电子价签,取代之前的纸质价签,超市的店面运营减少了很大的人力投入,而且提高了促销活动的效率,降低了价格标错的可能。但这不是全部,物联网数据的有效利用还会带来巨大的社会效益。
为了讲清楚数据分析应用的方法我还从数据的角度对物联网系统再次做了一个梳理整理出了物联网系统中数据的技术体系。它可以分为5个部分分别是数据源数据采集、数据传输、数据存储、数据处理和数据应用。
可能你也发现了,物联网的数据技术体系和大数据的体系有很多相似的地方。确实是这样,物联网的数据系统本身也是一个大数据系统,必然会用到很多传统的大数据技术,比如数据存储、数据处理相关的技术。
但是物联网系统也有自身的特点,所以在数据采集上会涉及嵌入式系统和传感器的技术;在数据传输中会用到特殊的网络协议;在数据应用中需要关注控制决策相关的技术。这些是你需要注意区分的地方。
总之,在物联网中,海量的数据将会远远超过当前互联网的数据规模。这必然对数据的存储、读取、分析处理技术提出新的挑战。相关的技术呢,我会在进阶篇中继续做深入的剖析。
这里,我再提供一个物联网数据技术的思维导图,供你参考。
<img src="https://static001.geekbang.org/resource/image/64/93/64a2cba411d24e66e7aeb655aac0f993.jpg" alt="">
## 思考题
最后,给你留个思考题吧。
在这一讲中,我提到了数据处理可分为批处理和流处理,并简单介绍了它们各自的特点。除了课程中的例子,你认为它们还适合哪些场景呢?
欢迎在留言区写一写你的想法,和我交流一下。也欢迎你将这节课分享给你的朋友一起学习。

View File

@@ -0,0 +1,162 @@
<audio id="audio" title="05 | 系统实例:怎样设计一个简易物联网系统?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/5c/ab/5c990a74a1575444f7d297e1ef5122ab.mp3"></audio>
你好,我是郭朝斌。
通过前几讲的学习,你应该已经熟悉了物联网系统的基本框架,并且知道设备层、网络层和应用层大概是怎么回事儿。不过你现在的理解,可能还停留在盲人摸象的阶段,虽然已经可以说出某些局部的特点,但是还没法儿准确地画出整头大象的样子。
假如现在老板给你布置一个任务,让你设计一个物联网系统,你是胸有成竹,还是手足无措呢?为了让你能够拍着胸脯说“保证完成任务”,今天这一讲,我会教你怎么设计一个简易的物联网系统。
那么,我们拿什么项目来练手呢?我想,还是智能家居比较合适。一方面是因为它跟你的生活关系比较密切,你对它的感知比较强;另一方面,你正好可以在这个基础上完成实战训练。
这也是受到扎克伯格的启发。他在2016年时计划自己动手打造一个 Jarvis 系统(《钢铁侠》中的智能助手贾维斯),能够通过语音/文字控制家里的电器。经过近一年的努力,到年底时他基本完成了这个系统,并且写[文章](https://www.facebook.com/notes/mark-zuckerberg/building-jarvis/10154361492931634)描述了具体的工作(如果你打不开,可以看[这篇](https://www.pingwest.com/a/96883))。
课程学完之后,你再邀请朋友来家里玩,就可以展示自己亲自动手完成的一套智能家居设备,而且新的奇思妙想也能够随时动手实现出来。
想象一下,到时候你的房间也可以是一座“未来科技城”,你也可以在朋友圈“晒出”像扎克伯格一样的科技作品,这是不是很酷呢?
<img src="https://static001.geekbang.org/resource/image/59/02/59ac9a929823a69eeb7ccf80231a4a02.jpg" alt="">
## 智能家居的发展阶段
要实现一个酷炫的智能家居项目,你就得知道智能家居现在发展到了什么阶段。如果场景设计太超前了,好高骛远,那么最后根本实现不了;而如果场景设计太落后了,都是人家早就玩剩下的,那么也就不酷了。
从自动化程度的角度分析,智能家居的发展可以分为遥控、场景联动和智能化三个阶段。这是一个智能设备和家居控制系统越来越自主,而人的参与越来越少的过程。
1. **遥控**
你可能马上就想到了电视和空调的遥控器。不过,通过 Wi-Fi、BLE 和 ZigBee 等技术手段联网的设备,还可以有多种多样的遥控方式。智能手机上的 App 和手机系统的语音助手,甚至智能音箱,说到底都是遥控的方式。
相信你也注意到了,在遥控阶段,**每次跟设备的交互都需要人的参与**。比如扎克伯格的智能电灯,就需要他通过[语音](https://www.pingwest.com/a/96883)来控制开关。
<img src="https://static001.geekbang.org/resource/image/c7/de/c7364b92e92e6569728cc1ee6ab6d7de.gif" alt="" title="扎克伯格语音控制电灯开关(引自光谱的报道)">
1. **场景联动**
在场景联动阶段,**人只需要参与一次跟设备的交互就行了**。你只要设置好联动的逻辑,包括触发条件和执行动作,后续的多个联网设备就会根据这个逻辑依次运行,实现一定程度的自动化。
扎克伯格在[介绍](https://www.thesun.co.uk/news/2449965/watch-mark-zuckerbergs-incredible-ai-slave-voiced-by-morgan-freeman-can-shoot-his-outfit-from-a-cannon-and-make-his-family-toast-for-breakfast/)中提到,他家的系统可以识别门口摄像头捕捉的人脸图片,然后根据日程和访客列表判断要不要开门,并且通知他本人。这就是控制系统、摄像头、门锁和线上日程系统的联动所实现的功能。
<img src="https://static001.geekbang.org/resource/image/82/b8/820d51b8cf79c328b5d46c442yy512b8.png" alt="" title="扎克伯格的智能家居系统识别访客引自Margi Murphy的报道">
1. **智能化**
随着智能家居接入的设备越来越多,它们产生的各类数据越来越多,智能家居自然会发展到智能化的阶段。这时候,**人已经<strong><strong>不需要**</strong>再跟设备**<strong>频繁**</strong>交互了</strong>。家居系统会从你之前的交互中和其他设备收集的数据中学习你的行为模式和喜好,然后控制设备自动处理很多事情,包括提供决策建议。
我还是以扎克伯格的智能家居系统为例。如果他去国会参加听证会那天,他的 [T 恤加农炮](https://www.thesun.co.uk/news/2449965/watch-mark-zuckerbergs-incredible-ai-slave-voiced-by-morgan-freeman-can-shoot-his-outfit-from-a-cannon-and-make-his-family-toast-for-breakfast/)不是射出一件灰色 T 恤衫,而是提醒他“今天适合穿西装打领带出席会议”,那就达到智能化水平了。不过,现在的智能水平还做不到这一点。
<img src="https://static001.geekbang.org/resource/image/90/3d/90a8999992fb26787ec5c79037e4e03d.png" alt="" title="扎克伯格的“T恤加农炮”引自Margi Murphy的报道">
所以现在智能家居正处在场景联动阶段,我们已经可以把一些智能产品组合起来,实现一些生活场景的自动化。如果你有兴趣,可以看看[这个视频](https://m.bilibili.com/video/av48582377/),它比较好地体现了智能家居的发展现状。
## 智能家居产品的设计原则
那么在目前这个场景联动的阶段我们要怎么围绕生活场景来设计智能家居产品呢你只要遵守3个原则就行了
<li>
**专注单一领域,解决一个问题。**这样问题容易定义,解决方案涉及的技术也就比较少。比如智能照明,解决电灯的联网和开闭功能就可以了。
</li>
<li>
**闭环**,也就是**同时包含传感器、执行器和控制器**。这样设备自身就可以实现一定程度的自动化。比如根据光照自动调节灯光就是一个完整的闭环。
</li>
<li>
**可以实现**。产品不要包含很难实现的需求或者还没有经过验证的技术,不然要么计划很容易搁浅,要么做到最后发现白白浪费了巨大的资源。
</li>
所以,我建议你做这 4 个产品场景:可以手机控制的智能电灯、可以基于光线自动调节的智能电灯、可以语音控制的智能音箱和可以基于环境温湿度和土壤湿度自动浇水的浇花器。它们在市场上都有成熟的产品代表,证明需求是真实存在且可以实现的。
## 智能家居场景的简易物联网系统
确定了要做的产品场景,你离物联网系统的设计又进了一步。现在你需要对这些场景进行拆解,看看它们包含的具体组件是什么,以及这些组件分别属于物联网系统的什么部分。
我以智能电灯为例,给你做一个拆解。
1. **传感器**
为了实现基于光线强度自动调节电灯打开、关闭和亮度的智能电灯,我们需要使用**光照传感器**。
传感器是物联网中的设备感知环境和自身状态的重要组件。在智能家居中,传感器还用于感知温度、湿度、声音、图像、气体等很多信息。比如,智能音箱中的麦克风是一种声音传感器。
1. **执行器**
我们要实现电灯的打开和关闭,也就是控制电路的通断,这时我们需要**继电器**。
继电器这类执行具体控制动作的组件,被称为执行器。除了电气的开闭,执行器也可以完成机械的动作和加热、制冷等功能。比如扎克伯格的系统中,空调系统、面包机和 T 恤加农炮都是执行器的范畴。
1. **控制器**
那给执行器控制命令的组件呢,就是控制器。在智能电灯中,我们使用**NodeMCU 开发板**来作为控制器。
控制器是执行具体应用逻辑的单元。简单理解的话,可以认为控制器基于传感器的数据,执行应用逻辑,然后驱动执行器做出反应。控制器是一个抽象概念,它可能在网关或者边缘计算设备实现,也可能在云端的应用服务器实现。有些复杂的控制逻辑可能会涉及到大数据处理技术或者机器学习算法。
1. **家庭网关**
光照传感器为了省电,我们采用**BLE**(低功耗蓝牙)技术。不过 BLE 设备需要借助桥接设备才能接入互联网,这个桥接设备被称为**家庭网关**。顺便提一句一般ZigBee设备也需要网关来接入物联网。需要说明的是在实践中家庭网关的功能有可能是其他设备来承担比如电视、台灯等。在我们的设计中可以使用智能音箱来兼做家庭网关。
1. **用户界面**
为了控制智能电灯的亮度和开关,我们需要使用**智能手机**或者**智能音箱**来输入执行的命令,同时通过它们来查看电灯的状态信息、设置联动场景。
这些人与设备,或者人与智能家居系统的交互手段就是用户界面。类似的还有电视屏幕、控制面板等。在未来,可能不会有特定的设备作为用户界面,用户界面将无处不在,就像《钢铁侠》里面的场景,你随时可以说话,显示信息悬浮在空中。目前主要的方式还是使用手机,基于语音或者文字来交互。
当我们按照同样的方法拆解完这4个场景的基本构成组件智能家居系统的架构图也就清晰了。
<img src="https://static001.geekbang.org/resource/image/e0/0f/e02597f22048a440f208c64cfb49bd0f.jpg" alt="">
你可以看到我们最终将会打造 6 个硬件设备,它们分别是:智能电灯、光照传感器、环境温湿度传感器、土壤湿度传感器、自动浇花器和智能音箱。其中,智能音箱也承担家庭网关的功能。
我把这6个硬件需要的元器件整理到下面的表格中供你参考。如有需要你可以根据[这份文档](https://shimo.im/sheets/D3VVPdwcYRhhQRXh/MODOC)自行采购。)
<img src="https://static001.geekbang.org/resource/image/25/77/252bbccb32byyd03a040501275ee5477.jpg" alt="">
## 简易物联网系统的技术架构图
现在,我们把上面设计的智能家居系统的架构,代入到物联网的三层体系结构中,就得到了它的技术架构图。
<img src="https://static001.geekbang.org/resource/image/77/1b/771fc288a1be173c034cdb4e9cfd8a1b.jpg" alt="">
1. **设备层**
传感器、执行器和控制器三个组件相互配合构成完整的设备功能。而在智能家居中通信技术的主流选择是Wi-Fi、BLE低功耗蓝牙等。Wi-Fi适合带电设备BLE适合电池供电的低功耗设备。
1. **网络层**
家庭网关可以让使用BLE技术的设备接入物联网。然后网关通过 MQTT 协议连接云平台,让这些设备可以和云平台通信。
在智能家居应用中为了自动发现设备和服务UPnP 协议和 mDNS协议也经常被使用。在进阶篇第7讲我会详细讲解组网相关协议。
1. **应用层**
之前的课程中我提到过云平台是数据存储和数据分析处理的支撑平台。同时云平台也可以为你的App提供 API 接口,让你可以借助手机远程操控联网设备。
在实战篇,我们将在云平台中,通过 MQTT Broker 来接收温度、湿度等数据,并且开发 Web 服务,通过页面来展示相关数据。
## 小结
接下来,我总结一下这一讲的主要内容。
1. 从自动化程度看,智能家居系统分为遥控、联动控制和智能化三个阶段。目前的智能家居系统已经可以达到场景联动的阶段,而未来需要关注的发展趋势是智能化。
1. 围绕着遥控和联动控制的功能实现我们设计了4 个产品场景,它们分别是:可以手机控制的智能电灯、可以基于光线自动调节的智能电灯、可以语音控制的智能音箱和可以基于环境温湿度和土壤湿度自动浇水的浇花器。
1. 在4个产品场景的实现过程中你需要打造6个硬件设备它们分别是智能电灯、光照传感器、环境温湿度传感器、土壤湿度传感器、自动浇花器和智能音箱兼做家庭网关
1. 通过梳理整个简易智能家居系统,我们可以发现智能家居包括传感器、执行器、控制器、家庭网关和用户界面这几个构成部分,你可以结合我们设计的简易系统来了解各部分的功能。
从简易智能家居系统的设计过程,你应该也可以总结出物联网系统设计的一般过程。<br>
首先,我们需要调查、分析具体领域的知识和发展趋势;<br>
接着,确定我们要试图提供解决方案的应用场景;<br>
然后,设计应用场景中的具体产品,包括产品的功能、使用的通信技术和网络协议等;<br>
最后,我们可以总结解决方案的各个部分,并且与物联网三层体系结构做对应,检视解决方案是否完整、是否合理。
除了以上这些我还想跟你说这一讲提到的树莓派Raspberry Pi开发板、NodeMCU 开发板都是主流的开源硬件。开源硬件的流行对智能硬件的发展有着巨大的推进作用。如果你是一个电子发烧友DIY那么现在你很容易就可以基于开源硬件组合出一套简易的联网设备也许你已经做了类似的尝试。
所以我觉得,如果只是单纯指导你一步步地实现这套系统,那么意义还不够大,也不是我的出发点。我会在后面的章节中结合物联网的具体场景(智能家居)来把物联网的相关技术和体系结构讲解清楚。
我很欣赏一句话,叫**“知行合一”**。当你学习一个新东西的时候,如果只是看别人做、听别人说,那都是输入,并不会很好地内化为自己的东西。所以第一步输入之后,第二步要认真思考,最后你要做输出,把你学习到的东西讲给别人就是一种输出。
而且编程和物联网开发最好的输出方式还是要动手实践。在动手的过程中你可以真正把底层原理和核心知识理解透彻,内化成你自己的知识,从而在工作中更加得心应手。这就是我们要在实战篇达到的目的。
## 思考题
最后,我给你留一个思考题吧。
在简易物联网系统中,我们设计了智能电灯和自动浇花器等应用场景。扎克伯格的实践中也有一些很酷的应用。你还可以为自己的家居环境想到什么场景和应用呢?另外,在本讲中,我拆解了智能电灯的构成组件,你可以使用同样的方法,拆解一下自动浇花器的组件吗?
欢迎在留言区写一写你的奇思妙想,和我一起交流一下。也欢迎你将这个课程分享给你的朋友一起交流学习。