使用 Mongoose OS 和 AWS IoT 进行安全远程设备管理,适用于ESP32,ESP8266,TI CC3200,STM32

在本文中,我们演示和解释 Mongoose OS 结合 AWS IoT 如何实现安全的远程设备管理。首先让我展示什么是可以实现的,然后我将解释这其中的原理。 我将从“ 安全远程设备管理” 的意义开始说起:

  • 安全:所有操作都通过 Amazon 提供的认证和安全的 AWS IoT 服务执行。
  • 远程:受管设备可以位于任何地方。一旦连接到 AWS IoT,它就可以被管理。
  • 设备:Mongoose OS 目前支持的任何硬件架构:ESP32,ESP8266,TI CC3200,STM32 Discovery 和 STM32 Nucleo 板。
  • 管理:几乎任何事情:更改文件系统上的文件; 重启设备; 触发无线固件更新; 读I2C总线; 切换GPIO引脚; 获取设备数据等。 并且可以通过标准的mos实用程序,也可以通过API以编程方式实现。

步骤 1:在 AWS IoT 上提供一个原始的新设备。

本部分需要:需要 2 分钟。

  • 下载 Mongoose OS 的 mos 工具
  • 获取款支持的硬件模块中的一个(在本例中,我们使用 Espressif 的 ESP32 WROOM 开发板),并通过 USB 电缆连接到您的计算机。
  • 烧录 Mongoose OS - 这将安装一个默认的启用 JavaScript 的固件:
mos flash mos-esp32  
  • 设置 WiFi:
mos wifi YOUR_WIFI_NET YOUR_WIFI_PASS  
  • 设置 AWS IoT。 您需要一个 AWS 帐户。此命令将在 AWS IoT 服务上配置设备。将创建证书和私钥文件,并将其放在当前目录中。 你可以将 eu-west-1 更改为其它支持 AWS IoT 的地区。 mos-default 将创建一个允许的 iot:* 策略,如果需要,使用您自己的预先创建的策略:
mos aws-iot-setup --aws-region eu-west-1 --aws-iot-policy mos-default  

步骤 2:管理配置的设备。

在同一目录中启动另一个终端窗口,并创建一个别名(alias)。

注意:我们将使用在配置步骤中生成的证书,以连接到 AWS IoT。这里假设使用的是 Bash shell:

alias mos1="mos --cert-file $(mos config-get mqtt.ssl_cert) --key-file $(mos config-get mqtt.ssl_key) --port mqtts://$(mos config-get mqtt.server)/$(mos config-get device.id)"  

现在魔法开始了! 在这之前,所有 mos 的命令都使用串行端口与设备进行通信。而从现在开始,将使用 AWS IoT MQTT。

Mongoose OS 远程设置管理工作流

在设备上列出所有的文件:

mos1 ls  
api_i2c.js  
api_mqtt.js  
init.js  
...

获取设备信息:

mos1 call Sys.GetInfo  
{
  "app": "mjs_hello",
  "fw_version": "1.0",
  "fw_id": "20170207-110935/???",
  "mac": "240AC400405C",
  "arch": "esp32",
  "uptime": 52,
  "ram_size": 0,
  "ram_free": 145308,
  "ram_min_free": 135516,
  "fs_size": 113201,
  "fs_free": 88101
}

基本上,由 mos -help(除了只使用串口的 mos flash)列出的任何命令都可以正常工作!您可以在本地对设备进行任何操作,现在您也可以通过 AWS IoT 进行操作。

工作原理

通过 Mongoose OS 的 RPC 基础架构,其中的 RPC 表示远程过程调用。在 Mongoose OS 中,这只是一个C(或JS)函数:

  • 有一个名字,例如“GPIO.Toggle”,
  • 使用函数参数获取 JSON 对象,
  • 给结果返回一个 JSON 对象。

这些 JSON 消息可以由许多不同的通道(channels)进行。Mongoose OS 默认支持串行(UART)、HTTP、WebSocket、MQTT 通道。

默认情况下,mos 工具使用串行通道。在通过串行/ USB电缆连接的设备上列出文件:

mos ls  

Mongoose OS 串行通道

如果设备具有 IP 地址,则可以使用 HTTP 通道:

mos --port http://IP/rpc ls  

或者 WebSocket 通道:

mos --port ws://IP/rpc ls  

Mongoose OS HTTP WebSocket 通道

如果设备连接到 MQTT 服务器,则可以使用 MQTT 通道:

mos --port mqtt://MQTT_SERVER:PORT/DEVICE_ID ls 

Mongoose OS MQTT 通道

在演示中,使用的是 AWS IoT MQTT 通道。由于 AWS IoT 使用双向的 TLS 认证,因此我们还指定了 --cert-filekey-file 参数以及mqtts:// 作为协议。

结论:Mongoose OS RPC 很棒

Mongoose OS 实现的 RPC 基础架构非常灵活可扩展。任何设备功能都可以导出为 RPC 服务,并且可以通过可用的通道(使用mos实用程序)进行调用,或者通过 RPC API 以编程方式进行调用(其本质上只是形成一个 JSON-RPC 类似的消息,并将它们发送到设备)。

由于存在诸如 I2C 的低级硬件 RPC 服务,因此可以从其他地方操作设备。一个简单的固件可以在您的工作站上的 UNIX shell 中编写。或者作为使用 Python 或 JavaScript 编写的 AWS Lambda 函数或任何您想要的。

您可以看到设备通过 mos call RPC.List 实现来查看所有可用RPC函数。您也可以自己添加任何新的RPC服务 - 请参阅 https://github.com/cesanta/mongoose-os/tree/master/fw/examples/c_rpc 作为示例。

原文链接:https://mongoose-os.com/blog/secure-remote-device-management-with-mongoose-os-and-aws-iot-for-esp32-esp8266-ti-cc3200-stm32/

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.