低功耗蓝牙演示应用程序 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

低功耗蓝牙演示应用程序

重要

此演示托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您在创建新项目时从这里开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的现有 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南

概览

FreeRTOS 低功耗蓝牙包括三个演示应用程序:

  • 低功耗蓝牙 MQTT 演示

    此应用程序演示如何使用低功耗蓝牙 MQTT 服务。

  • Wi-Fi 预置 演示

    此应用程序演示如何使用低功耗蓝牙预置服务。

  • 通用属性服务器 演示

    此应用程序演示了如何使用 FreeRTOS 蓝牙低功耗中间件 API 来创建简单的 GATT 服务器。

注意

要设置和运行 FreeRTOS 演示,请按照中的步骤操作FreeRTOS 入门

先决条件

要按照这些演示练习,您的微控制器需要具备低功耗蓝牙功能。您还需要 适用于 FreeRTOS 蓝牙设备的 iOS 软件开发适用于 FreeRTOS 蓝牙设备的安卓 SDK

为 FreeRTOS 蓝牙低功耗设置Amazon IoT并使用 Amazon Cognito

要通过 MQTT 将您的设备连接到,您需要进行设置Amazon IoT和 Amazon Cognito。Amazon IoT

设置 Amazon IoT
  1. https://aws.amazon.com/ 上Amazon开设一个账户。

  2. 打开 Amazon IoT 控制台,从导航窗格中,依次选择管理事物

  3. 选择创建,然后选择创建单个事物

  4. 输入您设备的名称,然后选择下一步

  5. 如果您通过移动设备将微控制器连接到云中,请选择创建没有证书的事物。由于移动 SDK 使用 Amazon Cognito 进行设备身份验证,因此您无需为使用低功耗蓝牙的演示创建设备证书。

    如果您直接通过 Wi-Fi 将微控制器连接到云中,请依次选择创建证书激活,然后下载事物的证书、公有密钥和私有密钥。

  6. 从已注册事物列表中选择您刚刚创建的事物,然后从事物的页面中选择交互。记录 Amazon IoT REST API 终端节点。

有关设置的更多信息,请参阅 Amazon IoT 入门

创建 Amazon Cognito 用户池
  1. 打开 Amazon Cognito 控制台,然后选择 “管理用户池”。

  2. 选择 Create a user pool(创建用户池)。

  3. 指定用户池名称,然后选择查看默认值

  4. 在导航窗格中,选择应用程序客户端,然后选择添加应用程序客户端

  5. 输入应用程序客户端的名称,然后选择创建应用程序客户端

  6. 在导航窗格中,选择 审核,然后选择 创建池

    记录在您用户池的常规设置页面中显示的池 ID。

  7. 在导航窗格中,选择应用程序客户端,然后选择显示详细信息。记录应用程序客户端 ID 和应用程序客户端密钥。

创建Amazon Cognito 身份池
  1. 打开 Amazon Cognito 控制台,然后选择 “管理身份池”。

  2. 为身份池输入一个名称。

  3. 展开身份验证提供商,选择 Cognito 选项卡,然后输入您的用户池 ID 和应用程序客户端 ID。

  4. 选择 Create Pool(创建池)。

  5. 展开查看详细信息,记下两个 IAM 角色名称。选择 “允许” 为经过身份验证和未经身份验证的身份创建 IAM 角色以访问 Amazon Cognito。

  6. 选择编辑身份池。记录身份池 ID。其格式应为 us-west-2:12345678-1234-1234-1234-123456789012

有关设置 Amazon Cognito 的更多信息,请参阅A mazon Cognito 入门

创建 IAM 策略并将其附加到经过身份验证的身份
  1. 打开 IAM 控制台,然后从导航窗格中选择 RTOLES(角色)。

  2. 查找并选择您的经过身份验证的角色,然后依次选择附加策略添加内联策略

  3. 选择 JSON 选项卡,然后粘贴以下 JSON:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:AttachPolicy", "iot:AttachPrincipalPolicy", "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource":[ "*" ] } ] }
  4. 选择查看策略,输入策略的名称,然后选择创建策略

随时准备好您Amazon IoT和Amazon Cognito 的信息。您需要终端节点 ID 来对移动应用程序进行 Amazon 云的身份验证。

为低功耗蓝牙设置 FreeRTOS 环境

要设置您的环境,您需要在微控制器上下载 FreeRTOS,然后在移动设备低功耗蓝牙库上下载和配置 FreeRTOS 蓝牙设备的移动 SDK。

使用 FreeRTOS 低功耗蓝牙设置微控制器环境
  1. 从下载或克隆 FreeRTOS GitHub。有关说明,请参阅 README.md 文件。

  2. 在微控制器上设置 FreeRTOS。

    有关在符合 FreeRTOS 标准的微控制器上开始使用 FreeRTOS 的信息,请参阅 FreeRTOS 入门中的主板指南。

    注意

    您可以在任何带有 FreeRTOS 和移植的 FreeRTOS 蓝牙低功耗库的支持低功耗蓝牙的微控制器上运行演示。目前,FreeRTOS低功耗蓝牙 MQTT 演示项目已完全移植到以下支持低功耗蓝牙的设备上:

常见组件

FreeRTOS 演示应用程序有两个常见组件:

  • 网络管理器

  • 低功耗蓝牙移动开发工具包演示应用程序

网络管理器

网络管理器管理微控制器的网络连接。它位于您的 FreeRTOS 目录中,网址为demos/network_manager/aws_iot_network_manager.c。如果为 Wi-Fi 和低功耗蓝牙均启用了网络管理器,则默认情况下通过低功耗蓝牙启动演示。如果低功耗蓝牙连接中断,并且您的主板启用了 Wi-Fi,则网络管理器切换到可用的 Wi-Fi 连接来防止您从网络断开连接。

要使用网络管理器来启用网络连接类型,请将网络连接类型添加到 vendors/vendor/boards/board/aws_demos/config_files/aws_iot_network_config.h 中的 configENABLED_NETWORKS 参数(其中,vendor 是供应商的名称,board 是您用来运行演示的主板的名称)。

例如,如果您同时启用了低功耗蓝牙和 Wi-Fi,则 aws_iot_network_config.h 中以 #define configENABLED_NETWORKS 开头的一行应如下所示:

#define configENABLED_NETWORKS ( AWSIOT_NETWORK_TYPE_BLE | AWSIOT_NETWORK_TYPE_WIFI )

要获取当前支持的网络连接类型列表,请查看 aws_iot_network.h 中以 #define AWSIOT_NETWORK_TYPE 开头的行。

FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序

FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序位于 GitHub FreeRTOS 蓝牙设备的 Android SDK 下方amazon-freertos-ble-android-sdk/app,适用于 FreeRTOS 蓝牙设备的 iOS SDK 位于下方amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo。在本示例中,我们使用 iOS 版本的演示移动应用程序的屏幕截图。

注意

如果您使用的是 iOS 设备,则需要 Xcode 来构建演示移动应用程序。如果您使用的是 Android 设备,则可使用 Android Studio 来构建演示移动应用程序。

配置 iOS 开发工具包演示应用程序

当您定义配置变量时,使用在配置文件中提供的占位符值的格式。

  1. 确认已安装 适用于 FreeRTOS 蓝牙设备的 iOS 软件开发

  2. amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/ 发布以下命令:

    $ pod install
  3. 打开具有 Xcode 的 amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo.xcworkspace 项目,将签名开发人员账户更改为您的账户。

  4. 在您的区域中创建 Amazon IoT 策略(如果您尚未这样做)。

    注意

    此策略不同于为 Amazon Cognito 身份验证身份创建的 IAM 策略。

    1. 打开 Amazon IoT 控制台

    2. 在导航窗格中依次选择安全策略创建。输入用于标识您的策略的名称。在添加语句部分中,选择高级模式。将以下 JSON 复制并粘贴到策略编辑器窗口中。将 aws-regionaws-acc ount 替换为您的Amazon区域和账户 ID。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource":"arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:region:account-id:*" } ] }
    3. 选择 Create(创建)

  5. 打开 amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo/Amazon/AmazonConstants.swift 并重新定义以下变量:

    • region:您的 Amazon 区域。

    • iotPolicyName:您的 Amazon IoT 策略名称。

    • mqttCustomTopic:您要发布到的 MQTT 主题。

  6. 打开 amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo/Support/awsconfiguration.json

    CognitoIdentity 下,重新定义以下变量:

    • PoolId:您的Amazon Cognito 身份池 ID。

    • Region:您的 Amazon 区域。

    CognitoUserPool 下,重新定义以下变量:

    • PoolId:您的Amazon Cognito 用户池 ID。

    • AppClientId:您的应用程序客户端 ID。

    • AppClientSecret:您的应用程序客户端密钥。

    • Region:您的 Amazon 区域。

配置 Android 开发工具包演示应用程序

当您定义配置变量时,使用在配置文件中提供的占位符值的格式。

  1. 确认已安装 适用于 FreeRTOS 蓝牙设备的安卓 SDK

  2. 在您的区域中创建 Amazon IoT 策略(如果您尚未这样做)。

    注意

    此策略不同于为 Amazon Cognito 身份验证身份创建的 IAM 策略。

    1. 打开 Amazon IoT 控制台

    2. 在导航窗格中依次选择安全策略创建。输入用于标识您的策略的名称。在添加语句部分中,选择高级模式。将以下 JSON 复制并粘贴到策略编辑器窗口中。将 aws-regionaws-acc ount 替换为您的Amazon区域和账户 ID。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource":"arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:region:account-id:*" } ] }
    3. 选择 Create(创建)

  3. 打开 https://github.com/aws/amazon-freertos-ble-android-sdk/blob/master/app/src/main/java/software/amazon/freertos/demo/DemoConstants .java 然后重新定义以下变量:

    • AWS_IOT_POLICY_NAME:您的 Amazon IoT 策略名称。

    • AWS_IOT_REGION:您的 Amazon 区域。

  4. 打开 https://github.com/aws/amazon-freertos-ble-android-sdk/blob/master/app/src/main/res/raw/awsconfiguration.json

    CognitoIdentity 下,重新定义以下变量:

    • PoolId:您的Amazon Cognito 身份池 ID。

    • Region:您的 Amazon 区域。

    CognitoUserPool 下,重新定义以下变量:

    • PoolId:您的Amazon Cognito 用户池 ID。

    • AppClientId:您的应用程序客户端 ID。

    • AppClientSecret:您的应用程序客户端密钥。

    • Region:您的 Amazon 区域。

通过低功耗蓝牙发现微控制器并建立安全连接
  1. 为了安全地将微控制器和移动设备配对(步骤 6),您需要一个同时具有输入和输出功能的串行终端仿真器(例如 TeraTerm)。将终端配置为通过串行连接来连接到主板,如安装终端仿真器中所述。

  2. 在您的微控制器上运行低功耗蓝牙演示项目。

  3. 在移动设备上运行低功耗蓝牙移动开发工具包演示应用程序。

    要在 Android 开发工具包中从命令行启动演示应用程序,请运行以下命令:

    $ ./gradlew installDebug
  4. 确认您的微控制器显示在低功耗蓝牙移动开发工具包演示应用程序的 Devices (设备) 下。

    注意

    列表中显示所有带有 FreeRTOS 和设备信息服务 (freertos/.../device_information) 的设备。

  5. 从设备列表中选择您的微控制器。应用程序与主板建立连接,在已连接设备的旁边会显示一根绿色线条。

    您可以通过向左拖动线条来断开与微控制器的连接。

  6. 如果出现提示,请将您的微控制器和移动设备进行配对。

    FreeRTOS 主板

    移动设备

    如果两个设备上用于比较数字的代码相同,则配对这两个设备。

注意

低功耗蓝牙移动 SDK 演示应用程序使用 Amazon Cognito 进行用户身份验证。确保您已设置 Amazon Cognito 用户和身份池,并且已将 IAM 策略附加到经过身份验证的身份。

低功耗蓝牙 MQTT

在基于低功耗蓝牙的 MQTT 演示中,您的微控制器通过 MQTT 代理将消息发布到Amazon云端。

订阅演示 MQTT 主题
  1. 登录 Amazon IoT 控制台。

  2. 在导航窗格中,选择 “测试”,然后选择 MQTT 测试客户端打开 MQTT 客户端。

  3. Subscription topic (订阅主题)中,输入 thing-name/example/topic1,然后选择 Subscribe to topic (订阅主题)

如果您使用低功耗蓝牙将微控制器与移动设备配对,则通过您移动设备上的低功耗蓝牙移动开发工具包演示应用程序来路由 MQTT 消息。

通过低功耗蓝牙启用演示
  1. 打开 vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h 并定义 CONFIG_MQTT_BLE_TRANSPORT_DEMO_ENABLED

  2. 打开demos/include/aws_clientcredential.h并使用Amazon IoT代理端点clientcredentialMQTT_BROKER_ENDPOINT进行配置。clientcredentialIOT_THING_NAME使用 BLE 微控制器设备的事物名称进行配置。Amazon IoT代理端点可以通过选择左侧导航窗格中的 “设置” 从Amazon IoT控制台获取,也可以通过运行命令行通过 CLI 获取:aws iot describe-endpoint --endpoint-type=iot:Data-ATS

    注意

    Amazon IoT代理端点和事物名称必须位于配置 cognito 身份和用户池的同一区域。

运行演示
  1. 在微控制器上生成并运行演示项目。

  2. 确保您已使用 FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序将主板与移动设备配对。

  3. 从演示移动应用程序的 Devices (设备) 列表中,选择您的微控制器,然后选择 MQTT Proxy (MQTT 代理) 以打开 MQTT 代理设置。

  4. 在启用 MQTT 代理之后,MQTT 消息将显示在 thing-name/example/topic1 主题上,并且数据将输出到 UART 终端。

Wi-Fi 预置

Wi-Fi 配置是一项 FreeRTOS 低功耗蓝牙服务,允许您通过低功耗蓝牙安全地将 Wi-Fi 网络凭据从移动设备发送到微控制器。Wi-Fi 预置服务的源代码位于 freertos/.../wifi_provisioning

注意

Espressif ESP32-DevKit C 目前支持 Wi-Fi 配置演示

启用演示
  1. 启用 Wi-Fi 预置服务。打开 vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.h,并将 #define IOT_BLE_ENABLE_WIFI_PROVISIONING 设置为 1(其中,vendor 是供应商的名称,board 是您用来运行演示的主板的名称)。

    注意

    默认情况下禁用 Wi-Fi 预置服务。

  2. 配置 网络管理器 以启用低功耗蓝牙和 Wi-Fi。

运行演示
  1. 在微控制器上生成并运行演示项目。

  2. 确保已使用将微控制器和移动设备配对FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序

  3. 从演示移动应用程序的 Devices (设备) 列表中,选择您的微控制器,然后选择 Network Config (网络配置) 以打开网络配置设置。

  4. 在为主板选择 Network Config (网络配置) 之后,微控制器会将附近的网络列表发送到移动设备。可用 Wi-Fi 网络显示在 Scanned Networks (扫描到的网络) 下的列表中。

    Scanned Networks (扫描到的网络) 列表中选择网络,然后输入 SSID 和密码(如果需要)。

    微控制器连接到网络并保存网络。网络显示在 Saved Networks (已保存网络) 下。

您可以在演示移动应用程序中保存多个网络。在您重新启动应用程序和演示时,微控制器会连接到 Saved Networks (已保存网络) 列表中自上而下的第一个可用的已保存网络。

要更改网络优先级顺序或者删除网络,请在 Network Configuration (网络配置) 页面上选择 Editing Mode (编辑模式)。要更改网络优先级顺序,请选择您要重排优先级的网络的右侧,然后向上或向下拖动网络。要删除网络,请选择待删除网络左侧的红色按钮。

通用属性服务器

在本示例中,您的微控制器上的演示通用属性 (GATT) 服务器应用程序发送简单的计数值到 FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序

使用低功耗蓝牙移动开发工具包,您可以为连接到微控制器上 GATT 服务器的移动设备创建自己的 GATT 客户端,并与演示移动应用程序并行运行。

启用演示
  1. 启用低功耗蓝牙 GATT 演示。在 vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.h( 其中,vendor 是供应商的名称,board 是您用来运行演示的主板的名称)中,将 #define IOT_BLE_ADD_CUSTOM_SERVICES ( 1 ) 添加到定义语句的列表中。

    注意

    低功耗蓝牙 GATT 演示在默认情况下处于禁用状态。

  2. 打开 freertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h,注释掉 #define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED 并定义 CONFIG_BLE_GATT_SERVER_DEMO_ENABLED

运行演示
  1. 在微控制器上生成并运行演示项目。

  2. 确保您已使用 FreeRTOS 蓝牙低功耗移动 SDK 演示应用程序将主板与移动设备配对。

  3. 从应用程序的 Devices (设备) 列表中,选择您的主板,然后选择 MQTT Proxy (MQTT 代理) 以打开 MQTT 代理选项。

  4. 返回到 Devices (设备) 列表,选择您的主板,然后选择 Custom GATT MQTT (自定义 GATT MQTT) 以打开自定义 GATT 服务选项。

  5. 选择 Start Counter (启动计数器) 以开始将数据发布到 your-thing-name/example/topic MQTT 主题。

    在启用 MQTT 代理之后,Hello World 和递增计数消息将显示在 your-thing-name/example/topic 主题上。