物联网 (IoT) 推动嵌入式控制向前所未有的智能水平发展。对于过去独立使用设备之处,物联网将它们集成至一个由多个子系统组成的系统中。这种方式令设备能够相互协作并与其他服务进行交互,从而提供更出色的性能、响应能力和正常运行时间。
对于应用涉及到的所有物联网设备提供的数据流,用户可以利用云技术的强大计算能力,让机器学习、数据挖掘和其他技术对这些数据流进行处理。同时,这些物联网设备也无需专门针对应用进行设计。基于云的系统可以利用 Spark 和 Hadoop 等数据整理技术对不同来源的实时信息和历史信息进行整合,可以实现跨多个来源的关联作业,同时在实现过程中能够获得有价值的信息。虽然物联网具备一定的处理能力,但也不可避免可能会遇到各种复杂情况。
物联网应用交付的一个关键问题在于每个解决方案组成部分的多样性。物联网应用需要获取来自不同类型传感器的读数,例如温度、运动和空气质量。即使对于相同类型的传感器读数,数据也可能采集自不同制造商提供的设备,或者来自非物联网设计的旧硬件。
以监控酒店内每个房间内温度的物联网项目为示例。每个房间可以有三个传感器,而且每个传感器都能监控温度。靠门的传感器可以将其温度传感器作为火警报警器模块的一部分,另一个靠近床的传感器可以与室内空调控制相关联,而浴室中的传感器可以作为物联网升级部分的专用装置安装。
对于从每种类型的设备获得读数的软件,其需要考虑每个传感器的校准方法及获得数据的方式。某些设备可以依据超出编程阈值的条件变化或通过基于云的应用按需定期发送数据。同时,它们可能分别使用不同的网络连接实现数据中继 – 有的使用有线网络,而有的利用蓝牙或 Zigbee 等无线网络。此时,该应用需要考虑这种可变化性。但问题远不止这些。
功耗是许多物联网设备的主要课题。保持较长电池使用寿命的最常用方法是尽可能减少无线通信及核心微处理器等高功耗系统的活动。这些子系统在系统生命周期的大部分时间内都保持低功耗睡眠状态。它们会在短时间内醒来,并在再次睡眠前处理任务。结果实现了低占空比。也许只有不到系统生命周期 1% 的时间是处于完全清醒的高功耗状态。在剩余 99% 的时间内,只需对维持系统状态所需的系统(例如实时时钟)进行供电。采用这样的设计,物联网节点可以在一次电池充电后使用数年。
现在,许多微控制器 (MCU) 都集成了硬件状态机。这样一来,可以通过实时时钟触发来定期唤醒重要的传感器,而且在不唤醒主机微处理器的情况下即可获取读数。在唤醒微处理器执行处理操作之前,某些系统可以采用一组预定读数。其他系统也可以将阈值编程至传感器逻辑中,以便能够对较大偏差立即做出反应。
在云端运行的控制应用可能会向设备或向设备发送状态更改命令来请求需要的数据。但是设备可能会在一段时间内没有响应,这是为了确保低占空比需求,因此当命令发出时,设备仍将处于低功耗状态。该应用需要有逻辑,以确保其对设备状态的理解与现实保持一致。
在物联网的初始阶段,集成商发现他们必须使用自定义协议或远程过程调用 (RPC) 技术为云集成构建自己的软件基础设施。通常,他们会在专用设施中使用自己的数据中心或租借的刀片式服务器,而且在这里他们可以运行从互联嵌入式设备接收数据的应用程序,将信息推送到中央数据库,并运行向用户呈现数据和执行模式分析的应用程序。
集成商将负责确保故障恢复能力和高可用性,并解决设备未与网络建立永久连接的复杂环境。实现这一目标的一种方法是使用设备影子概念。这些设备影子指的是在云端存储的文档,它们可以缓存有关设备状态(自上次报告后)和任何待定更改的信息。
虽然应用程序可以自己管理设备影子,但如果将其转移到可以跨多种类型的设备提供标准化接口的服务层,则可以更轻松地管理该任务。目前,这是由 Amazon Web Services、IBM Watson IoT 和 Google Cloud 等云基础设施产品提供处理的众多功能之一。
云基础设施平台执行的另一项服务是协议映射。云的发展围绕广泛使用的 TCP/IP 协议,以及协议可以承载的服务。虽然许多基于云的服务所用的超文本传输协议 (HTTP) 是一种无状态协议,但由于 TCP 的广泛支持,该协议运行于面向状态的 TCP 层之上。但是,只有少数物联网设备具有所需的资源来实现完整的 TCP/IP 堆栈,进而实现与云应用直接通信。根据互联网工程任务组 (IETF) 请求评议的定义,受限应用协议 (CoAP) 简化了 HTTP,使其与资源受限设备的兼容程度更高,并且无需使用 TCP 层。
CoAP 采用 4 字节报头和紧凑编码,能够支持数据包长度比通常由骨干以太网连接所提供数据包长度更短的协议。CoAP 的常见替代方案是 IBM 开发的消息队列遥测传输 (MQTT) 协议,其所具备的特性被认为更适合众多物联网实现。该协议可以在各种数据包格式上运行,例如蓝牙和 Zigbee 以及 TCP/IP。与传统 HTTP Web 服务的客户端服务器模式相比,MQTT 支持发布订阅模式。该模式具有尽量减少单个物联网设备请求的优点。
图 1 - 网关映射 MQTT 和 CoAP
图 2 - MQTT 发布/订阅模型示例
为了确保不同平台间数据传输的一致性,云平台采用 JavaScript 对象表示法 (JSON) 格式。要将数据发送到云,设备必须首先将其拥有的数据编码为 JSON 表示形式,然后用作 CoAP、HTTP 或 MQTT 消息的有效负载。实施者可选择:让终端设备执行此任务或依靠网关来处理该过程。在广泛使用传统硬件的系统中,网关通常是首选。网关可以使用专有或预设物联网标准来收集设备使用的数据,并将数据在 JSON 表示形式之间转换,也可以作为从云接收的任何命令的代理。网关实现将决定是否需要以设备可以理解的形式转换和中继这些命令。
为了处理 JSON 转换以及与云的交互,为物联网设计的设备可能包含自己的软件堆栈。对 JSON 和网络接口的支持可以整合到核心实时操作系统 (RTOS),并使用 C 语言之类的编程语言进行访问。由某些物联网集成商采用且受云基础设施提供商支持的技术会在每个针对物联网云集成进行优化的终端设备上实施虚拟机。
图 3 - JSON 格式的传感器输出示例
在每个物联网设备平台上实施的设备驱动程序用于将来自虚拟机的命令转换为底层 RTOS 和固件可以理解的形式。固件负责优化功耗和低级计时,并提供云端层可以依赖的标准化服务集。
与传统嵌入式环境相比,云环境中的开发可提供各种更丰富的编程工具。今天,用于云编程的语言往往被设计为在受管代码环境中运行。代码并不是被编译,而是在运行时进行解释,或者如果要提供更高的性能,则需要即时 (JIT) 编译。虽然嵌入式开发人员通常选择的编程语言有限(主要是 C 语言和 C++),但云开发人员可以访问各种编程语言,而且其中许多语言针对特定需求进行了优化。尽管 Java 和 Python 支持许多应用需求,但 Hadoop 对 Java 进行了扩展,以便更轻松地在多个计算节点之间传播数据处理工作负载。
虽然嵌入式和云编程都意味着使用交叉开发资源,但为服务器编写代码的开发人员通常可以使用虚拟机技术在自己的计算机上构建目标环境的缩小版本。嵌入式开发人员通常需要针对目标单独开发代码,并且在每个编辑-编译-下载序列后运行测试,因此会增加周转时间。支持受管代码语言的中间件环境通过在本地虚拟机上实现原型代码来帮助简化开发,从而提供了类似于云开发人员所体验到的效果。
由于可以使用云基础设施服务,因此集成商现在可以访问一系列工具,从而使完整物联网解决方案的构建变得更加容易。这些面向云的服务深入到了设备层,可确保大大降低部署的复杂性,并且让集成商能够充分利用物联网的全部功能。
全部0条评论
快来发表一下你的评论吧 !