1 简介
随着科学技术的快速发展,物联网(IoT)广泛应用于工业、农业、环境、交通、物流、安全以及其他基础设施等各个领域。物联网的使用使我们的生活更加丰富多彩和智能化。物联网的爆发式发展离不开云平台。目前,市场上有很多类型的云服务,例如亚马逊的AWS,微软的Azure,google cloud,中国的阿里云,百度云,OneNet等。
亚马逊AWS云是亚马逊提供的专业云计算服务。为全球各个国家和地区的客户提供全套基础设施和云解决方案。是目前拥有大量用户的云计算。AWS IoT 是一个托管云平台,允许连接的设备轻松、安全地与云应用程序和其他设备交互。
NXP跨界MCU RT产品推出了一系列AWS示例代码。本文主要以官方MIMXRT1060-EVK SDK中的remote_control_wifi_nxp代码为例讲解,实现与AWS物联网云、安卓手机APP、MQTTfx客户端的数据交互。本文的云拓扑如下:
图1-1
2 AWS云运营
2.1 创建 AWS 账户
准备一张信用卡,然后前往下面的亚马逊链接创建一个AWS账户:
https://console.aws.amazon.com/console/home
2.2 创建事物
打开AWS IOT链接:
https://console.aws.amazon.com/iot
选择管理下的物品项,如果是第一次使用,客户可以选择“注册物品”来创建物品。如果之前使用过,顾客可以点击右上角的“创建”按钮来创建该物品。选择“创建单个事物”来创建新事物,更多详情请看下图。
图2-1
图2-2
图2-3
2.3 创建证书
为新创建的事物创建证书,点击下图下方的“创建证书”按钮:
图2-4
证书构建完成后,会有证书创建的信息,表示证书已经生成,可以使用。
图2-5
请注意,下载文件:这个东西的证书,公钥,私钥。
它将用于mqttfx工具配置中。点击“下载AWS的根CA”,下载AWS IoT的根CA,mqttfx工具设置也会用到它。
打开根CA下载链接,可以下载CA证书。
RSA 2048 位密钥: VeriSign Class 3 Public Primary G5 根 CA 证书
图2-6
最后我们可以得到这些文件:
7abfd7a350-证书.pem.crt
7abfd7a350-private.pem.key
7abfd7a350-公钥.pem.密钥
AmazonRootCA1.pem
保存一下,以后会用到。
点击“激活”按钮激活证书,点击“完成”按钮。该政策稍后将附上。
2.4 创建策略
回到iot查看页面:
https://console.aws.amazon.com/iot/
选择安全项下的策略,以创建新策略。
图2-7
输入策略名称,在action区域填写:iot:*,Resource ARN区域填写:*
勾选允许项,点击创建按钮完成新策略的创建。
图2-8
2.5 事物依附关系
在事物、证书、策略创建之后,会将策略附加到证书,并将证书附加到事物。
图2-9
选择安全项下的证书,在对应的证书项中选择“…”,会出现下拉列表,点击“附加策略”,选择刚刚创建的策略。然后点击附加事物,选择新创建的事物。
图2-10
图2-11
图2-12
现在,打开 Mange 项目下的 Things,查看详细的 Things 相关信息。
图2-13
双击该thing,在Interact项中,我们可以找到Rest API Endpoint,RT代码和mqttfx工具将使用这个endpoint实现云连接。
图2-14
检查安全性,你会发现之前创建的证书,说明这个东西已经附加了新的证书:
图2-15
到目前为止,我们已经完成了物联网相关的配置,接下来将用于MQTT fx、Android app、RT EVK板的连接和测试,我们也可以直接在网页中通过AWS shadow查看通信信息。
3 Android相关配置
3.1 AWS cognito配置
如果使用Android应用程序与AWS IoT云通信,AWS端仍然需要使用cognito服务来授权AWS IoT,然后访问设备影子。首先从以下链接创建一个新的身份池:
https://console.aws.amazon.com/cognito https://console.aws.amazon.com/cognito
图3-1
点击“管理身份池”,进入后点击“创建新身份池”
图3-2
图3-3
图3-4
这里会生成两个Role :
Cognito_PoolNameAuth_Role
Cognito_PoolNameUnauth_Role
单击“允许”,完成身份池创建。
图3-5
请记录相关的身份池ID,它将在Android应用程序.properties中使用配置文件。
3.2 在 IAM 中为 cognito 创建副本
打开https://console.aws.amazon.com/iam
点击“访问管理”下的“策略”项
图3-6
选择“create policy”,创建一个IAM策略,在Policy 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 内容中:
区域:图3-5中的us-east-1
ACCOUNT ID,可以在我的账户右上角找到。
图3-8
图3-9
完成 IAM 策略创建后,返回 IAM 策略页面,选择 Filter Policies 作为客户管理,我们可以找到新创建的客户策略。
图3-10
3.3 在 IAM 中附加 Cognito 角色的策略
在 IAM 中,选择角色项:
图3-11
双击在cognito中创建池时生成的cognito_PoolNameUnauth_Role,单击附加策略,选择新创建的策略。
图3-12
图3-13
到目前为止,我们已经完成了AWS cognito的配置。
3.4 Android属性文件配置
创建一个.properties文件,内容为:
customer_specific_endpoint=
cognito_pool_id=
thing_name=
区域=
请填写正确的内容:
REST API 端点:图 2-14
COGNITO POOL ID:fig 3-5
物体名称:图2-14 ,左上角
REGION :图3-5 COGNITO POOL 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
区域=美国东部-1
实际使用时,请使用自己配置的数据,否则会连接到我的云端点。
4. MQTTfx配置和测试
MQTT.fx是一个基于EclipsePaho并用Java语言编写的MQTT客户端工具。支持通过Topic订阅和发布消息。您可以从以下链接下载此工具:
http://mqttfx.jensd.de/index.php/download
新的版本是:1.7.1。
4.1 MQTT.fx 配置
选择连接配置按钮,进入连接配置页面:
图4-1
配置文件名称:输入配置名称
Broker 地址: 即 REST API ENDPOINT 。
代理端口:8883
客户端ID:自由生成
CA文件:即下载的CA证书文件
Client Certificate File:相关证书文件
Client key File:私钥文件
Check PEM formatted。
单击“应用”和“确定”完成配置。
4.2 使用AWS云测试连接
为了测试是否可以连接到事件云,可以进行初步的连接测试。
打开aws页面: https://console.aws.amazon.com/iot
此界面下方有一个测试按钮,可以通过其他客户端或自行测试。AWS 云和 MQTTfx 都订阅主题:$aws/things/RTAWSThing/shadow/update
MQTTfx 将数据发布到主题:$aws/things/RTAWSThing/shadow/update
可以发现云端测试端口和MQTTfx订阅端都可以接收到数据:
图4-2
下面对发布数据进行云端测试,可以看到MQTTFX订阅端和云端订阅端都可以接收到数据:
图4-3
到目前为止,AWS云可以在AWS物联网云和客户端之间传输数据。
5 RT1060及wifi模块配置
我们主要使用RT1060 SDK2.8.0 remote_control_wifi_nxp作为RT测试代码:
SDK_2.8.0_EVK-MIMXRT1060\boards\evkmimxrt1060\aws_examples\remote_control_wifi_nxp
测试平台为:MIMXRT1060-EVK
松下 PAN9026 SDIO 适配器 + SD 转 uSD 适配器
该项目默认使用 Panasonic PAN9026 SDIO ADAPTER。
5.1 WIFI和AWS代码配置
项目需要可用的 WIFI SSID 和密码,因此请准备一个可用的 WIFI。然后在aws_clientcredential.h文件中添加 SSID 和密码。
#define clientcredentialWIFI_SSID “在此处粘贴 WiFi SSID。”
#define clientcredentialWIFI_PASSWORD “在此处粘贴 WiFi 密码。”
AWS 的连接也在文件中:aws_clientcredential.h
#定义客户端凭据MQTT_BROKER_ENDPOINT“a215vehc5uw107-ats.iot.us-east-1.amazonaws.com”
#定义客户端凭据IOT_THING_NAME“RTAWSThing”
#定义客户端凭据MQTT_BROKER_PORT 8883
5.2 证书和密钥配置
打开以下链接的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 板。
6 试验结果
Androd手机下载安装此文件夹下的APK:
SDK_2.8.0_EVK-MIMXRT1060\boards\evkmimxrt1060\aws_examples\remote_control_android\AwsRemoteControl.apk
SDK可以从这个链接下载:
然后,我们可以使用Android应用程序远程控制RT EVK板载LED,测试结果是
6.1 APP和EVK测试结果
MIMXRT1060-EVK printf information:
图6-1
打开和关闭 LED:
图6-2
图6-3
6.2 MQTTfx 订阅结果
MQTTfx 订阅数据
打开LED,我们可以订阅两条消息:
图6-4
图6-5
关闭LED,我们还可以订阅两条消息:
图6-6
图6-7
两条消息中,第一条用于设置LED状态。第二个是用于报告EVK led信息的EVK。
MQTTfx 也可以使用发布页面,发布以下数据:
{"state":{"desired":{"LEDstate":1}}} 或 {"state":{"desired":{"LEDstate":0}}}
到主题:$aws/things/RTAWSThing/shadow/update
还可以实现板载LED的点亮或关闭。
6.3 AWS云阴影显示结果
打开LED:
图6-8
关闭 LED:
图6-9
综上所述,经过上述配置和测试,可以完成安卓手机远程控制RT EVK板载LED并获取信息。也可以使用MQTTFX客户端工具和AWS影子页面检查通信数据。
你好, Vasudhevan G ,
松下 PAN9026 SDIO 适配器 + SD 转 uSD 适配器
SDK默认使用它,你也可以使用:
- AzurWave AW-NM191MA + Murata 美元 M.2 适配器
-AzurWave AW-NM191NF-uSD
或者
- Murata 1DX M.2 module
- Murata uSD M.2 Adapter
希望它能帮到你!
顺祝商祺!
克里
你好,Kerry Zhou,
我们想知道您使用了什么 WiFi 模块。
此致,
瓦苏