本帖最后由 小恩GG 于 2020-8-10 17:52 编辑
【经验分享】RT云端测试之AWS云端构建运行 一 文档说明 随着科技的进一步发展,物联网广泛应用于各行各业,比如工业,农业,环境,交通,物流,安防等基础设施,物联网的使用使我们的生活变得更加丰富多彩并且智能化。而爆发式发展的物联网,首先离不开物联网平台云端,目前市场上的云服务也是种类繁多,比如Amazon的AWS,微软的azure,googleclould iot, 国内的阿里云,百度物接入IOT hub, 移动的oneNet等。 亚马逊AWS云是亚马逊提供的专业云计算服务,为全世界各个国家和地区的客户提供一整套基础设施和云解决方案, 是目前拥有大量用户的云计算。AWS IOT是一款托管云平台,可以让互联设备轻松安全的与云应用程序以及其他设备实现数据交互。 NXP跨界处理器RT推出了一系列关于AWS代码,本文主要讲解以官方MIMXRT1060-EVK SDK里面的远程控制remote_control_wifi_nxp代码为例,实现和AWS iot云端,安卓手机APP以及MQTTfx客户端的数据交互。本文的云端拓扑结构如下: 图1-1 二 AWS云端构建 2.1 新建AWS账号 准备一张信用卡,然后到amazon下面的链接新建AWS账号: 2.2 新建物事件 打开AWS IOT 链接: 选择manage下的Things,第一次使用还没有thing,这时候可以选择register a thing。如果之前用过,可以直接点击右上角create,新建一个thing。选择createa single thing按钮,新建一个事件,具体如下图: 图2-1 图2-2 图2-3 2.3 新建证书 为事件新建一个证书,点击下图中的createcertificate按钮 图2-4 点击生成之后,会出现certificatecreated字样,说明已经成功生成证书: 图2-5 这里需要注意下,下载certificate for this thing, public key, private key, 供代码以及后面mqttfx配置使用,并且点击A root CA for AWS forDownload, 下载root CA证书,供后面mqttfx配置使用。 打开root CA download链接,可以直接下载 图2-6 最终可以获得如下几个文件: 7abfd7a350-certificate.pem.crt 7abfd7a350-private.pem.key 7abfd7a350-public.pem.key AmazonRootCA1.pem 保存好上面的几个文件供后续使用。 然后直接点击active激活这个证书,点击Done,后续再添加policy 2.4 新建策略 回到主界面: 在Secure下选择策略policies,新建一个策略 图2-7 输入策略名称,action区域填写:iot:*, Resource ARN区域填写:*, Allow 打勾,然后点击create按钮,完成新策略的构建。 图2-8 2.5 事件附加关系 新建了事件,证书,策略,下面需要把策略附加到证书,然后把证书添加到事件中去。 图2-9 选择secure下面的certificates,并且如图点击…,在下拉中attach policy,选择刚才新建的policy, attach thing, 选择新建好的thing. 图2-10 图2-11 图2-12 这时候,在manage下面打开Things,查看事件相关的信息情况: 图2-13 双击打开事件,在事件的Interact中,可以看到该事件对应的Rest APIEndpoint,后续RT代码以及mqttfx都需要直接连接这个事件端点。 图2-14 查看事件的security, 可以看到之前新建的证书,以及附加到了新建的事件上: 图2-15 到目前为止,已经完成了事件相关的配置,等待后续MQTTfx,手机app,RT EVK配置好后,联调,也可以通过上图的物影子shadow直接查看信息更新情况。 三 Andriod 相关配置 3.1 AWS cognito配置 如果使用安卓手机app实现和AWS IOT云端的数据交互,还需要cognito service去认证AWS IOT,然后去访问设备对应的物影子,首选需要新建一个identity pools,打开如下连接: 图3-1 点击manage Identity pools,进入之后,点击create new identity pool. 图3-2 图3-3 图3-4 这里会自动生成两个Role: Cognito_PoolNameAuth_Role Cognito_PoolNameUnauth_Role 点击Allow,完成Identitypool的新建. 图3-5 这里需要记录下对应的Identity pool ID, 后续的策略以及安卓app的properties文件配置需要使用。 3.2 IAM中为cognito新建策略policies 点击accessmanagement下面的policies 图3-6 选择create policy,新建一个IAM下的策略,在策略中的JSON下面填写内容如下: 图3-7 - {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Action": [
- "iot:Connect"
- ],
- "Resource": [
- "*"
- ]
- },
- {
- "Effect": "Allow",
- "Action": [
- "iot:Publish"
- ],
- "Resource": [
- "arn:aws:iot:us-east-1:965396684474:topic/$aws/things/RTAWSThing/shadow/update",
- "arn:aws:iot:us-east-1:965396684474:topic/$aws/things/RTAWSThing/shadow/get"
- ]
- },
- {
- "Effect": "Allow",
- "Action": [
- "iot:Subscribe",
- "iot:Receive"
- ],
- "Resource": [
- "*"
- ]
- }
- ]
- }
复制代码
注意JSON里面的内容: "arn:aws:iot:<REGION>:<ACCOUNTID>:topic/$aws/things/<THINGNAME>/shadow/update", "arn:aws:iot:<REGION>:<ACCOUNTID>:topic/$aws/things/<THINGNAME>/shadow/get" Region:图3-5中的us-east-1 ACCOUNT ID,可以在右上角的My Account中查看: 图3-8 图3-9 完成新建IAM策略,回到IAMpolicies界面,选择Filter policies为customermanaged,会发现自己所建的policy. 图3-10 3.3 IAM中为cognito role添加策略 IAM中选择roles选项: 图3-11 双击打开之前cognito中建pool产生的cognito_PoolNameUnauth_Role,并为其attachpolicies,即刚刚新建的policy。 图3-12 图3-13 到目前为止,已经完成了AWS cognito端的配置。 3.4 安卓properties文件配置 新建一个.properties的文件,文件内容为: customer_specific_endpoint=<REST API ENDPOINT> cognito_pool_id=<COGNITO POOL ID> thing_name=<THING NAME> region=<REGION> 这里需要注意配置正确的: REST API ENDPOINT:图2-14 COGNITO POOL ID:图3-5 THING NAME:图2-14,左上角 REGION:图3-5,COGNITOPOOL ID的:前面的区域 举例,我这边情况如下: customer_specific_endpoint=a215vehc5uw107-ats.iot.us-east-1.amazonaws.com cognito_pool_id=us-east-1:c5ca6d11-f069-416c-81f9-fc1ec8fd8de5 thing_name=RTAWSThing region=us-east-1 实际使用中,需要配置为自己的云端设置,否则会连接到笔者的云端。 四 MQTTfx配置测试 MQTT.fx 是一款基于EclipsePaho,使用Java语言编写的MQTT 客户端工具,支持通过Topic 订阅和发布消息。可以到如下链接下载: 目前最新版本是1.7.1. 4.1 MQTT.fx配置 选择connect 前面的配置按钮,进入connection配置界面: 图4-1 Profile Name:输入自定义配置名称 Broker Address:即REST API ENDPOINT。 Broker Port:8883 Client ID:可以随机生成 CA file:即前面新建证书的时候下载的CA证书 Client Certificate File:对应的证书文件 Client key File:对应的私钥文件 勾选PEM formatted。 点击apply, 点击OK,完成配置。 4.2 用AWS云端对接测试 为了测试和事件云端是否能够连接,可以初步对接测试。 这个界面下面有个Test,可以供其他客户端或者自身测试。 AWS云端和MQTTfx都订阅:$aws/things/RTAWSThing/shadow/update MQTTfx发布数据到主题:$aws/things/RTAWSThing/shadow/update 可以发现,云端测试端口和MQTTfx订阅端都能接到数据: 图4-2 下面由云端测试Publish数据,然后可以看到MQTTFX订阅端以及云端订阅端都可以接到数据: 图4-3 到目前为止,云端已经成功可以实现和客户端的连接,数据交互。 五 RT1060及wifi模块配置 本文使用RT1060 SDK2.8.0里面的代码: SDK_2.8.0_EVK-MIMXRT1060\boards\evkmimxrt1060\aws_examples\remote_control_wifi_nxp 测试平台为: MIMXRT1060-EVK Panasonic PAN9026 SDIO ADAPTER + SD touSD adapter 工程默认使用Panasonic PAN9026 SDIO ADAPTER 5.1 WIFI以及云端接口配置 工程需要外部的WIFI SSID以及密码,所以需要提供一个可用的WIFI工作环境,然后在代码aws_clientcredential.h中添加SSI以及password #defineclientcredentialWIFI_SSID "  aste WiFi SSID here." #define clientcredentialWIFI_PASSWORD " aste WiFi password here." 云端相关配置也在aws_clientcredential.h #define clientcredentialMQTT_BROKER_ENDPOINT"a215vehc5uw107-ats.iot.us-east-1.amazonaws.com" #define clientcredentialIOT_THING_NAME "RTAWSThing" #define clientcredentialMQTT_BROKER_PORT 8883 5.2 证书及key配置 打开SDK如下路径的文件: SDK_2.8.0_EVK-MIMXRT1060\rtos\freertos\tools\certificate_configuration\CertificateConfigurator.html 图5-1 生成好的aws_clientcredential_keys.h替换原工程中的文件,以MCUXPresso IDE工程为例,文件在如下位置: 图5-2 重新编译工程并且下载到MIMXRT1060-EVK板子中。 六 测试结果 安卓手机下载并安装: SDK_2.8.0_EVK-MIMXRT1060\boards\evkmimxrt1060\aws_examples\remote_control_android\AwsRemoteControl.apk 然后使用手机APP开关LED,测试结果如下: 6.1 手机APP和EVK实物结果 MIMXRT1060-EVK打印结果: 图6-1 开灯和关灯: 图6-2 图6-3 6.2 MQTTfx订阅到的结果 MQTTfx订阅到的数据 开灯两条: 图6-4 图6-5 关灯订阅到两条信息: 图6-6 图6-7 两条信息中,第一条是设置开灯关灯,第二条是EVK回馈灯的具体状态。 也可以直接使用MQTTfx发布:{"state":{"desired":{"LEDstate":1}}}或者{"state":{"desired":{"LEDstate":0}}}到主题: $aws/things/RTAWSThing/shadow/update 实现EVK板上灯的开关。
6.3 AWS云端shadows显示的结果 开灯: 图6-8 关灯: 图6-9 综上,可以完成手机APP远程控制EVK板上LED,并且使用MQTTFX客户端以及云端物影子监控数据情况。
|