

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

# 运行低功耗蓝牙测试
<a name="afr-bridgekeeper-dt-bt"></a>

本节介绍如何使用 AWS IoT Device Tester FreeRTOS设置和运行低功耗蓝牙测试。

 核心资格认证不需要蓝牙测试。如果您不想使用 FreeRTOS 蓝牙支持测试您的设备，则可跳过此设置，确保将 device.json 中的 BLE 功能设置为 `No`。

## 先决条件
<a name="dt-bt-prereq"></a>
+ 按照[首次测试微控制器主板](qual-steps.md)中的说明进行操作。
+ 一个 Raspberry Pi 4B 或 3B\$1。（运行 Raspberry Pi BLE 配套应用程序时必需）
+ 一个适用于 Raspberry Pi 软件的 microSD 卡和 SD 卡适配器。

 

## Raspberry Pi 设置
<a name="dt-bt-pi-setup"></a>

要测试受测设备 (DUT) 的 BLE 功能，您必须拥有 Raspberry Pi Model 4B 或 3B\$1。

**设置 Raspberry Pi 以运行 BLE 测试**

1. 下载包含执行测试所需的软件的自定义 Yocto 映像之一。
   + [Raspberry Pi 4B 的映像](https://docs.aws.amazon.com/freertos/latest/userguide/freertos/IDTFR_BLE_RaspberryPi4B_1.0.0_2021-04-13.rpi-sd.img) 
   + [Raspberry Pi 3B\$1 的映像](https://docs.aws.amazon.com/freertos/latest/userguide/freertos/IDTFR_BLE_RaspberryPi3Bplus_1.0.0_2021-04-13.rpi-sd.img) 
**注意**  
Yocto 镜像只能用于 AWS IoT Device Tester FreeRTOS 进行测试，不能用于任何其他目的。

1. 将 yocto 映像刷写到 Raspberry Pi 的 SD 卡。

   1. 通过使用 SD 卡写入工具（例如 [Etcher](https://www.balena.io/etcher)），将下载的 `image-name.rpi-sd.img` 文件刷写到 SD 卡中。由于操作系统映像很大，因此，该步骤可能需要一些时间。然后，从您的计算机中弹出 SD 卡，然后将 microSD 卡插入您的 Raspberry Pi 上。

1. 配置您的 Raspberry Pi。

   1. 对于第一次启动，我们建议您将 Raspberry Pi 连接到显示器、键盘和鼠标。

   1. 将您的 Raspberry Pi 连接到微型 USB 电源。

   1. 使用默认凭证登录。对于用户 ID，请输入 **root**。对于密码，请输入 **idtafr**。

   1. 通过使用以太网或 Wi-Fi 连接，将 Raspberry Pi 连接到您的网络。

      1. 要通过 Wi-Fi 连接您的 Raspberry Pi，请在 Raspberry Pi 上打开 `/etc/wpa_supplicant.conf`，并将您的 Wi-Fi 凭证添加到 `Network` 配置。

         ```
         ctrl_interface=/var/run/wpa_supplicant
         ctrl_interface_group=0
         update_config=1
         
         network={
                 scan_ssid=1
                 ssid="your-wifi-ssid"
                 psk="your-wifi-password"
                 }
         ```

      1. 运行 `ifup wlan0` 以启动 Wi-Fi 连接。连接到 Wi-Fi 网络可能需要一分钟。

   1. 对于以太网连接，请运行 `ifconfig eth0`。对于 Wi-Fi 连接，请运行 `ifconfig wlan0`。记下 IP 地址，它在命令输出中显示为 `inet addr`。您在本过程的后面部分需要该 IP 地址。

   1. （可选）测试使用 yocto 映像的默认凭证通过 SSH 在 Raspberry Pi 上执行命令。为了提高安全性，我们建议您为 SSH 设置公有密钥身份验证并禁用基于密码的 SSH。

      1. 使用 OpenSSL `ssh-keygen` 命令创建 SSH 密钥。如果你的主机上已经有一个 SSK 密钥对，那么最好创建一个新的 SSK 密钥对，让 FreeRTOS 登录你 AWS IoT Device Tester 的 Raspberry Pi。
**注意**  
Windows 未预装 SSH 客户端。有关如何在 Windows 上安装 SSH 客户端的信息，请参阅[下载 SSH 软件](https://www.ssh.com/ssh/#sec-Download-client-software)。

      1. `ssh-keygen` 命令会提示您输入要存储密钥对的名称和路径。默认情况下，密钥对文件的名称为 `id_rsa`（私有密钥）和 `id_rsa.pub`（公有密钥）。在 macOS 和 Linux 上，这些文件的默认位置为 `~/.ssh/`。在 Windows 上，默认位置为 `C:\Users\user-name`。

      1. 当系统提示您输入密钥短语时，请按 Enter 以继续。

      1. 要将你的 SSH 密钥添加到 Raspberry Pi 上，让 FreeRTOS 可以登录设备，请使用`ssh-copy-id`主机上的命令。 AWS IoT Device Tester 此命令会将您的公有密钥添加到 Raspberry Pi 上的 `~/.ssh/authorized_keys` 文件中。

         `ssh-copy-id root@raspberry-pi-ip-address`

      1. 当系统提示您输入密码时，请输入 **idtafr**。这是 yocto 映像的默认密码。
**注意**  
`ssh-copy-id` 命令假定公有密钥的名称为 `id_rsa.pub`。在 macOS 和 Linux 上，默认位置为 ` ~/.ssh/`。在 Windows 上，默认位置为 `C:\Users\user-name\.ssh`。如果公有密钥采用其他名称或存储在其他位置，则必须使用 `-i` 选项与 `ssh-copy-id` 指定 SSH 公有密钥的完全限定路径（例如，`ssh-copy-id -i ~/my/path/myKey.pub`）。有关创建 SSH 密钥和复制公有密钥的更多信息，请参阅 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

      1. 要测试公有密钥身份验证是否有效，请运行 `ssh -i /my/path/myKey root@raspberry-pi-device-ip`。

         如果系统未提示您输入密码，则公有密钥身份验证有效。

      1. 验证您是否能使用公有密钥登录 Raspberry Pi，然后禁用基于密码的 SSH。

         1. 在 Raspberry Pi 中，编辑 `/etc/ssh/sshd_config` 文件。

         1. 将 `PasswordAuthentication` 属性设置为 `no`。

         1. 保存并关闭 `sshd_config` 文件。

         1. 通过运行 `/etc/init.d/sshd reload` 重新加载 SSH 服务器。

   1. 创建 `resource.json` 文件。

      1. 在提取 AWS IoT 设备测试器的目录中，创建一个名为的文件`resource.json`。

      1. 将以下有关树莓派的信息添加到文件中，*rasp-pi-ip-address*替换为 Raspberry Pi 的 IP 地址。

         ```
         [
             {
                 "id": "ble-test-raspberry-pi",
                 "features": [
                     {"name":"ble", "version":"4.2"}
                 ],
                 "devices": [
                     {
                         "id": "ble-test-raspberry-pi-1",
                         "connectivity": {
                             "protocol": "ssh",
                             "ip": "rasp-pi-ip-address"
                         }
                     }
                 ]
             }
         ]
         ```

      1. 如果您未选择对 SSH 使用公有密钥身份验证，请将以下内容添加到 `resource.json` 文件的 `connectivity` 部分。

         ```
         "connectivity": {
             "protocol": "ssh",
             "ip": "rasp-pi-ip-address",
             "auth": {
                 "method": "password",
                 "credentials": {
                     "user": "root",
                     "password": "idtafr"
                 }
             }
         }
         ```

      1. （可选）如果您对 SSH 使用公有密钥身份验证，请将以下内容添加到 `resource.json` 文件的 `connectivity` 部分。

         ```
         "connectivity": {
             "protocol": "ssh",
             "ip": "rasp-pi-ip-address",
             "auth": {
                 "method": "pki",
                 "credentials": {
                     "user": "root",
                     "privKeyPath": "location-of-private-key"
                 }
             }
         }
         ```

## FreeRTOS 设备设置
<a name="afr-device-setup"></a>

在 `device.json` 文件中，将 `BLE` 功能设置为 `Yes`。如果您在蓝牙测试可用前开始使用 `device.json` 文件，您需要将 BLE 功能添加到 `features` 数组：

```
{
    ...
    "features": [
        {
            "name": "BLE",
            "value": "Yes"
        },
    ...
}
```

## 运行 BLE 测试
<a name="running-ble-test"></a>

在 `device.json` 中启用 BLE 功能后，在*不指定群组 ID 的情况下*运行 `devicetester_[linux | mac | win_x86-64] run-suite` 时，BLE 测试将运行。

如果要单独运行 BLE 测试，可以为 BLE 指定组 ID：`devicetester_[linux | mac | win_x86-64] run-suite --userdata path-to-userdata/userdata.json --group-id FullBLE`。

要获得最可靠的性能，请将 Raspberry Pi 放置在受测设备 (DUT) 附近 。

## 对 BLE 测试进行故障排除
<a name="troubleshooting-ble"></a>

确保您已执行[首次测试微控制器主板](qual-steps.md)中的步骤。如果 BLE 以外的测试失败，则问题很可能与蓝牙配置无关。