本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
低功耗藍牙示範應用程式
重要
此演示託管在亞馬遜的 FreeRTOS 存儲庫上,該存儲庫已被棄用。我們建議您在建立新專案時從這裡開始。如果您已經有一個現有的 FreeRTOS 專案以目前已取代的亞馬遜免費伺服器儲存庫為基礎,請參閱. 亞馬遜自由 Github 存儲庫遷移指南
概觀
FreeRTOS 低功耗藍牙包括三個示範應用程式:
注意
若要設定並執行 FreeRTOS 示範,請遵循中的步驟。FreeRTOS 入
必要條件
若要遵循這些示範,您需要使用微型控制器搭配低功耗藍牙功能。您還需具備 適用於免費藍牙裝置的 iOS 開發套件或 適用於免費藍牙設備的安卓 SDK。
為 FreeRTOS 低功耗藍牙設置 AWS IoT 和 Amazon Cognito
要將您的設備連接到 AWS IoT 跨 MQTT,您需要設置 AWS IoT 和 Amazon Cognito。
若要設定 AWS IoT
-
在 https://aws.amazon.com/
上設置一個 AWS 帳戶。 -
開啟 AWS IoT 主控台
,然後從導覽窗格中,選擇 Manage (管理),然後選擇 Things (實物)。 -
選擇 Create (建立),然後選擇 Create a single thing (建立單一實物)。
-
輸入您裝置的名稱,然後選擇 Next (下一步)。
-
如果您是透過行動裝置將微型控制器連接到雲端,請選擇 Create thing without certificate (建立沒有憑證的物件)。由於行動開發套件使用 Amazon Cognito 進行裝置身份驗證,因此您不需要為使用藍牙低功耗的示範建立裝置憑證。
如果您是透過 Wi-Fi 直接將微型控制器連接到雲端,則請選擇 Create certificate (建立憑證),再選擇 Activate (啟動),然後下載物件的憑證、公開金鑰和私密金鑰。
-
從已註冊的實物清單中選擇您剛建立的實物,然後從實物的頁面中選擇 Interact (互動)。記下 AWS IoT 其餘 API 端點。
如需有關設定的詳細資訊,請參閱入門 AWS IoT。
若要建立 Amazon Cognito 用者集區
-
開啟 Amazon Cognito 主控台,然後選擇「管理使用者集區」。
-
選擇 Create a user pool (建立使用者集區)。
-
為使用者集區提供一個名稱,然後選擇 Review defaults (檢閱預設值)。
-
從導覽窗格中選擇 App clients (應用程式用戶端),然後選擇 Add an app client (新增應用程式用戶端)。
-
輸入應用程式用戶端的名稱,然後選擇 Create app client (建立應用程式用戶端)。
-
從導覽窗格中選擇 Review (檢閱),然後選擇 Create pool (建立集區)。
記下使用者集區之 General Settings (一般設定) 頁面上出現的集區 ID。
-
從導覽窗格中選擇 App clients (應用程式用戶端),然後選擇 Show details (顯示詳細資訊)。記下應用程式用戶端 ID 和應用程式用戶端密碼。
若要建立 Amazon Cognito 身分集區
-
開啟 Amazon Cognito 主控台,然後選擇管理身分集區。
-
輸入身分集區的名稱。
-
展開 Authentication providers (驗證供應商)、選擇 Cognito 標籤,然後輸入您的使用者集區 ID 和應用程式用戶端 ID。
-
選擇 Create Pool (建立集區)。
-
展開 View Details (檢視詳細資訊),並記下兩個 IAM 角色名稱。選擇允許為已驗證和未驗證的身分建立 IAM 角色,以存取 Amazon Cognito。
-
選擇 Edit identity pool (編輯身分集區)。記下身分集區 ID。其格式應為
us-west-2:12345678-1234-1234-1234-123456789012
。
如需有關設定 Amazon Cognito 的詳細資訊,請參閱 Amazon Cognito 入門。
建立 IAM 政策並將其附加至已驗證身分
-
開啟 IAM 主控台,然後從導覽窗格中選擇 [角色]。
-
尋找並選擇您已驗證身分的角色、選擇 Attach policies (連接政策),然後選擇 Add inline policy (新增內嵌政策)。
-
選擇 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":[ "*" ] } ] }
-
選擇 Review policy (檢閱政策)、輸入政策的名稱,然後選擇 Create policy (建立政策)。
保持您 AWS IoT 和 Amazon Cognito 信息在手。您需要端點和 ID,才能透過 AWS 雲端驗證您的行動應用程式。
為低功耗藍牙設定 FreeRTOS 環境
若要設定您的環境,您需要在您的微控制器低功耗藍牙程式庫上下載 FreeRTOS,並在您的行動裝置上下載並設定 FreeRTOS 藍牙裝置的行動 SDK。
使用 FreeRTOS 低功耗藍牙設定微控制器的環境
-
在微控制器上設定 FreeRTOS。
如需在 FreeRTOS 合格微控制器上開始使用 FreeRTOS 的相關資訊,請參閱 FreeRTOS 入門中適用的主機板指南。
注意
您可以在任何支援 FreeRTOS 的藍牙低功耗微控制器上執行示範,以及已移植的 FreeRTOS 低功耗藍牙程式庫。FreeRTOS 透過低功耗藍牙執行的 MQTT 示範專案目前已完全移植到下列啟用藍牙低功耗的裝置:
常見元件
FreeRTOS 示範應用程式有兩個常見的元件:
-
Network Manager
-
低功耗藍牙 Mobile SDK 示範應用程式
Network Manager
網路管理員可管理您的微型控制器的網路連線。它位於您的 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.hconfigENABLED_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
的那幾行。
免費藍牙低功耗移動 SDK 演示應用程序
該 FreeRTOS 藍牙低功耗移動 SDK 演示應用程序位 GitHub 於下 FreeRTOS 藍牙設備的 Android SDKamazon-freertos-ble-android-sdk/app
和下的 iOS SDK FreeRTOS 藍牙設amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo
在本範例中,我們會使用 iOS 版示範行動應用程式的螢幕擷取畫面。
注意
如果您使用 iOS 裝置,您需要 Xcode 來建置示範行動應用程式。如果您使用 Android 裝置,您可以使用 Android Studio 來建置示範行動應用程式。
設定 iOS SDK 示範應用程式
當您定義組態變數時,請使用組態檔案中提供之預留位置值的格式。
-
確認已安裝 適用於免費藍牙裝置的 iOS 開發套件。
-
從
amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/
發出下列命令:$ pod install
-
使用 Xcode 開啟
amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo.xcworkspace
專案,並將簽署開發人員帳戶變更為您的帳戶。 -
在您所在地區建立 AWS IoT 政策 (如果您尚未建立)。
注意
此政策與針對 Amazon Cognito 驗證身分建立的 IAM 政策不同。
-
開啟 AWS IoT 主控台
。 -
在瀏覽窗格中,選擇 [安全],選擇 [原則],然後選擇 [建立]。輸入可識別政策的名稱。在 Add statements (新增陳述式) 區段中,選擇 Advanced mode (進階模式)。將下列 JSON 複製並貼入政策編輯器視窗。將
aws-region
和 AWS 帳戶替換為您的 AWS 地區和帳戶
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
:*" } ] } -
選擇建立。
-
-
開啟
amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo/Amazon/AmazonConstants.swift
並重新定義以下變數:-
region
:您的 AWS 地區。 -
iotPolicyName
:您的 AWS IoT 策略名稱。 -
mqttCustomTopic
:您想要發佈至其中的 MQTT 主題。
-
-
打開
amazon-freertos-ble-ios-sdk/Example/AmazonFreeRTOSDemo/AmazonFreeRTOSDemo/Support/awsconfiguration.json
.在
CognitoIdentity
下,重新定義以下變數:-
PoolId
:您的 Amazon Cognito 身份集區 ID。 -
Region
:您的 AWS 地區。
在
CognitoUserPool
下,重新定義以下變數:-
PoolId
:您的 Amazon Cognito 戶集區 ID。 -
AppClientId
:您的應用程式用戶端 ID。 -
AppClientSecret
:您的應用程式用戶端密碼。 -
Region
:您的 AWS 地區。
-
設定 Android SDK 示範應用程式
當您定義組態變數時,請使用組態檔案中提供之預留位置值的格式。
-
確認已安裝 適用於免費藍牙設備的安卓 SDK。
-
在您所在地區建立 AWS IoT 政策 (如果您尚未建立)。
注意
此政策與針對 Amazon Cognito 驗證身分建立的 IAM 政策不同。
-
開啟 AWS IoT 主控台
。 -
在瀏覽窗格中,選擇 [安全],選擇 [原則],然後選擇 [建立]。輸入可識別政策的名稱。在 Add statements (新增陳述式) 區段中,選擇 Advanced mode (進階模式)。將下列 JSON 複製並貼入政策編輯器視窗。將
aws-region
和 AWS 帳戶替換為您的 AWS 地區和帳戶
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
:*" } ] } -
選擇建立。
-
-
開啟DemoConstants以
下變數:https://github.com/aws/amazon-freertos-ble-android-sdk/blob/master/app/src/main/java/software/amazon/freertos/demo/ -
AWS_IOT_POLICY_NAME
:您的 AWS IoT 策略名稱。 -
AWS_IOT_REGION
:您的 AWS 地區。
-
-
打開以下位
置。https://github.com/aws/amazon-freertos-ble-android-sdk/blob/master/app/src/main/res/raw/awsconfiguration.json 在
CognitoIdentity
下,重新定義以下變數:-
PoolId
:您的 Amazon Cognito 身份集區 ID。 -
Region
:您的 AWS 地區。
在
CognitoUserPool
下,重新定義以下變數:-
PoolId
:您的 Amazon Cognito 戶集區 ID。 -
AppClientId
:您的應用程式用戶端 ID。 -
AppClientSecret
:您的應用程式用戶端密碼。 -
Region
:您的 AWS 地區。
-
透過低功耗藍牙探索並建立微型控制器的安全連線
-
為了安全地配對您的微控制器和移動設備(步驟 6),您需要一個具有輸入和輸出功能(例如 TeraTerm)的串行終端仿真器。依照安裝終端機模擬器中的指示,將終端機設定為透過序列連線連接到您的電路板。
-
在微型控制器上執行低功耗藍牙示範專案。
-
在行動裝置上執行低功耗藍牙 Mobile SDK示範應用程式。
若要從命令列啟動 Android SDK 中的示範應用程式,請執行下列命令:
$ ./gradlew installDebug
-
確認低功耗藍牙 Mobile SDK 示範應用程式的 Devices (裝置) 底下有顯示您的微型控制器。
注意
所有具有 FreeRTOS 的裝置和位於範圍內的裝置資訊服務 (
) 都會出現在清單中。freertos
/.../device_information -
從裝置清單選擇您的微型控制器。應用程式會與主機板建立連線,而所連線的裝置旁會出現綠色線條。
您可以通過將線向左拖動來斷開與微控制器的連接。
-
如果出現提示,請將您的微型控制器與行動裝置進行配對。
自由主機板
行動裝置
如果兩個裝置上用來比較數字的程式碼相同,系統即會配對裝置。
注意
藍牙低功耗行動 SDK 示範應用程式使用 Amazon Cognito 進行使用者身份驗證。請確定您已設定 Amazon Cognito 使用者和身分集區,並且已將 IAM 政策附加到身分驗證身分。
透過低功耗藍牙執行的 MQTT
在透過藍牙低功耗的 MQTT 示範中,您的微控制器會透過 MQTT 代理將訊息發佈到 AWS 雲端。
訂閱示範 MQTT 主題
-
登入 AWS IoT 主控台。
-
在導覽窗格中,選擇 [測試],然後選擇 [MQTT 測試用戶端] 以開啟 MQTT 用戶端。
-
在訂閱主題中輸入
,然後選擇訂閱主題。thing-name
/example/topic1
如果您是使用低功耗藍牙來配對微型控制器與行動裝置,則系統會在行動裝置上透過低功耗藍牙 Mobile SDK 示範應用程式路由 MQTT 訊息。
透過藍牙低功耗啟用示範
-
開啟
vendors/
,然後定義vendor
/boards/board
/aws_demos/config_files/aws_demo_config.hCONFIG_MQTT_BLE_TRANSPORT_DEMO_ENABLED
。 -
開啟
demos/include/aws_clientcredential.h
並clientcredentialMQTT_BROKER_ENDPOINT
使用 AWS IoT Broker 端點進行設定。clientcredentialIOT_THING_NAME
使用 BLE 微控制器裝置的物件名稱進行設定。您可以從 AWS IoT 主控台取得 AWS IoT Broker 端點,方法是選擇左側導覽窗格中的 [設定],或透過 CLI 執行命令:aws iot describe-endpoint --endpoint-type=iot:Data-ATS
。注意
AWS IoT Broker 端點和物件名稱必須位於設定認知識識別和使用者集區的相同區域中。
執行示範
-
在微型控制器上建置和執行示範專案。
-
確保已使用 免費藍牙低功耗移動 SDK 演示應用程序 將您的主機板與行動裝置配對。
-
從示範行動應用程式中的 Devices (裝置) 清單選擇微型控制器,接著選擇 MQTT Proxy 以開啟 MQTT Proxy 設定。
-
啟用 MQTT Proxy 後,MQTT 訊息即會顯示在
主題上,且系統會將資料列印到 UART 終端機。thing-name
/example/topic1
Wi-Fi 佈建
Wi-Fi 佈建是 FreeRTOS 低功耗藍牙服務,可讓您透過低功耗藍牙將 Wi-Fi 網路憑證從行動裝置安全地傳送至微控制器。您可以在
中找到 Wi-Fi 佈建服務的原始程式碼。freertos
/.../wifi_provisioning
注意
無線網絡佈建演示目前在壓縮咖啡 ESP32-C 上支持。DevKit
啟用示範
-
啟用 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 佈建服務會處於停用狀態。
-
設定 Network Manager,即可同時啟用低功耗藍牙和 Wi-Fi。
執行示範
-
在微型控制器上建置和執行示範專案。
-
請確定您已使用微控制器和行動裝置配對。免費藍牙低功耗移動 SDK 演示應用程序
-
從示範行動應用程式的 Devices (裝置) 清單中選擇您的微型控制器,然後選擇 Network Config (網路組態) 以開啟網路組態設定。
-
選擇主機板的 Network Config (網路組態) 後,微型控制器會傳送鄰近的網路清單至行動裝置。可用的 Wi-Fi 網路會出現在 Scanned Networks (掃描的網路) 下的清單中。
從 Scanned Networks (掃描的網路) 清單中,選擇您的網路,然後輸入 SSID 和密碼 (如果必要)。
微控制器連接並保存網絡。網路會出現在 Saved Networks (儲存的網路) 下。
您可以將數個網路儲存在示範行動應用程式中。重新啟動應用程式和示範時,微型控制器會連接到第一個可用的已儲存網路,從 Saved Networks (儲存的網路) 清單的頂端開始。
若要變更網路優先順序或刪除網路,請在 Network Configuration (網路組態) 頁面上,選擇 Editing Mode (編輯模式)。若要變更網路的優先順序,請選擇您要重新設定優先順序的網路右側,並將網路往上或往下拖曳。若要刪除網路,請選擇您要刪除的網路左側的紅色按鈕。
![Wifi 網絡設置屏幕顯示保存的網絡,刪除或更改優先級的編輯選項以及掃描的網絡。](images/ble-network-editing.png)
一般屬性伺服器
在本範例中,微型控制器上的示範一般屬性 (GATT) 伺服器應用程式會傳送一個簡單的計數器值至 免費藍牙低功耗移動 SDK 演示應用程序。
透過低功耗藍牙 Mobile SDK,您可以為連接至微型控制器上 GATT 伺服器的行動裝置建立自己的 GATT 用戶端,並同時執行示範行動應用程式。
啟用示範
-
啟用低功耗藍牙 GATT 示範。在
vendors/
(其中vendor
/boards/board
/aws_demos/config_files/iot_ble_config.hvendor
是廠商名稱,而board
是您用來執行示範的主機板名稱) 中,將#define IOT_BLE_ADD_CUSTOM_SERVICES ( 1 )
新增至 define 陳述式的清單。注意
在預設情況下,低功耗藍牙 GATT 示範會處於停用狀態。
-
開啟
、註解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
。
執行示範
-
在微型控制器上建置和執行示範專案。
-
確保已使用 免費藍牙低功耗移動 SDK 演示應用程序 將您的主機板與行動裝置配對。
-
從應用程式中的 Devices (裝置) 清單選擇主機板,然後選擇 MQTT Proxy 以開啟 MQTT Proxy 選項。
-
返回 Devices (裝置) 清單並選擇主機板,然後選擇 Custom GATT MQTT (自訂 GATT MQTT) 以開啟自訂 GATT 服務選項。
-
選擇 Start Counter (啟動計數器),即可開始發佈資料到
MQTT 主題。your-thing-name
/example/topic啟用 MQTT Proxy 之後,Hello World 和遞增的計數器訊息會顯示在
主題上。your-thing-name
/example/topic