在物联网 (IoT) 应用中,用户将能够即时访问有关健康、环境和机器的详细信息。但是,对于开发人员而言,物联网提出了众多要求,涉及到多个专业,包括无线传感器设计、安全通信和基于云的软件开发。
随着需求的快速变化和新机会的不断出现,开发人员面临的挑战更加严峻,用于将概念转化为实际物联网应用的时间越来越短。
本文将讨论物联网应用的设计。本文还将阐述 Renesas 物联网沙箱和 Renesas Synergy S3A7 物联网快速原型开发套件组成的全面的平台如何帮助设计人员避免漫长的物联网开发过程。
物联网应用要求
物联网应用向设计人员提出了极其多样化的苛刻要求。与传统的嵌入式设计或后端软件系统不同,物联网应用需要涵盖各个系统和服务的复杂层级结构的专业知识(图 1)。
图 1: 物联网应用是基于复杂层级架构来构建的,这种架构是将从多个可信来源获取的数据转化为有意义信息所必需的。然后,这些信息可以直接提供给用户,或者在企业中进一步使用。(图片来源: Microsoft Corp。)
在外围,开发人员需要从众多传感器节点收集数据,实现高度精确的传感器数据采集,这些节点可能包括利用合适的客户端软件升级的现有设备、仅依赖电池电源长期工作的定制设备。很多情况下,系统架构师使用中间网关到达终端节点,该网关设计用于聚合数据,特别是来自物联网设备的数据,采用了短程无线技术。
物联网节点和网关使用标准通信协议,需要安全、快速、可靠地将数据有效负载传输到应用。如图 1 所示,物联网开发人员需要协调大量基于云的服务以处理基本任务,例如调配新设备和服务、验证授权设备的身份、维护数据流、存储数据等。最后,用于数据分析和机器学习的特定应用服务帮助软件工程师将原始数据转换为对最终用户有意义的信息。
快速物联网开发
虽然物联网开发人员可以快速找到实施复杂分层物联网架构的各个部件,但对于新开发人员而言,要将物联网的所有这些部件集成在一起,仍然是一项令人生畏的任务,即便对于经验丰富的工程师,也要消耗大量时间。Renesas 物联网沙箱的设计目的是简化物联网开发,它提供了一整套软件组件,这些组件是将数据从终端节点移动至云、再将信息提供给最终用户所必需的。
物联网沙箱可与 Renesas Synergy S3A7 物联网快速原型开发套件配合使用,它提供了完整的端到端开发平台,让开发人员能够快速部署物联网原型,而只需少量开发工作。开发人员可使用一系列菜单来配置沙箱,通过基于云的处理服务来传输传感器数据,这些服务能够快速响应事件,与其他云服务交互,提供详细分析,并且支持用户的移动设备(图 2)。
图 2: Renesas 物联网快速原型开发套件和物联网沙箱配合使用,提供完整的开发平台,用于物联网应用的快速原型开发。(图片来源: Medium One)
Renesas Synergy S3A7 物联网快速原型开发套件是一种高性能的实时平台,基于 Renesas R7FS3A77C MCU,用于设计和评估物联网无线传感器节点设计。S3A7 MCU 板包括 32 MB 闪存、2.4 GHz Wi-Fi 模块 (802.11a/b/g/n)、LCD 显示屏、LED 以及用于简单交互的用户按钮。S3A7 内核处理单元基于 32 位 ARM Cortex-M4 内核。 MCU 集成了片上闪存、192 KB SRAM、14 位模数转换器 (ADC)、12 位数模转换器 (DAC),还提供多个连接选项和多种安全功能,包括片上加密。
S3A7 MCU 板提供 4 个 Pmod 连接器和 4 个 Grove 连接器(图 3),让开发人员能够在添加扩展板时轻松进行配置。此外,这个物联网快速原型开发套件附带两个 Pmod 传感器模块,一个是 6 轴运动传感器模块,另一个是环境模块,包括光照、湿度/温度、空气质量、颜色/接近传感器。除了 S3A7 MCU 板和 Pmod 传感器之外,这个物联网快速原型开发套件还包括了功能全面的软件应用程序,旨在演示使用物联网沙箱的整个物联网流程。
图 3: 除了 32 位 MCU、32 MB 闪存、Wi-Fi 和 LCD 之外,S3A7 MCU 板还包括 4 个 Pmod 连接器(底部的一行黑色连接器)和 4 个 Grove 连接器(Pmod 连接器上方的白色连接器)。(图片来源: Renesas)
物联网沙箱
Renesas 物联网沙箱使用简单的 Web 连接协议,提供必不可少的服务,包括安全、数据处理、分析、实时传感器的图形化显示。同时,开发人员可以基于样例应用程序进行开发,以便通过一系列菜单快速配置这些服务,而只需很少的编程工作。
开始使用物联网沙箱时,开发人员通过物联网沙箱的 Web 界面,手动创建 API 密钥和授权用户。API 密钥和 API 基本用户身份用于为沙箱的后续事务处理进行授权。
在开发新物联网应用的过程中,最初的事务之一可能包括将样本数据包发送至云。这个简单操作既可展示连接协议,又为物联网沙箱中的后续数据处理奠定基础。
物联网器件(例如 S3A7 MCU 板)使用 JSON 格式将事件数据发送至物联网沙箱。每个事件的数据有效负载包括事件发生时间的键值对 (observed_at),以及数据集本身的键值对 (event_data),此外还可能有多个键值对。例如,在特定时间发现的某个事件具有两个关联值,它们将使用 JSON 格式进行传输,如下所示:
{"observed_at":"2017-01-01T12:00:00.0-0600", "event_data": {"force_strength":67, "level":"apprentice"}}
对于数据流式传输和其他交互,物联网沙箱支持两个简单的连接协议。设备使用 MQTT(消息队列遥测传输)或 REST 操作,与物联网沙箱进行通信。基于 TCP/IP 开发的 MQTT 是一种 ISO 标准轻量级协议,用于定序的无损消息传输。MQTT 基于灵活的发布/订阅模式开发,可以使用很简短的代码实施。因此,对于存储器空间或带宽有限的物联网设备而言,MQTT 尤其具有吸引力,但它需要可靠的数据通信。
MQTT 需要中间的消息代理,用于协调它的发布/订阅模式。作为其服务的一部分,物联网沙箱提供了代理,另外提供 Python 库,设备使用该库将数据发送至云。与其他沙箱 API 调用相同,MQTT 库将数据发布抽象为基本调用。例如,通过沙箱 MQTT 代理,将以上所示的数据有效负载发布至某些特定设备非常简单:
MQTT.publish_event_to_client(device, payload)
另外,开发人员可以使用受支持的 REST API,以任何语言为交互编程。在这一方面,程序员使用他们熟悉的 Web 协议,例如 GET、PUT 和 POST,将数据传输到沙箱(代码列表 1),或者从沙箱接收数据(代码列表 2)。正如这些代码列表所示,每个会话都从一个使用 API 密钥、API 用户 ID 和密码的登录事务开始。后续的写入或读取使用基本的 http POST 方法来发送数据有效负载,或使用 GET 方法来接收数据有效负载,数据为 JSON 格式。
Copy
import requests
import json
headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
data = {'login_id': 'john.doe@renesas.com', 'password': '12345', 'api_key': 'ABCDEFGHIJKLmnopabcdefghijklmnop1234567890'}
session = requests.session()
response = session.post('https://api-renesas-na-sandbox.mediumone.comv2/login', data=json.dumps(data), headers=headers)
url = 'https://api-renesas-na-sandbox.mediumone.com/v2/events/raw/john.doe@renesas.com'
data = {'observed_at': '2015-01-10T00:00:00.000-0800', 'event_data': {'sensor1' : 38.6}}
response = session.post(url=url, data=json.dumps(data), headers=headers)
列表 1: Renesas 物联网沙箱 API 在“Medium One”云上提供专门端点,用于会话登录,还用于将数据添加到特定用户的“原始”数据流(使用标准 http POST 方法)。(代码来源: Renesas/Medium One)
Copy
import requests
import json
headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
data = {'login_id': 'john.doe@renesas.com', 'password': '12345', 'api_key': 'ABCDEFGHIJKLmnopabcdefghijklmnop1234567890'}
# Login
session = requests.session()
response = session.post('https://api-renesas-na-sandbox.mediumone.com/v2/login', data=json.dumps(data), headers=headers)
url = 'https://api-renesas-na-sandbox.mediumone.com/v2/events/raw/john.doe@renesas.com'
headers = {'Accept': 'application/json'}
params = {"since":"2015-01-10T00:00:00.000-0800", "until":"2015-01-17T00:00:00.000-0800", "limit":100, "include":"$.event_data.tagname"}
# GET
response = session.get(url=url, params=params, headers=headers)
列表 2: 开发人员使用大多数编程语言都支持的标准 http 库(例如此处所示的 Python),执行简单的 GET 事务,从“原始”数据流拉取具有请求的特征的 JSON 格式数据。(代码来源: Renesas/Medium One)
云处理
对于原始数据流,物联网沙箱首先建立处理步骤,称为“工作流”,它们围绕名为“标记”的键建立,这些标记在数据流内部的数据有效负载中定义。工作流代表了基本的数据处理步骤,例如筛选、转换或对数据流执行的其他操作。
使用比较传统的方法,开发人员经常需要识别和维护在代码中使用的参数与来自外部设备的一组特定数据流之间的绑定。相反,物联网沙箱则可自动识别标记,并允许开发人员将标记用作工作流的输入,工作流对与每个标记关联的数据值执行代码。例如,如果开发人员发送了数据有效负载,例如上文描述的有效负载,系统将自动识别关联的数据类型(例如数字或字符串),并且建立数据流,其中包含这些标记的时序数据。开发人员使用物联网沙箱的 Web 界面,确认或修改沙箱自动生成的架构(图 4)。
图 4: 物联网沙箱自动识别新有效负载内部的数据类型,从而为开发人员提供了创建新物联网处理流的简单专用方法。(图片来源: Renesas/Medium One)
此外,沙箱还为开发人员使用直观的图形化方法,用于将标记绑定到代码参数。在上例中,开发人员使用沙箱提供的基于 Web 的 Workflow Studio,为工作流代码生成输入和输出。在输入端,开发人员使用 Workflow Studio,将来自从外部设备接收的“原始”数据流的标记值拖放至代码模块的特定输入参数。同样,他们还将工作流代码的输出连接到“已处理”数据流(图 5)。
图 5: 使用物联网沙箱提供的基于 Web 的 Workflow Studio,开发人员能够通过图形化方式,将标记(例如 raw.force_strength)拖放至工作流,并连接每个标记作为命名输入参数(例如 in1),以便在与每个工作流关联的代码模块内部使用。(图片来源: Renesas/Medium One)
在工作流的代码模块中,物联网沙箱的内置 IONode 模块提供了几个简单的类方法,用于获取和设置标记值。例如,IONode.get_input('in1')
返回一个 Python 字典(键和值的关联阵列,类似 JSON 有效负载),其中包含值和元数据(属于从 in1
输入到代码模块的数据的当前实例)。使用这种方法,开发人员能够将输出值 (out1
) 设置为输入变量的一些经过处理的组合(代码列表 3)。
Copy
new_strength = IONode.get_input('in1')['event_data']['value'] + 100
new_level = "expert"
output = IONode.set_output('out1', {'new_strength': new_strength, 'new_level': new_level})
列表 3: Renesas 物联网沙箱提供了多个高级别库,例如内置的 IONode Python 模块,它可将工作流 I/O 精简为简单方法,以便读取 (get_input
) 和写入 (set_output
) 数据。(代码来源: Renesas/Medium One)
经过处理的数据流可以进一步连接到一个或多个后续工作流,以实施复杂的信号处理、分析或业务逻辑。例如,开发人员可以使用单独的工作流来监控数据流。如果发生严重事件,来自主工作流的输出会被定向到第二个工作流,后者使用物联网沙箱 Python 模块,向用户发送 SMS 警报。每次当工作流在原始数据流中查找新事件时,它会自动启动和执行其代码包。因此,它能够接近实时地对数据流进行自动处理。开发人员可在不同工作流之间共享输出和输出,以构建包含多个连续和并发处理步骤的复杂处理流。
但是,对于任何物联网应用,都有一个重要目标:向用户呈现经过处理的数据流的结果。物联网沙箱提供了一系列连接到数据流的图形化小工具,从而简化了这种开发要求。使用物联网沙箱的 Web 界面,开发人员能够将相应小工具放置在仪表板上,以创建易于理解的物联网结果快照。例如,物联网沙箱实时仪表小工具可以显示特定标记的当前值,从而自动更新该值及其最小值/最大值范围。开发人员可以使用多个仪表来构建仪表板,采用简洁的格式呈现来自多个数据源的结果(图 6)。
图 6: 物联网沙箱提供了图形化仪表,用于显示原始数据流或已处理数据流的当前值和趋势。(图片来源: Renesas/Medium One)
Renesas Synergy S3A7 物联网快速原型开发套件附带了 Renesas Smart Chef 物联网演示,利用该套件附带的全套传感器,演示端到端物联网应用。Renesas 还提供其他多个样例应用程序,用于演示其他使用场景,包括使用低功耗蓝牙或 Lora 的连接。开发人员只需通过 MCU 板的 JLink 连接器,将以 srec (S record) 格式提供的镜像刷入 S3A7 MCU 板。开发人员可以使用 Renesas e2 Studio 软件开发环境,来扩展这些样例应用程序,或者从头开始构建新应用程序,使用 J-Link 闪存实用工具加载最终 srec 镜像。
总结
物联网应用开发需要依赖于多种不同的技术和方法来进行数据采集和通信,通过云处理从传感器硬件采集的数据,并将数据发送至用户的移动设备。因此,开发人员发现他们面临着两难处境,既要满足众多开发要求,又承受着更快速交付物联网设计的压力。
为了帮助加快开发速度,Renesas Synergy S3A7 物联网快速原型开发工具和 Renesas 物联网沙箱的组合提供了完整的端到端开发环境。开发人员能够使用基于 Web 的界面来配置物联网沙箱,以支持基于云的处理流,且只需很少的额外编程工作。