在 Amazon Web Services 上快速部署基于传感器的工业强度 IoT 设备

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

工业物联网 (IIoT) 的端点设备提供了云资源与工业过程之间的基本接口。但是,在将外设与云连接时,IIoT 设备需要满足设备本身以及设备与云之间不断升级的性能、连接性、传感器集成、安全性和可靠性要求。

Amazon IoT Core 和 Amazon FreeRTOS 等专用服务已帮助满足了云端的这些关键要求。但是,对于刚开始使用云服务及其众多接口和协议的 IIoT 开发人员来说,在设备端连接这些服务可能会给带来更多麻烦。这些开发人员还必须对边缘应用的感测和处理要求,以及成本、功耗、性能和空间限制做出响应。

本文简要讨论云资源的使用以及它们的演变过程,然后介绍一个基于 RenesasRX65N 微控制器的完整云套件。本文说明如何将此微控制器和参考设计与其关联的软件包结合使用,以快速实现基于传感器的 IIoT 设备,从而与 Amazon Web Services (AWS) 云进行集成。

利用云资源

尽管其他云服务提供商正在慢慢追赶,但 AWS 仍是基于云的可扩展无服务器和有服务器型计算、存储及软件即服务 (SaaS) 领域的领先提供商。组织通常在企业规模的应用中使用这些服务,这些应用会随着需求的变化而增长,并吸收利用各种各样的 SaaS 软件包,所有这些都通过平台范围的统一中间件服务进行中介,以实现通信、通知、安全、数据存储,以及几乎任何实际的计算需求。

对于部署大规模 IoT 应用的企业而言,利用这些服务分析来自车辆、设备、建筑物和制造工厂的 IIoT 数据,可有效增强对有形资产、流程和实践的了解和控制。但对于开发人员而言,由于外设中资源受限的实时 IoT 设计与云中的可扩展虚拟服务之间存在明显的差距,因此将 IIoT 设备连接到 AWS 或任何其他云服务的过程似乎不太明朗。

为了弥补这一差距,主要云服务提供商提供了一组连接功能,旨在协调 IoT 设备与云服务之间的广泛差异。对于 AWS,这些功能包含在 AWS IoT Core 中。AWS IoT Core 不仅充当整个 AWS 平台的网关,而且还是用于数据存储、分析、可视化和机器学习的 IoT 特定应用级服务的网关(图 1)。

AWS IoT 提供现场 IIoT 传感器与更广泛 AWS 平台之间的服务接口示意图图 1:AWS IoT 提供了现场 IIoT 传感器与更广泛 AWS 服务平台之间的服务接口,这些平台可用于分析工业应用(如此处所示的车队管理应用)的传感器数据。(图片来源:AWS)

除了这些功能以外,FreeRTOS 开源实时操作系统 (RTOS) 与 AWS IoT 的集成还为满足系统更新和维护的生命周期要求提供了重要优势。

与任何其他企业级产品一样,AWS IoT 服务为设备入网、身份验证和信息交换指定了一系列广泛的接口要求和协议。尽管与更广泛 AWS 平台的要求一致,但 IoT 环境的特殊性意味着,即使经验丰富的 AWS 开发人员在将设备与 AWS IoT Core 和关联的 AWS IoT 服务集成时,也需要经历曲折的学习过程。此外,任何经验水平的开发人员在实现 IoT 设计时,若要持续满足对更高性能、更低功耗和更高安全性的需求,都会面临着类似的挑战。

为了应对这些挑战,Renesas 的 RTK5RX65N0S01000BE RX65N 云套件提供了一种现成的解决方案,在 AWS 上快速部署 IIoT 设备。

综合平台

RX65N 云套件提供了完整的参考设计和开发平台,用于通过 AWS IoT 云服务部署和评估 IIoT 设备。除了一个综合软件开发包,该套件还包含三个硬件板,包括目标板(带有通过 Amazon FreeRTOS 认证的 Renesas R5F565NEDDFP 32 位微控制器)、Wi-Fi 板和 Renesas Cloud Option 板(带有 USB 接口以及 IIoT 应用中通常需要的一组传感器)。

R5F565NEDDFP 微控制器基于 Renesas RXv2 32 位处理器内核,提供 640 KB 的 RAM、32 KB 的数据闪存和 2 MB 的代码闪存。在此微控制器中,代码闪存可以配置为线性模式,作为单一地址空间运行,也可以配置为双模式,作为两个单独的存储区域运行。双模式支持更可靠的无线 (OTA) 更新,因为该模式会将新固件加载到未占用的存储体中,并在重新启动系统之前验证其完整性和真实性。

除了存储器支持外,R5F565NEDDFP 及 RX65N 系列的其他成员还集成了广泛的功能块,包括 IEEE-754 浮点单元 (FPU) 和存储器保护单元 (MPU)。在其外部接口中,RX65N 微控制器包含两个多通道 12 位模数转换器 (ADC);一个双通道 12 位数模转换器 (DAC);工业通信接口,包括以太网、控制器区域网络 (CAN);以及多个串行接口,包括 I2C、四通道 SPI 和一个支持 I2C 和 SPI 的多通道串行通信接口 (SCI)。

传感器硬件接口

除了提供评估平台外,Renesas 云套件还展示了 RX65N 微控制器与 IIoT 传感器集成的相对简便性。在此情况下,套件的 Cloud Option 板包括一组三个传感器:

  • Renesas 的 ISL29035 (ISL29035IROZ-T7) 数字光传感器,用于环境/红外光测量
  • Bosch SensortecBMI160 MEMS 传感器,用于三轴加速度和陀螺仪测量
  • Bosch Sensortec 的 BME680 MEMS 传感器,用于气体、温度、湿度和压力测量

由于所有三个传感器均提供 I2C 串行接口,因此只需将设备连接至共享的 I2C 总线,即可与微控制器进行集成。Cloud Option 板的原理图展示了这种简单的硬件接口(图 2)。

Renesas 的 Cloud Option 板参考设计原理图(点击放大)图 2:Renesas RX65N 云套件中附带的 Renesas Cloud Option 板参考设计原理图说明了将其三个传感器连接到共享 I2C 串行总线所需的简单硬件接口。(图片来源:Renesas)

使用 Cloud Option 板上提供的兼容连接器,开发人员还可以通过 PMODGrove 扩展板来扩展套件的硬件功能。

软件开发

尽管 IIoT 设备中使用的高级微控制器和传感器简化了硬件设计,但软件设计却有可能变得更加复杂。除了 IIoT 系统的软件要求外,开发人员还面临连接 AWS IoT Core 和 AWS 平台服务等云资源的要求。在此情况下,可以通过面向设备和云服务的一对 AWS 软件开发套件 (SDK) 来满足这些要求。

在应用级别,IoT 软件开发人员通过标准 AWS SDK 与 AWS 服务进行交互。在此级别,与设备及其数据的交互通过相同的服务发生,并由 AWS 和 AWS IoT 服务通用的 AWS 消息传输和通知服务协调,如下所述。

在设备级别,开发人员使用设备(或“事物”)SDK 连接到 AWS IoT 服务。设备与 AWS 服务之间的特定请求和响应由消息代理协调,消息代理则使用 ISO 标准发布-订阅 (pub/sub) 消息传输协议消息队列遥测传输 (MQTT) 来管理交换(图 3)。

设备和应用分别使用单独 SDK 的示意图图 3:IIoT 应用的实现涉及为设备和应用分别使用单独的 SDK,但两者都依靠一组平台范围的统一机制来实现消息传输、通知和其他基础功能。(图片来源:AWS)

当设备发送带有数据有效载荷的 MQTT 消息时,规则引擎会根据开发人员以基于结构化查询语言 (SQL) 的语法编写的一组表达式,来调用其他 AWS 平台服务。例如,清单 1 所示的规则可在 Amazon 机器学习服务函数 (machinelearning_predict()) 所调用的推断模型 (my-model) 将数据分类为属于某个特定标签 (predictedLabel=1) 时,将 SQL 表达式 (SELECT * FROM 'iot/test) 生成的有效载荷重新发布到另一个 MQTT 队列 (my-mqtt-topic)。

复制 {   "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1",   "ruleDisabled": false,   "awsIotSqlVersion": "2016-03-23",   "actions": [{     "republish": {         "roleArn": "arn:aws:iam::123456789012:role/my-iot-role",         "topic": "my-mqtt-topic"     }   }] } 

清单 1:AWS 规则引擎使用类似于 SQL 的选择规则、指定的操作和关联的元数据来调用 AWS 服务并路由数据。(代码来源:AWS)

设备影子

虽然 AWS IoT 规则引擎提供了松耦合的处理功能,但 AWS IoT Device Shadow 服务可帮助 IoT 应用摆脱 IoT 设备运行状况的约束。设备影子保存有关物理 IoT 设备的状态信息。因此,当 IoT 设备失去连接或以其他方式断开与 AWS 的连接时,云服务可以使用设备影子,基于最近收到的数据继续运行,而无需构建自己的设备数据缓存机制。相反,AWS IoT Greengrass 边缘服务可让 IoT 设备在云服务的间歇性中断期间继续与云进行虚拟交互。这种情况下,Greengrass 继续在边缘设备中运行,以维护设备影子并提供维持 IoT 设备运行所需的必要云服务子集。

尽管设备影子可以保存设备状态,但 Device Shadow 服务不仅仅是一种简单的缓存机制。该服务还为应用提供通用接口,用于发送请求到 IoT 设备。由于它被绑定到 MQTT 发布/订阅机制,因此数据更新和请求会导致订阅了与各个设备影子关联的 MQTT 队列的所有设备和应用都收到自动通知。

在实现级别,Device Shadow 服务使用简单的 JSON 文档格式,保存与每个物理设备关联的数据和元数据。通过设备 SDK,IoT 设备上的软件可以传输新的 JSON 文档,该文档将使用最新的数据更新设备影子中报告的状态。相反,主机或移动 IoT 应用可以使用新的期望值来更新设备影子。例如,对于当前显示绿色 LED 或在显示器上显示绿色灯的 IIoT 设备,应用可以更新设备影子以请求更改为红色,甚至可以接收一份报告,显示所需状态与报告状态之间的差异(清单 2)。

复制 {     "state": {         "desired": {             "color": "RED",             "state": "STOP"         },         "reported": {             "color": "GREEN",             "engine": "ON"         },         "delta": {             "color": "RED",             "state": "STOP"         }     },     "metadata": {         "desired": {             "color": {                 "timestamp": 12345             },             "state": {                 "timestamp": 12345             },             "reported": {                 "color": {                     "timestamp": 12345                 },                 "engine": {                     "timestamp": 12345                 }             },             "delta": {                 "color": {                     "timestamp": 12345                 },                 "state": {                     "timestamp": 12345                 }             }         },         "version": 17,         "timestamp": 123456789     } } 

清单 2:AWS 设备影子是一个 JSON 文档,其中包含设备元数据和数据,包括报告的和期望的设备状态值,以及这两个状态之间的差异。(代码来源:AWS)

虽然设备影子和规则引擎等服务支持与应用和更广泛的 AWS 平台的集成,但 AWS IoT 服务的核心组件是与 Amazon FreeRTOS 的集成。该开源 RTOS 通过一组广泛的库扩展了常用的开源 FreeRTOS 内核。除了用于日志记录等常见服务的库以外,Amazon FreeRTOS 还添加了用于 AWS IoT 服务的库。这些库包括 AWS IoT Device Shadow、AWS IoT Greengrass (gdd),以及用于设备安全监控的 AWS IoT Device Defender。此外,Amazon 还提供了用于许多中间件服务的库以增强 FreeRTOS 的功能,包括安全套接字、传输层安全 (TLS)、公钥加密标准 (PKCS) #11、OTA 代理、蓝牙、Wi-Fi 和 MQTT 信息交换。

简单部署

Renesas 通过其云套件以及与 AWS IoT 服务的连接性,帮助开发人员迅速获得经验。设置云套件板组后,用户需要安装 Renesas 基于 Eclipse 的 e2 studio 集成开发环境 (IDE) 和 Renesas 的 CC-RX 编译器。使用 e2 studio 和 CC-RX 编译器,开发人员可以快速导入和编译 Amazon FreeRTOS 以及 Renesas 开源 RX65N 云套件示例代码

Renesas 提供的关联文档包含了设置 AWS IoT 的逐步说明,以及建立与 AWS 的任何连接所需的身份验证凭据。此设置过程相对较快,之后需要运行演示程序来监视设备作为 MQTT 消息发送的传感器数据,并使用 MQTT 显示客户端(可通过 AWS IoT 控制台获取)查看这些消息。

定制软件开发

除了提供关于 IoT 设备与 AWS IoT 集成的即时演示外,Renesas 示例代码还可用作定制应用的参考设计。但是,即使获得此代码,开发人员在定制项目中也将面临诸多挑战,其中之一是如何处理与 Amazon FreeRTOS 及相关 AWS IoT 服务关联的大量配置。每个服务都需要指定许多相关参数,例如队列长度和消息大小。

尽管 Renesas 示例代码包括用于演示的预建 FreeRTOS 配置,但是自定义代码开发人员将需要完成每个服务、库和实用程序的配置选项。Renesas 开发了 Smart Configurator 以简化此过程。Smart Configurator 可作为 e2 studio 的插件和独立应用程序提供,让开发人员可以通过图形用户界面 (GUI) 检查和修改每个配置组的设置(图 4)。

Renesas 的 Smart Configurator 图片(点击放大)图 4:Renesas 的 Smart Configurator 提供了一个简单的 GUI,用于检查和修改与 Amazon FreeRTOS 中支持的许多库和服务关联的众多配置设置。(图片来源:Renesas)

对于代码,开发人员可以利用 Renesas RX65N 云套件代码存储库中提供的完整源代码。该存储库中包含的示例例程演示了通过基于 MQTT 的消息传输机制使用各个 AWS IoT 服务的关键设计模式。

例如,为了演示 AWS IoT Device Shadow 服务,包含的模块 (aws_shadow_lightbulb_on_off.c) 和关联的头文件说明了 IoT 设备上运行的软件如何创建 JSON 文档、初始化队列,以及如何将设备更新消息发送到 Device Shadow 服务。尽管完整的软件架构稍有涉及,但该示例模块展示了如何使用基本数据结构和几行代码,通过将相应的影子设备 JSON 文档属性设置为新颜色(清单 1 中期望的红色)来更改灯的颜色(清单 1 所示 JSON 文档中报告的绿色)。完成设备影子的初始化后,此代码会创建一项任务,通过发出新的期望状态请求,使用函数 prvGenerateDesiredJSON() 生成具有替代颜色状态的新 JSON 文档,从而在两种状态(红色和绿色)之间交替显示期望的颜色(清单 3)。

复制 #define shadowDemoDESIRED_JSON \ "{" \ "\"state\":{" \ "\"desired\":{" \ "\"%s\":\"%s\"" \ "}" \ "}," \ "\"clientToken\": \"token-%d\"" \ "}" ...static uint32_t prvGenerateDesiredJSON( ShadowQueueData_t * const pxShadowQueueData, const char * const pcTaskName, uint8_t ucBulbState ) { /* Map cBulbState to strings.*/ static const char * const pColors[ 2 ] = { "green", "red" }; /* Generate JSON.*/ return ( uint32_t ) snprintf( ( char * ) pxShadowQueueData->pcUpdateBuffer, shadowDemoBUFFER_LENGTH, shadowDemoDESIRED_JSON, pcTaskName, pColors[ ucBulbState ], ( int ) xTaskGetTickCount() ); } .../* Keep changing the desired state of light bulb periodically.*/ for( ; ; ) { configPRINTF( ( "%s changing desired state.\r\n", pxShadowTaskParam->cTaskName ) ); /* Toggle the desired state and generate a new JSON document.*/ ucBulbState = !( ucBulbState ); xShadowQueueData.ulDataLength = prvGenerateDesiredJSON( &xShadowQueueData, pxShadowTaskParam->cTaskName, ucBulbState ); /* Add the new desired state to the update queue.*/ if( xQueueSendToBack( xUpdateQueue, &xShadowQueueData, shadowDemoSEND_QUEUE_WAIT_TICKS ) == pdTRUE ) { /* If the new desired state was successfully added, wait for notification that the update completed.*/ configASSERT( ulTaskNotifyTake( pdTRUE, shadowDemoNOTIFY_WAIT_MS ) == 1 ); configPRINTF( ( "%s done changing desired state.\r\n", pxShadowTaskParam->cTaskName ) ); } else { configPRINTF( ( "Update queue full, deferring desired state change.\r\n" ) ); } vTaskDelayUntil( &xLastWakeTime, shadowDemoSEND_UPDATE_MS ); } 

清单 3:此示例代码片段取自 Renesas RX65N 云套件代码存储库,其演示的基本设计模式使用在 shadowDemoDESIRED_JSON 中定义并由 prvGenerateDesiredJSON() 函数实例化的 JSON 文档以及更新队列,修改了设备影子的期望状态。(代码来源:Renesas)

结论

凭借其广泛的产品组合,AWS 等商业云服务为构建大规模 IIoT 应用(尤其是需要与其他企业应用协同工作的应用)的开发人员提供了一个有吸引力的平台。但对于开发人员而言,应对 IoT 设备设计和云集成挑战往往会导致开发和部署出现意外延迟。

Renesas RX65N 云套件基于 Renesas RX65N 微控制器,提供了完整的 IIoT 传感器设备和参考设计。Renesas 云套件与关联的软件包结合使用,可提供灵活、快速的开发平台,实现基于传感器的 IIoT 设备,以便与 AWS 集成。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Stephen Evanczuk

Stephen Evanczuk 拥有 20 多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不是在撰写技术和工程文章,就是在研究深度学习在识别和推荐系统方面的应用。

关于此出版商

DigiKey 北美编辑