讲到物联网,大多数人还是不太清楚物联网具体是什么、运作模式什么样、作用如何。而本文中,笔者就从物联网的三个构成要素出发,向我们介绍什么是物联网。
近年来,物联网在国内乃至全世界都非常火热,它被称为三次信息产业浪潮,将极大地改变人们的生活方式与人类社会的运行。
作为发展不是特别成熟的行业,很多人对于物联网结构还不具备特别清晰的认识。作为物联网行业中摸爬滚打6年的老兵,本次我将用通俗易懂的语言,解开物联网服务的神秘面纱,希望帮助各位童鞋更加深刻的理解物联网服务结构的搭建。
一、引言
简单地说实现物联网时,主要是在服务上解决两个层面的东西:
1. 把设备采集的传感器数据,通过各种网络方式传输到服务器保存在数据库,并对采集的数据进行加工分析,然后执行对应呈现和响应。
2. 基于控制设备的需求,需要能够实现向设备发送相关指令和信息,让设备作出对应响应。
本次我们也将是主要这两个层面进行剖析,帮助大家理解清楚如何构建物联网服务,以及用于实现物联网的重要要素。
结合物联网标准的三层的结构定义,同时考虑实际运用的通俗说法,我们可以将物联网划分为3个构成要素:设备、网关、服务器。
二、要素之设备
大家很容易理解和感知的是——身边的智能手机以及其他智能硬件设备,都是由硬件和软件两部分组成的。
硬件主要是经过ID设计、MD设计,然后基于实体制作的精致实体。软件则是基于使用使用需求制作来控制硬件的。设备开发的角度看问题,就是在最大限度内实现硬件和软件的完美结合。
对于平日里从事应用程序开发的工程师来说,说到设备开发,多少都很感觉茫然,在考虑设备软件开发时,也多少会担心以下问题:
做硬件设备的控制软件需不需要对硬件有深入的了解
开发设备软件需要什么样的专业知识
开发设备软件需要一些不同于应用程序的开发环境吗
毫无疑问,需要!
设备软件就是大家通常听到的“嵌入式程序”,主要就是控制设备中的各种器件,需要较强的专业性以及一些硬件功底。
2.1 连通性给设备带来的变化
在设备层面,物联网会带来哪些变化呢?总结下来就是“连通性”,帮助设备实现与外部系统或者设备的相互连接。
以前由于一些原因,很多设备是不具备连通性的:一些是因为之前没有详细的需求,另外一些是由于设备本身就是用来独立实现功能的。这样的设备一旦出厂就没有再对产品进行升级了,所以研发周期相对较长,对于测试也相对严苛。
赋予连通性后,物联网设备就不仅仅是是一个设备本身份,还提供的是一种与云服务或者智能手机等外部机器组合在一起的服务。这样的情况下,更新设备应用程序变得非常简单,产品发布之后,还可以根据用户反馈,采用OTA方式不断改良设备软件。此外,还可以在云端对大量设备进行汇总和信息整合加工,以应用程序的方式向用户提供有益的信息。
硬件本身的开发成本竞争一直都异常激化,物联网会导致设备开发走向高级化。基于设备开发,将服务整体作为一个生态系统来进行适宜的设计规划,重要性不言而喻。
比如:基于大数据算法,为用户提供吃力设备数据的高级分析服务,或者构建应用程序呈现设备的变化情况,亦或者基于人工智能计划,使设备基于变化情况作出一些正确的反馈动作。
为了最大程度适应物联网带来的连通性变化,设备开发工程师和应用程序开发工程师,需要相互理解对方并达成共识。只有双方各自理解对方领域的程序是如何工作和运行的,才能在应用程序高速开发的牵引下,打造成非常匹配的物联网设备和对应的服务。
2.2 物联网设备的组成要素
物联网设备和传统生活中我们所见的其他设备没有多大的本质区别,主要作用均是通过感知周边环境变化,然后输出对应信息,或者在用户操控下执行某些动作,差异点就在于多了一个物联网网络服务。
微控制器
也就是我们常说的单片机,使用较为广泛的是传统的51系列单片机及STM32,是一个微型控制器芯片。支持编写程序,然后按照对应程序读取各IO口状态信息,或者利用IO口输出各特定电信号。微控制器主要由CPU、内存、外围电路组成。
输入设备
输入设备主要是帮助设备感知周边的数据信息,主要是一些传感器或者按钮等电子元件。比如我们常见的麦克风、鼠标、键盘、温度传感器、重力感应陀螺仪等都属于输入设备,主要是负责采集信号,帮助了解周边现实世界的信息。
输出设备
设备要实现的不仅仅是对周边的环境信息的感知,还需要将感知的信息进行呈现,将状态“可视化”。方便人类获取信息,并进行干预操作。向用户反馈信息,我们常见的输出设备有LED显示屏、蜂鸣器等。
连接网络
物联网一个重要的特性就是连接网络,设备通过网络与服务器进行信息交换,积累数据做出分析决策,同时可以远程控制设备。连接的网络包含了有线网络和无线网络两种方式,根据不同应用需求可以选择不同连接网络方式。有线连接包含以太网、串口通信、USB、等,无线连接包含WIFI、2G/3G/4G/5G、蓝牙、NB等等。
2.3 物联设备连接网络的方式
设备连接网络的方式有两种,一种是设备直连,一种是设备连接网关,网关连接网络。目前发展最快的方式,主要是直连型的方式,尤其是广域网通信方式下。
网关设备与物联网设备相比较,其更加复杂可以处理数据再次发送及数据存储,另外通常情况下,网关设备还支持高级加密数据,可以加大数据安全性。直连型设备无须考虑网关,构建系统更容易,但是需要考虑再次发送数据等。
2.4 传感器机制
利用物理特性的传感器
传感器根据用途而内置不同的检测元件,检测元件的电子特性会随着环境的变化而变化,检测电子特性的变化就可以检测对应信息的变化。
利用几何变异的传感器
传感器根据不同的几何学特性来输出特定信息,例如测距传感器利用与障碍物之间的几何学关系来测算距离,不同距离传感器输出对应的电压值。
2.5 传感器的利用过程
微控制器主要是负责接收传感器输出的信息及控制设备,它具体是如何控制处理电子信号的呢?
首先我们需要先了解一下传感器的电子信号特性。传感器具备具有毫伏级的微信号,并且输出的是具有一定噪声的模拟信号,控制器要完整接收信息就需要进行一系列的信号处理。
传感器采集到信号后,由于信号比较微弱因此需要先放大信号,由于微控制芯片属于数字器件因此需要将模拟信号转为数字信号,最后是转换成具体测量的数值。
2.6 输出设备使用
传感器的作用是采集信息进行分析,处理后同样需要把结果反馈给用户或者环境,那么就需要使用到输出设备。使用输出设备,我们需要注意的输出设备的利用效能,以便将相关结果进行很好的呈现。
三、要素之网关
3.1 网关组成
在物联网系统中,不能连接到互联网的设备就需要使用网关,网关主要就是负责把这些设备连接到互联网那个。网关是指能连接多台设备,并具备直接连接到互联网的功能机器和软件。
3.2 网关的作用
网关扮演的重要作用是采集数据的环节,主要是三种功能:
设备和网关通过各种各样的接口连接,当通过传感器终端连接时,多数情况下是传感器单方面持续向服务器发送数据。根据设备不同,也存在设备申请从外部获取数据时,服务器向设备发送数据的情况,这个时候就需要通过网关申请数据。
2)生成要发送的数据
从设备接收到数据后,就需要转换成能发送给服务器的格式,通常是转化成数值数据或者字符串格式。发送数据的过程中,可能会存在这样的操作,对数据进行整合减少数据量,或者合并发送。
3)把数据发送到服务器
向服务器发送数据的协议取决于服务器端,如果需要发现接收数据,需要实现准备好相关功能设置。
四、要素之服务器
服务器在整个物联网服务结构中,主要扮演者4层作用,即:数据接收、数据处理、存储数据、反控数据发送。
4.1 数据接收
服务器通过约定的协议接收来自设备端的数据,协议包含有HTTP协议、WebSocket、MQTT、COAP等,下面我们将来详细了解一下各个协议。
HTTP、WebSocket都是常见协议我们就不说了,我们来看一下MQTT协议。
MQTT是最近几年出来的协议,物联网领域会将其作为标准协议,MQTT原本是IBM公司开发的协议,现在开源了。
MQTT协议能够实现一对多通信,主要由发布者、订阅者、中介构成。中介承担着转发MQTT通信的服务器作用,发布者和订阅者承担的是客户端的作用。发布者是发送消息的客户端,订阅者是接收消息的客户端。
COAP协议设计的初衷是为了在受约束的网络和终端环境下传输物联网应用数据,所以COAP协议的设计有一些特别的考虑——它的数据包很小,再加上严格的重传机制,使得COAP特别适合在带宽不高,终端能力受限的网络中使用。优点是数据包小、传输灵活、实现简单,具有完善的请求应答模型和重传机制。
COAP和HTTP存在一定的对应关系,二者互译较为简单,这为物联网和互联网的对接提供了很好的标准化基础。COAP的缺点是在业务发现、组播和安全方面的设计仍不完善。
聊完部分协议,还有一个重点的东西我们需要说一下:
数据时经过协议进行交换,但是数据的格式也是这个过程中很重要的一环,典型的就是XML和JSON。从物联网的角度来说,除了设备传感器数据之外,还需要发送例如接收时间、设备信息等一些其他数据,因此使用者就需要将从设备发送过来的数据结构化,我们分别用XML和JSON表示传感器的信息、设备状态、获取数据的时间以及发送数据的设备名称等。
对比二者,我们可以发现XML格式比JSON更容易理解,然而XML字符相比更多,数据量更大,JSON格式则相反。XML和JSON数据究竟使用哪一种更好呢,我们不能直接一概而论,不过JSON数据最小,更适合移动数据通信的情况。
设备传来的数据和Web是有差异的,大多数是传感器数据、语音、图像等数值数据。与文本而言比较而言,这样的数据更适合二进制形式处理。基于物联网服务处理这些格式时,需要把文本数据转换成数值数据和二进制数据,因此需要解析XML和JSON格式数据,以及把解析的结果从文本格式转换到二进制形式。
如果能够直接以二进制形式接收数据,是不是就更够更快速地处理数据呢,对此产生了MessagePack格式,其数据格式与JSON相似,却保留了二进制的形式。人们不方便阅读,但是机器却很容易处理。同时因为MessagePack发送的是二进制数据,所以比起文本形式的JSON更加紧凑。
4.2 数据处理
服务器接收到数据之后,接下来就需要对数据进行处理。说到数据处理,基本上就是常见的那4样:数据分析、数据加工、数据保存以及向设备发送指令。
对于数据的分析与加工,常见的有“批处理”和“流处理”两种典型的处理方式,下面我们一起来看一下这两种处理方式。
批处理
顾名思义批处理就是每隔一段时间处理一批积攒下来的数据,通常情况下是先把数据存入数据库,隔一段时间就从数据库获取数据,执行处理操作。
批处理重点在于在规定时间内处理完成所有的数据,因此数据的数据量越大,就需要越好性能的机器。要处理来自于数量庞大的设备发出来的传感器数据和图像等大型数据,就需要使用分布式处理平台软件,高效处理数据,常见的是Hadoop和Spark。
流处理
指不保存数据,按照到达服务器的顺序对数据依次进行处理,对于实时对数据作出反应,流处理就是一个有效的方法。
批处理是把数据积攒之后进行隔一段时间处理,所以从数据到达至处理完毕会出现时间延迟。因此,流处理这样把到达的数据逐次立即处理的方法就变得比较重要。流处理基本上不会保存数据,使用过的数据直接丢弃,保存处理结果就好。
4.3 数据存储
说到数据存储不得不说的是数据库,数据库的作用主要是存储并灵活运用数据,除此之外还包括从保存的数据中找出与所指定条件相符的数据。数据库从作用上讲,主要是数据的增删改查,下面我们就介绍一下常见的数据库及其特性。
关系数据库
关系数据库是最普通的数据库,其具备一种叫作表格的表格型数据结构,其用途在于存储数据,用户通过SQL语言可以对其执行数据的提取、插入以及删除。关系型数据库不擅长于保存图片、语音等二进制形式的数据。举个例子,如下图可以看看示意的表格结构:
文档型数据库
文档型数据库属于NoSQL数据库的一种,其可以以XML和JSON这种结构化文档的格式保存数据。比如MongoDB就是典型的文档型数据库,它以JSON的格式保存数据,同时能够用JSON指令检索条件。这样一来,在用JSON交换传感器信息时,就能直接对数据进行保存和使用即使增加新的数据条目或者新增设备,也能直接以JSON格式保存数据。非常适合用于无法读出设备数量和数据种类的情况,以及保存传感器等设备的数据。
键值存储
键值存储也属于NoSQL数据库的一种,就是巴一中叫作“值”(value)的数据值和与其一一对应的“键”(key)的集合保存在一起。键值存储可以保存在内存里,也可以保存硬盘里。前者能够实现高速保存,但是软件停止运行时,保存的内容就会消失,因此前者适合当缓存用。后者的速度不如前者,但是即使软件停止运行,数据仍然不会丢失。
4.4 反控数据发送
“反控”主要是指服务器端向设备端发送数据或者指令,控制设备,发送时可以采取接收时的相关协议。下面我们列举一下HTTP、MQTT是如何实现同步异步数据传输的。
通过HTTP发送数据
HTTP是简单的方法,在这个方法里服务器是等待接收HTTP请求的Web服务器,设备申请,服务器下发数据给设备,设备端需要不断地执行轮询连接,来获取看服务器是否有需要下发的数据信息。
采用HTTP方法的主要应用场景:
设备考虑移动传输费用问题(节省)
通过MQTT发送数据
上面我们已经介绍了HTTP方法由设备访问服务器获取数据,这种方法只要客户端没有发出申请,数据就不会被发送。当然使用者可以在服务器端来连接设备,但是新增设备后,服务器如何管理庞大的设备呢?基于此我们考虑MQTT方法,运用其发布/订阅的优点。
实现步骤:
step1:设备作为订阅者,向MQTT中介进行订阅
step2:服务器作为发布者,向MQTT中介进行发布
该种模式下,发送服务器只需要把确定的数据加在主题上发送就行了,服务器和设备之间无需知道对方的地址,只需要知道中介的地址即可。一旦订阅者断开,中介将肩负起断开时的发送,在设备重连后再次发送数据。运用MQTT协议后,服务器反控下发数据到设备就变得简单了很多。
五、总结
相信经过上面的分析总结,无论是刚入门或者还是已经接触过一定物联网的童鞋,都能够将整个物联网的实现架构串联起来了吧;并且知道中间的数据信息怎么流转和处理,各个部分分别是怎样的,扮演什么样的作用。
无论你是物联网硬件设备产品经理,亦或者是物联网云平台及应用产品经理,相信你对于物联网服务架构都有了更加深刻的理解。最后,欢迎同行加我个人微信liu58liu进行交流。