1. 什么是物联网?
物联网(Internet of Things)这个概念读者应该不会陌生。物联网的概念最早于1999年被提出来, 曾被称为继计算机、互联网之后, 世界信息产业发展的第三次浪潮, 到现在已经发展了20余年。
如今, 在日常生活中, 我们已经可以接触到非常多的物联网产品, 例如各种智能家电、智能门锁等, 这些都是物联网技术比较成熟的应用。
物联网最早的定义是: 把所有物品通过射频识别等信息传感设备与互联网连接起来, 实现智能化识别和管理。当然, 物联网发展到今天, 它的定义和范围已经有了扩展与变化, 下面是现代物联网具有的特点。
1.1 物联网也是互联网
物联网, 即物的互联网, 属于互联网的一部分。物联网将互联网的基础设施作为信息传递的载体, 即现代的物联网产品一定是“物”通过某种方式接入了互联网, 而“物”通过互联网上传/下载数据, 以及与人进行交互。
举个通过手机App远程启动汽车的例子, 当用户通过App完成启动操作时, 指令从已接入互联网的手机发送到云端平台, 云端平台找到已接入互联网的车端电脑, 然后下发指令, 车端电脑执行启动命令, 并将执行的结果反馈到云端平台;同时, 用户的这次操作被记录在云端, 用户可以随时从App上查询远程开锁记录历史。
这就是一个典型的物联网场景, 它是属于互联网应用的一种。“物”接入互联网, 数据和信息通过互联网交互, 同时数据和其他互联网应用一样汇聚到了云端。
1.2 物联网的主体是“物”
前面说现代物联网应用是一种互联网应用, 但是物联网应用和传统互联网应用又有一个很大的不同, 那就是传统互联网生产和消费数据的主体是人, 而现代物联网生产和消费数据的主体是物。
在现代物联网的应用场景下, 数据的生产方是“物”, 比如智能设备或者传感器, 数据的消费者往往也是“物”。
在智慧农业的应用中, 孵化室中的温度传感器将孵化室中的温度周期性地上传到控制中心。当温度低于一定阈值时, 中心按照预设的规则远程打开加温设备。在这一场景中, 数据的生产者是温度传感器, 数据的消费者是加温设备, 二者都是“物”, 人并没有直接参与其中。
物联网和传统互联网最大的不同: 数据的生产者和消费者主要是物, 数据内容也是和“物”息息相关的。
1.3 物联网和人工智能
人工智能可谓近年来IT领域最火的词语之一。纵观人工智能的发展路线, 我们可以看到, 人工智能的发展之所以能够突飞猛进, 主要有以下两个原因。
硬件的发展使得深度学习神经网络的学习时间迅速缩短。 在大数据的时代, 获取大量数据的成本变低。 事实上, 第二个原因尤为重要, 神经网络由于其特性, 需要海量的数据进行学习, 可供学习的有效数据量往往决定了最后训练出的神经网络的效果, 甚至算法的重要性都可以排在数据量之后。
而物联网设备, 比如智能家电、可穿戴设备等, 每天都在产生海量的数据, 这些数据经过处理和清洗后, 都可以作为不错的训练数据反哺神经网络。同时, 训练出来的神经网络又可以重新应用到物联网设备中, 进而形成一个良性循环。
图1-1所示为物联网应用人工智能方法进行数据采集-迭代的循环。通过物联网设备采集并训练数据, 在数据中心完成训练后, 将模型应用到物联网设备, 并评估效果进行下一次迭代。
物联网是人工智能落地的一个非常好的应用场景。随着人工智能的迅速发展, 物联网这个同样在很多年前就提出的理论和技术, 也会迎来新的春天。
目前, 互联网数据入口渐渐朝几大巨头(例如阿里、腾讯)汇聚, 规模较小的公司获取数据的代价越来越高, 物联网这块还未完全开发的数据领域就显得尤为重要。
前端设备最终会趋于相同, 出现同质化竞争, 而如何采集和使用好设备产生的海量数据, 才是你是否具有竞争优势的决定性因素。
1.4 物联网的现状与前景
随着5G时代的来临, 物联网的发展将会非常迅速。同时, 物联网方向的新增融资也一直处于上升趋势。下面再从应用场景角度来谈一下物联网行业的发展前景。
物联网的应用场景非常广泛, 包括:
- 智慧城市
- 智慧建筑
- 车联网
- 智慧社区
- 智能家居
- 智慧医疗
- 工业物联网
在不同的场景下, 物联网应用的差异非常大, 终端和网络架构的异构性强, 这意味着在物联网行业存在足够多的细分市场, 这就很难出现一家在市场份额上具有统治力的公司, 同时由于市场够大, 所以能够让足够多的公司存活。这种情况在互联网行业是不常见的, 互联网行业的头部效应非常明显, 市场绝大部分份额往往被头部的两三家公司占据。
物联网模式相对于互联网模式来说更“重”一些。物联网的应用总是伴随着前端设备, 这也就意味着用户的切换成本相对较高, 毕竟拆除设备、重新安装设备比动动手指重新下载一个应用要复杂不少。
这也就意味着, 资本的推动力在物联网行业中相对更弱。如果你取得了先发优势, 那么后来者想光靠资本的力量赶上或者将你挤出市场, 那他付出的代价要比在互联网行业中大得多。
所以说, 物联网行业目前仍然是一片蓝海, 小规模公司在这个行业中也完全有能力和大规模公司同台竞争。在AI和区块链的热度冷却后, 物联网很有可能会成为下一个风口。作为程序员, 在风口来临之前, 提前进行一些知识储备是非常有必要的。
2. 常见的物联网协议
2.1 MQTT协议
MQTT 命令消息有一个固定两字节大小的头部用 于描述消息。第一个头字节中包含的四个值分别是 :
- 消息类型: 共计四位, 用于表示消息的动作, 消息类型包括: CONNECT、PUBLISH 和 SUBSCRIBE
- DUP 标志位: 单独一位, 用于表示该消息是否是重复投递, 无须考虑客户端或者服务端是否正在重新投递该消息
- QoS 标志位: 共计两位, 用于表示消息的服务质量。在 MQTT中, QoS 明确了一条消息是否必须最多投递一次, 还是至少投递一次, 或者仅投递一次
- Retain 标志位: 单独一位, 用于向服务器表示消息在发布给所有当前订阅者之后是否需要保留。 MQTT 代理服务器仅会在 Retain 标志位被设置时保留最后一条消息。
MQTT协议(Message Queue Telemetry Transport, 消息队列遥测传输协议)是IBM的Andy Stanford-Clark和Arcom的Arlen Nipper于1999年为了一个通过卫星网络连接输油管道的项目开发的。为了满足低电量消耗和低网络带宽的需求, MQTT协议在设计之初就包含了以下几个特点:
- 实现简单
- 提供数据传输的QoS
- 轻量、占用带宽低
- 可传输任意类型的数据
- 可保持的会话(Session)
随着多年的发展, MQTT协议的重点不再只是嵌入式系统, 而是更广泛的物联网世界。
简单来说, MQTT协议有以下特性:
- 基于TCP协议的应用层协议
- 采用C/S架构
- 使用订阅/发布模式, 将消息的发送方和接受方解耦
- 提供3种消息的QoS(Quality of Service): 至多一次、最少一次、只有一次
- 收发消息都是异步的, 发送方不需要等待接收方应答
MQTT协议的架构由Broker和连接到Broker的多个Client组成, 如图:
MQTT协议可以为大量的低功率、工作网络环境不可靠的物联网设备提供通信保障。而它在移动互联网领域也大有作为, 很多Android App的推送功能都是基于MQTT协议实现的, 一些IM的实现也是基于MQTT协议的。
2.1 MQTT-SN协议
MQTT-SN(MQTT for Sensor Network)协议是MQTT协议的传感器版本。MQTT协议虽然是轻量的应用层协议, 但是MQTT协议是运行于TCP协议栈之上的, TCP协议对于某些计算能力和电量非常有限的设备来说, 比如传感器, 就不太适用了。
MQTT-SN运行在UDP协议上, 同时保留了MQTT协议的大部分信令和特性, 如订阅和发布等。MQTT-SN协议引入了MQTT-SN网关这一角色, 网关负责把MQTT-SN协议转换为MQTT协议, 并和远端的MQTT Broker进行通信。MQTT-SN协议支持网关的自动发现。MQTT-SN协议的通信模型如图2-2所示。
2.3 CoAP协议
CoAP(Constrained Application Protocol)协议是一种运行在资源比较紧张的设备上的协议。CoAP协议通常也是运行在UDP协议上的。
CoAP协议设计得非常小巧, 最小的数据包只有4个字节。CoAP协议采用C/S架构, 使用类似于HTTP协议的请求-响应的交互模式。设备可以通过类似于coap://192.168.1.150:5683/2ndfloor/temperature的URL来标识一个实体, 并使用类似于HTTP的PUT、GET、POST、DELET请求指令来获取或者修改这个实体的状态。
同时, CoAP提供一种观察模式, 观察者可以通过OBSERVE指令向CoAP服务器指明观察的实体对象。当实体对象的状态发生变化时, 观察者就可以收到实体对象的最新状态, 类似于MQTT协议中的订阅功能。CoAP协议的通信模型如图2-3所示。
2.4 LwM2M协议
LwM2M( Lightweight Machine-To-Machine )协议是由Open Mobile Alliance(OMA)定义的一套适用于物联网的轻量级协议。它使用RESTful接口, 提供设备的接入、管理和通信功能, 也适用于资源比较紧张的设备。LwM2M协议的架构如图2-4所示。
LwM2M协议底层使用CoAP协议传输数据和信令。而在LwM2M协议的架构中, CoAP协议可以运行在UDP或者SMS(短信)之上, 通过DTLS(数据报传输层安全)来实现数据的安全传输。
LwM2M协议架构主要包含3种实体——LwM2M Bootstrap Server、LwM2M Server和LwM2M Client。
LwM2M Bootstrap Server负责引导LwM2M Client注册并接入LwM2M Server, 之后LwM2M Server和LwM2M Client就可以通过协议指定的接口进行交互了。
2.5 HTTP协议
正如我们之前所讲, 物联网也是互联网, HTTP这个在互联网中广泛应用的协议, 在合适的环境下也可以应用到物联网中。
在一些计算和硬件资源比较充沛的设备上, 比如运行安卓操作系统的设备, 完全可以使用HTTP协议上传和下载数据, 就好像在开发移动应用一样。设备也可以使用运行在HTTP协议上的WebSocket主动接收来自服务器的数据。
2.6 LoRaWAN协议
LoRaWAN协议是由LoRa联盟提出并推动的一种低功率广域网协议, 它和我们之前介绍的几种协议有所不同。MQTT协议、CoAP协议都是运行在应用层, 底层使用TCP协议或者UDP协议进行数据传输, 整个协议栈运行在IP网络上。而LoRaWAN协议则是物理层/数据链路层协议, 它解决的是设备如何接入互联网的问题, 并不运行在IP网络上。
LoRa(Long Range)是一种无线通信技术, 它具有使用距离远、功耗低的特点。在上面的场景下, 用户就可以使用LoRaWAN技术进行组网, 在工程设备上安装支持LoRa的模块。
通过LoRa的中继设备将数据发往位于隧道外部的、有互联网接入的LoRa网关, LoRa网关再将数据封装成可以在IP网络中通过TCP协议或者UDP协议传输的数据协议包(比如MQTT协议), 然后发往云端的数据中心。
2.7 NB-IoT协议
NB-IoT(Narrow Band Internet of Things)协议和LoRaWAN协议一样, 是将设备接入互联网的物理层/数据链路层的协议。
与LoRA不同的是, NB-IoT协议构建和运行在蜂窝网络上, 消耗的带宽较低, 可以直接部署到现有的GSM网络或者LTE网络。设备安装支持NB-IoT的芯片和相应的物联网卡, 然后连接到NB-IoT基站就可以接入互联网。而且NB-IoT协议不像LoRaWAN协议那样需要网关进行协议转换, 接入的设备可以直接使用IP网络进行数据传输。
NB-IoT协议相比传统的基站, 增益提高了约20dB, 可以覆盖到地下车库、管道、地下室等之前信号难以覆盖的地方。