用于 STM32Cube 的 Google Cloud Platform擴(kuò)展包入門
引言
本用戶手冊描述 STM32Cube? 擴(kuò)展包的內(nèi)容,該擴(kuò)展包用于 Google Cloud Platform?(gcP)Google Cloud IoT Core 的服務(wù)。用于 gcP 的 STM32Cube 擴(kuò)展包(X-CUBE-gcP)提供了將 STMicroelectronics 板卡連接到 Google Cloud Platform? 的 Google Cloud IoT Core 的應(yīng)用示例。它將 MQTT 客戶端庫移植到相應(yīng)的 STM32 器件上去實(shí)現(xiàn)與云平臺的連接。?
X-CUBE-gcP 可在五個平臺上運(yùn)行:?
通過Inventek ISM43362 模塊支持Wi-Fi?連接的B-L475E-IOT01A和 32F413HDISCOVERY 板?
提供原生以太網(wǎng)接口的 32F769IDISCOVERY 板?
P-L496G-CELL01 和 P-L496G-CELL02 探索包分別通過 2G/3G(UG96)和 LTE(BG96)Quectel 蜂窩調(diào)制解調(diào)器子板支持蜂窩連接?
對于這五個平臺,應(yīng)用示例配置了網(wǎng)絡(luò)連接參數(shù),并說明了設(shè)備與gcP交互的各種方式。?
該擴(kuò)展包包含了設(shè)備到云端的遙測數(shù)據(jù)報(bào)告、用于安全連接云端的云端到設(shè)備的消息、向云端發(fā)送命令和從連接的設(shè)備接收通知的實(shí)現(xiàn)示例。?
B-L475E-IOT01A 板報(bào)告遙測數(shù)據(jù),例如濕度、溫度和大氣壓力測量值。
1、概述?
用于 Google Cloud Platform? 的 Google Cloud IoT Core 的 X-CUBE-gcP 擴(kuò)展包在基于 Arm? Cortex?-M 處理器 的 STM32 32位微控制器上運(yùn)行。表 1 給出了相關(guān)縮略語的定義,幫助您更好地理解本文檔。

2、Google Cloud Platform?
本章介紹 Google Cloud Platform? 的 Google Cloud IoT Core。與 Google Cloud Platform?(gcP)相關(guān)的詳細(xì)信息可從 Google Cloud? 專用網(wǎng)站cloud.google.com 下載。X-CUBE-gcP 實(shí)現(xiàn)嵌入式C客戶端,能夠?qū)灏踩剡B接到gcP 的 Google Cloud IoT Core。X-CUBE-gcP 所針對的gcP生態(tài)系統(tǒng)如圖 1 所示。

用戶可以使用智能手機(jī)或個人計(jì)算機(jī)連接到云端,并可以隨時隨地訪問該板提供的信息。Google Cloud? 在gcP在線文檔中展示的 Google Cloud IoT Core 如圖 2 所示。

注意 ?2018 Google LLC,經(jīng)許可使用。Google 和 Google 徽標(biāo)是 Google LLC. 的注冊商標(biāo) X-CUBE-gcP 實(shí)現(xiàn)必要的服務(wù),將設(shè)備連接到圖 2 中用藍(lán)色框出的生態(tài)系統(tǒng)部分。
特別是,該擴(kuò)展包演示了如何配置 gcP 的 IoT Core 服務(wù),以便將設(shè)備安全地連接到 Google Cloud IoT Core 服 務(wù)。設(shè)備使用私鑰(ECDSA 或 RSA)簽署連接云平臺時需要的 JWT(JSON 網(wǎng)絡(luò)令牌)。Cloud IoT Core 通過在設(shè)備 創(chuàng)建過程中上傳到云服務(wù)的相應(yīng)公鑰驗(yàn)證設(shè)備的 JWT。X-CUBE-gcP 還提供了示例,展示了如何使用數(shù)據(jù)格式和使用 MQTT 協(xié)議在設(shè)備與 IoT Core 元件之間交換數(shù)據(jù), 將遙測數(shù)據(jù)發(fā)送到云端,以及從云端接收配置數(shù)據(jù)。發(fā)送到 Cloud IoT Core 的數(shù)據(jù)隨后可通過 Pub/Sub(發(fā)布/訂 閱)服務(wù)發(fā)布,并能在日后需要使用時通過網(wǎng)絡(luò)應(yīng)用進(jìn)行訪問。用于數(shù)據(jù)分析和使用的網(wǎng)絡(luò)應(yīng)用的開發(fā)不在 XCUBE-gcP 的范圍之內(nèi)。
3、軟件包說明
本章詳述了 X-CUBE-gcP 擴(kuò)展包的內(nèi)容和使用。
3.1 概述?
X-CUBE-gcP 擴(kuò)展包由多系列的基于 STM32L4 系列,STM32F4 系列和 STM32F7 系列微控制器的庫和應(yīng)用示例組成。?
X-CUBE-gcP 可在五個平臺上運(yùn)行:?
通過 Inventek ISM43362 模塊支持 Wi-Fi?連接的 B-L475E-IOT01A 和 32F413HDISCOVERY 板?
提供原生以太網(wǎng)接口的 32F769IDISCOVERY 板?
P-L496G-CELL01 和 P-L496G-CELL02 包分別通過 Quectel 的 2G/3G UG96 和 LTE BG96 蜂窩調(diào)制解調(diào)器子板支持蜂窩連接。用于連接 2G/3G 蜂窩網(wǎng)絡(luò)與云端的 P-L496G-CELL01 STM32 探索包(STM32-C2C/ 2G-3G)和用于連接 LTE 蜂窩網(wǎng)絡(luò)與云端的 P-L496G-CELL02 STM32 探索包(STM32-C2C/2G-LTE)是基于蜂窩網(wǎng)絡(luò)和云技術(shù)的解決方案的完整開發(fā)平臺。探索包內(nèi)含一個基于 STM32L496AGI6 的帶預(yù)加載固件的低功耗探索主板和一個帶天線的 STMod+ 蜂窩網(wǎng)絡(luò)擴(kuò)展板。?
X-CUBE-gcP 擴(kuò)展包包含以下組件:?
Eclipse? Paho MQTT 嵌入式 C 客戶端?
mbedTLS?
用于 B-L475E-IOT01A 和 32F413HDISCOVERY 板的 Inventek ISM43362 Wi-Fi?驅(qū)動程序?
用于 32F769IDISCOVERY 板的以太網(wǎng)驅(qū)動程序、FreeRTOS?和 LwIP?
用于 B-L475E-IOT01A 板的傳感器驅(qū)動 ? 用于 P-L496G-CELL01 和 P-L496G-CELL02 套件的蜂窩網(wǎng)絡(luò)驅(qū)動程序?
用于所有 MCU 板的 BSP?
STM32L4 系列、STM32F4 系列,和 STM32F7 系列 HAL?
應(yīng)用程序示例
軟件以 zip 文檔的形式提供,其中包含源代碼??芍С忠韵录砷_發(fā)環(huán)境:
IAR Embedded Workbench? 對于 Arm?(EWARM)?
Keil?微控制器開發(fā)套件(MDK-ARM)?
System Workbench for STM32 有關(guān)所支持 IDE 版本的信息,請參閱軟件包根文件夾中的版本說明。
有關(guān)所支持 IDE 版本的信息,請參閱軟件包根文件夾中的版本說明。
3.2 架構(gòu)
本節(jié)介紹 X-CUBE-gcP 中的軟件組件。X-CUBE-gcP 是 STM32Cube? 的擴(kuò)展軟件。其主要功能和特性如下:?
完全兼容 STM32Cube? 架構(gòu)?
為了能夠開發(fā)應(yīng)用程序來訪問和使用 Google Cloud Platform? 的 Google Cloud IoT Core,擴(kuò)展了 STM32Cube??
基于 STM32 微控制器的硬件抽象層 STM32CubeHAL?
應(yīng)用軟件訪問和使用 Google Cloud Platform? 的 Google Cloud IoT Core 所用的軟件組件如下:?
STM32Cube HAL
HAL 驅(qū)動層提供通用的多實(shí)例簡單 API 組(應(yīng)用程序編程接口),以便與上層(應(yīng)用、庫和協(xié)議棧)交互。它由通用和擴(kuò)展 API 構(gòu)成。它直接圍繞通用架構(gòu)構(gòu)建,允許在其基礎(chǔ)上的軟件層,例如中間件層,實(shí)現(xiàn)了它 的功能又無需依賴給定 MCU 的特定硬件配置。此結(jié)構(gòu)可提高庫代碼的可復(fù)用性,并確??上蚱渌O(shè)備輕松移植。?
板級支持包(BSP)
除 MCU 之外,板軟件包需支持 STM32 板上的外設(shè)。板支持包中包含此軟件。這是一個有限的 API 集,為板 特有的某些外設(shè)(例如 LED 和用戶按鈕等)提供編程接口。
mbedTLS?
MQTT 中間件使用由 mbedTLS 庫實(shí)現(xiàn)的 TLS 連接。
MQTT 客戶端中間件?
它由 Eclipse? Paho MQTT 嵌入式 C 客戶端庫(被 MQTT 應(yīng)用用作傳輸層)和 JSON 解析器構(gòu)成。?
TCP/IP?
TCP/IP 連接可由 Wi-Fi?模塊(當(dāng)使用 Wi-Fi?連接時)、LwIP TCP-IP 棧(當(dāng)使用以太網(wǎng)連接時)或通過蜂窩 連接(當(dāng)使用蜂窩網(wǎng)絡(luò)擴(kuò)展板時)來處理。?
FreeRTOS??
它是一個實(shí)時操作系統(tǒng),使用 LwIP 為用戶提供基于套接字的接口時,需要用到。?
Google Cloud?IoT?
示例應(yīng)用程序 一個應(yīng)用示例,實(shí)現(xiàn)了連接 gcP Google Cloud IoT Core 組件所需的設(shè)備服務(wù)。這包括連接管理、JWT 安全 連接處理和與云端交互的合適消息格式。?
X-CUBE-gcP 軟件的架構(gòu)如圖 3 所示。

3.3 文件夾結(jié)構(gòu)?
X-CUBE-gcP 擴(kuò)展包的文件夾結(jié)構(gòu)如圖 4 所示。

3.4 B-L475E-IOT01A 板傳感器?
應(yīng)用示例使用的板載傳感器包括:?
用于相對濕度和溫度測量的電容式數(shù)字傳感器(HTS221)?
高性能 3 軸磁力計(jì)(LIS3MDL)?
3D 加速度計(jì)和 3D 陀螺儀(LSM6DSL)?
260-1260 hPa 絕對數(shù)字輸出氣壓計(jì)(LPS22HB)?
接近傳感器(VL53L0X)?
B-L475E-IOT01A 板傳感器報(bào)告值的單位如表 2 所示。

3.5 Wi-Fi?元件?
Wi-Fi?軟件分為兩部分,Drivers/BSP/Components 下是模塊專用軟件,Projects//WiFi 下是 I/O 操作和 WiFi?模塊的抽象層。?
3.6 復(fù)位按鈕?
復(fù)位按鈕(黑色)用于隨時復(fù)位板子。此操作可使板重新啟動。?
3.7 用戶按鈕?
用戶按鈕(藍(lán)色)用于以下情況:?
要配置 Wi-Fi? 和 Google Cloud?安全證書,從板啟動時開始直到啟動后五秒,都可以完成此操作。?
板子初始化后,如果用戶按下按鈕的時間很短,則應(yīng)用程序僅發(fā)布 B-L475E-IOT01A 板子的傳感器值、0/1 切 換值(綠色 LED 將相應(yīng)切換)以及時間戳。雙擊按鈕后,應(yīng)用程序進(jìn)入循環(huán)并每秒自動發(fā)布一次。再一次雙 擊將恢復(fù)先前的模式。應(yīng)用程序通過板級支持包功能來配置和管理用戶按鈕。BSP 功能位于 Drivers\BSP \?目錄中。使用 BSP 按鈕功能時(采用 BUTTON_USER 值),對于給定的平臺,應(yīng)用不會從硬件角度考慮此按鈕連接的方式;該映射由 BSP 處理。?
3.8 用戶 LED?
應(yīng)用程序所用的用戶LED 配置通過板級支持包功能完成。?BSP 功能位于 Drivers\BSP\目錄中。?使用 BSP 功能時(采用 LED_GREEN 值),對于給定的平臺,應(yīng)用不會考慮 LED 映射的方式;該映射由 BSP 處 理。?
3.9 實(shí)時時鐘
?STM32 器件的 RTC 在啟動時從 www.gandi.net 網(wǎng)絡(luò)服務(wù)器進(jìn)行更新。用戶可以使用 HAL_RTC_GetTime() 函數(shù)得到時間值。例如,此函數(shù)可以用于時間戳消息。?
3.10 mbedTLS 配置?
利用#include配置文件,可以對mbedTLS 中間件進(jìn)行配置。可使用 MBEDTLS_CONFIG_FILE #define 指令覆蓋配置文件名。X-CUBE-gcP 包使用文件 googleiot_mbedtls_config.h來實(shí)現(xiàn)項(xiàng)目配置。這可以通過在 mbedTLS.c 和 mbedTLS.h 文件開頭設(shè)置以下#指令來實(shí)現(xiàn):
4、硬件和軟件環(huán)境設(shè)置?
為了設(shè)置硬件和軟件環(huán)境,必須利用 USB 線將支持的板連接到個人計(jì)算機(jī)。連接到 PC 后,允許用戶:?
燒寫板?
存儲 Wi-Fi?和 Google Cloud?安全證書?
通過 UART 控制臺與板進(jìn)行交互?
調(diào)試?
B-L475E-IOT01A 和 32F413HDISCOVERY 板必須連接到 Wi-Fi?接入點(diǎn),P-L496G-CELL01 和 P-L496G-CELL02 套件的天線必須插入以連接到周圍的蜂窩網(wǎng)絡(luò),并且 32F769IDISCOVERY 板必須連接到以太網(wǎng)接口,如圖 5 所 示。

運(yùn)行示例的先決條件是:
以下連接解決方案之一:?
一個 Wi-Fi? 接入點(diǎn),具有透明的互聯(lián)網(wǎng)連接,也就是說不能有代理服務(wù)器或者防火墻阻止開發(fā)板與外網(wǎng) 的通信。它必須運(yùn)行一個 DHCP 服務(wù)器,將 IP 和 DNS 配置提供給主板。?
以太網(wǎng)連接,具有透明的互聯(lián)網(wǎng)連接,也就是說不能有代理服務(wù)器或者防火墻阻止開發(fā)板與外網(wǎng)的通信。?
有效的蜂窩網(wǎng)絡(luò)訂閱,激活了無線通信數(shù)據(jù)服務(wù),來自集成了 MVNO 配置文件的嵌入式 SIM 或外部 Micro-SIM。
一臺開發(fā) PC,用于構(gòu)建應(yīng)用、利用 ST-LINK 進(jìn)行編程以及運(yùn)行虛擬控制臺。?
一臺計(jì)算機(jī),用于運(yùn)行連接 Google Cloud?控制臺的網(wǎng)絡(luò)瀏覽器或管理 Google Cloud Platform?的 gcLOUD SDK 命令行工具。計(jì)算機(jī)防火墻(如果有)必須允許 MQTT 連接進(jìn)入(通常是端口 1883 和 8883)。例如,它可以是開發(fā) PC、虛擬專用服務(wù)器或單板計(jì)算機(jī)。?
OpenSSL 工具套件,用于構(gòu)建新的設(shè)備公鑰/私鑰對。
5、應(yīng)用程序示例
本章介紹如何注冊和登錄 Google Cloud Platform?的 Google Cloud IoT Core,以及如何使用 X-CUBE-gcP 擴(kuò)展包中的 gcP IoT Core 應(yīng)用。此外,還展示了如何從 Google Cloud?控制臺配置 gcP,但也可以使用 Google Cloud? SDK 中的命令行工具應(yīng)用相同配置。請參考 Google Cloud? SDK 文檔了解關(guān)于命令行工具的更多詳細(xì)信息。
5.1 應(yīng)用描述?
應(yīng)用提供下列服務(wù):?
連接管理
應(yīng)用首先配置板連接(Wi-Fi?、以太網(wǎng)或蜂窩網(wǎng)絡(luò)),并確保連接正常且正常工作,以便提供有效的 IP 地址 和 IP 連接。
通過 JWT 提供安全連接
一旦有 IP 連接可用,應(yīng)用將通過 JSON 網(wǎng)絡(luò)令牌(JWT)創(chuàng)建安全地連接到 gcP IoT Core 服務(wù)。gcP IoT core 支持多種密鑰格式。該應(yīng)用支持兩種密鑰格式:ES256 和 RS256。?
發(fā)送/獲取設(shè)備狀態(tài)
一旦安全連接,應(yīng)用將向 gcP IoT Core 發(fā)送更新后的設(shè)備狀態(tài)。這將允許從 gcP 控制臺獲取設(shè)備信息。設(shè) 備狀態(tài)是設(shè)備的內(nèi)部表達(dá)。
在 X-CUBE-gcP 應(yīng)用中,設(shè)備狀態(tài)是一個簡單的 JSON 字符串,包含板 LED 狀態(tài)、遙測間隔、本地時間 戳、MAC 地址和當(dāng)前固件版本。下面是發(fā)布的設(shè)備狀態(tài)示例:
配置設(shè)備?
gcP 提供修改設(shè)備配置的功能。根據(jù) gcP 文檔中的定義,設(shè)備配置是一種任意的用戶定義的數(shù)據(jù) BLOB。XCUBE-gcP 應(yīng)用使用配置從云端控制 LED 狀態(tài),更改遙測間隔并強(qiáng)制重啟。應(yīng)用接受簡單 JSON 格式的配 置,如下所示:
通過 MQTT Bridge 發(fā)送遙測數(shù)據(jù)?
應(yīng)用只支持 gcP IoT Core 的 MQTT Bridge 服務(wù)。
它不支持 HTTP Bridge。一旦用戶按一次用戶按鈕,應(yīng)用就發(fā)送遙測數(shù)據(jù)。如果用戶按兩次用戶按鈕,設(shè)備將進(jìn)入發(fā)布循環(huán),并定期發(fā) 送遙測數(shù)據(jù)。在最初的設(shè)備配置步驟中使用參數(shù) TelemetryInterval 配置此循環(huán)的周期。?
如 gcP 在線文檔中所述,設(shè)備可以通過發(fā)出 PUBLISH 消息(通過 MQTT 連接)來發(fā)布遙測事件。應(yīng)用示例 中使用的 Quality of Service 是 QOS1(至少傳輸一次)。必須用以下格式將消息發(fā)布到 MQTT 主題:/ devices/{device-id}/events。
下面是帶傳感器的板的消息發(fā)布示例:

5.2 gcP 和 IoT Core 帳戶設(shè)置
為了使用 Google Cloud IoT Core 服務(wù),需創(chuàng)建 Google Cloud Platform?帳戶。用戶必須先創(chuàng)建帳戶,然后才能繼 續(xù)操作并創(chuàng)建或選擇 gcP 項(xiàng)目。?
提示?關(guān)于注冊、項(xiàng)目創(chuàng)建和 API 使能,請?jiān)L問 cloud.google.com。?創(chuàng)建用戶帳戶的步驟如下:?1. 使能項(xiàng)目計(jì)費(fèi),如圖 7 所示。如不使能項(xiàng)目計(jì)費(fèi),用戶將無法繼續(xù)執(zhí)行帳戶創(chuàng)建的剩余步驟。

2. 使能應(yīng)用使用的“Google Cloud IoT Core”和“Pub/Sub” API。在 gcP 控制臺中,進(jìn)入“API 和服務(wù)儀表板”,如 圖 8 所示。

3. 使用“使能 API 和服務(wù)”并至少使能 Google Cloud IoT API 和 Cloud Pub/Sub API,如圖 9. 使能 Google Cloud IoT API 和圖 10. 使能 Cloud Pub/Sub API 所示。


5.3 在 gcP IoT core 上創(chuàng)建設(shè)備?
關(guān)于 Google Cloud IoT Core 的完整文檔和如何創(chuàng)建注冊表、設(shè)備和遙測主題,請?jiān)L問 cloud.google.com/iot/ docs。
按照下述步驟創(chuàng)建并注冊新設(shè)備:?1. 在 Google Cloud IoT Core 中,創(chuàng)建新設(shè)備注冊表(在連接字符串中定義為{registry-id}),如圖 11 所 示。?

2. 在注冊表創(chuàng)建面板上選擇一個區(qū)域(默認(rèn)為 us-central1),以后可以將其作為連接字符串中的{cloudregion}進(jìn)行配置。如果不存在,創(chuàng)建名為“events”的遙測主題,并維持默認(rèn)狀態(tài)主題。該主題必須命名為 “events”,因?yàn)檫@是應(yīng)用使用的名稱。應(yīng)用只支持 MQTT 協(xié)議;不支持 HTTP 且可以取消選中 HTTP。用戶無 需添加證書。注冊表創(chuàng)建設(shè)置的專用窗口如圖 12 所示。

3. 在新創(chuàng)建的注冊表中添加新設(shè)備?
定義設(shè)備 ID,即連接字符串中的{device-id}。?
按照 gcP 的“創(chuàng)建公鑰/私鑰對”文檔中的描述,使用“openssl”創(chuàng)建 RS256 或 RS256 類型的公鑰和私鑰。?
對于 RS256

在執(zhí)行上述步驟后,云的設(shè)置完畢;可以使用設(shè)備并將其連接到 gcP。
5.4 應(yīng)用程序編譯和燒寫?
提示?使用任何工具鏈打開項(xiàng)目之前,請確保文件夾安裝路徑不太深,否則工具鏈可能會在編譯之后報(bào)告錯誤。
使用所支持的某種開發(fā)工具鏈打開并編譯項(xiàng)目(有關(guān)版本要求的詳細(xì)信息,請參閱版本說明)。在 STM32 板上編程固件:將Projects\\Applications\Cloud\GoogleIoT\Binary 下的二進(jìn)制文件復(fù)制 (或拖放)到 STM32 板插入 PC 時所創(chuàng)建的 USB 大容量存儲位置。或者,用戶可以直接通過所支持的其中一個開 發(fā)工具鏈對 STM32 板進(jìn)行編程。?
5.5 應(yīng)用程序首次啟動
1. 必須通過 USB(ST-LINK USB 端口)將板連接到 PC。通過串行終端仿真器(如 Tera Term)打開控制臺,選擇板子的 ST-LINK COM 端口,并進(jìn)行以下配置:?
8 位數(shù)據(jù)長度,無校驗(yàn),1 位停止位,115200 波特率,無硬件流控制?
行結(jié)束符設(shè)置為 LF?
“echo on”選項(xiàng),以便能夠讀取用戶輸入的參數(shù)?
此外,建議使能“自動模式”選項(xiàng)(如果有)?
有關(guān)詳細(xì)信息,請參見第 6 節(jié) 與板交互。?對于支持 Wi-Fi?的板,通過控制臺輸入 Wi-Fi? SSID、加密模式和密碼。對于蜂窩網(wǎng)絡(luò)連接,輸入選中操作員 提供的接入點(diǎn)和密碼。?
2. 系統(tǒng)提示用戶輸入連接字符串,其中包含與使用 gcP 用戶帳戶創(chuàng)建的項(xiàng)目和注冊設(shè)備相關(guān)的必要信息。輸入設(shè)備的 Google Cloud IoT Core 連接字符串:(模板:project-id=xxx;registry-id=xxx;deviceid=xxx;cloud-region=xxx)?
連接字符串的示例:?
project-id=my-project-123456;registry-id=stm32registry;deviceid=mystm32device;cloud-region=us-central1?
3. 設(shè)置 TLS 根 CA 證書:
?復(fù)制粘貼Projects\ Common\GoogleIoT\ comodo_google.pem的內(nèi)容。該設(shè)備使用它通過TLS對遠(yuǎn)程主機(jī)進(jìn) 行身份驗(yàn)證。?
注意:示例應(yīng)用程序要求提供2個CA證書的連結(jié)。?
a. 用于HTTPS 服務(wù)器,啟動時通過該服務(wù)器檢索當(dāng)前時間和日期(“Comodo”證書)
b. 用于gcP,以便驗(yàn)證云服務(wù)器。根據(jù)服務(wù)器,可能需要按照 Google Cloud?的支持CA列表更新 comodo_google.pem(可在 pki.google.com/roots.pem 中找到)。?
4. 設(shè)置設(shè)備私鑰?復(fù)制粘貼在 gcP 控制臺上的設(shè)備創(chuàng)建步驟中創(chuàng)建的公鑰所對應(yīng)的私鑰 rsa_private.pem 或 ec_private.pem 的 內(nèi)容。?
5. 參數(shù)配置完成后,如果需要重新更改參數(shù),可以根據(jù)提示通過重啟板并按下用戶按鈕(藍(lán)色按鈕)來進(jìn)行更改。
5.6 應(yīng)用程序運(yùn)行時?
1. RTC 配置?應(yīng)用程序發(fā)出 HTTPS 請求來檢索當(dāng)前時間和日期,并配置 RTC。
2. 設(shè)備到云的連接?在正確配置設(shè)置后,設(shè)備連接到 gcP IoT core。為了核實(shí)連接是否正確,用戶可以從 gcP IoT core 控制臺檢 查設(shè)備詳情,如圖 14. IoT core 設(shè)備控制臺所示。

從同一控制臺菜單,用戶可以:
檢查最新的錯誤狀態(tài)。當(dāng)設(shè)備拔出和與云端的連接中斷時,一種典型的錯誤是“mqtt:服務(wù)器:MQTT 保 持連接檢查失敗導(dǎo)致連接斷開”。?
在相應(yīng)菜單中檢查配置和狀態(tài)歷史。系統(tǒng)提供最新發(fā)布的設(shè)備狀態(tài)和配置供用戶參考。
3. 發(fā)布的遙測數(shù)據(jù)?如果板子為 B-L475E-IOT01,則應(yīng)用可發(fā)布傳感器值、0/1 切換值(綠色 LED 相應(yīng)切換)以及時間戳。?
短暫按下用戶按鈕一次后?
按用戶定義的固定遙測間隔(按下用戶按鈕兩次)。遙測間隔可通過設(shè)備配置進(jìn)行修改。?
上一步“設(shè)備到云的連接”中的 IoT Core Device 面板顯示了最新接收的遙測數(shù)據(jù)的日期。gcP 不提供對數(shù)據(jù)的 即時訪問。用戶必須依賴其他 gcP 服務(wù)或使用 CLOUD SDK 工具套件將數(shù)據(jù)可視化。
4. 云到設(shè)備的連接?可以在 gcP 控制臺上使用“更新配置”菜單進(jìn)行此類交互,將以簡單 JSON 格式編碼的命令發(fā)送至設(shè)備(請參 考圖 15. IoT core 設(shè)備配置)。如果設(shè)備沒有連接,將在下一次連接時接收配置。

注意:X-CUBE-gcP 在每次連接時對配置進(jìn)行注冊,gcP IoT Core 服務(wù)總是在每次重新注冊時發(fā)送最新配置。因此,如果在配置中發(fā)送了重啟命令"Reboot": true,用戶必須將配置重新更新為"Reboot": false,以免在每次重新連接時發(fā)生無限重啟。
5.7 儀表板和繪圖值?
gcP 中沒有默認(rèn)的儀表板用于數(shù)據(jù)可視化。用戶需通過額外的 gcP 服務(wù)創(chuàng)建網(wǎng)絡(luò)應(yīng)用?;蛘撸梢园惭b Google Cloud?的 gcLOUD SDK,并使用工具套件訂閱 Pub/Sub 主題。?
請參考 gcLOUD SDK 文檔和 gcloud pubsub 命令,如:$ gcloud pubsub subscriptions pull
6、與板交互?
需要串行終端來:
對板子進(jìn)行配置?
監(jiān)測應(yīng)用狀態(tài)?
在本地顯示云到設(shè)備消息?
本文檔中使用 Tera Term 進(jìn)行說明。也可以使用其他類似的工具。
在首次使用板時,必須使用連接字符串?dāng)?shù)據(jù)進(jìn)行編程:
確定 PC 上所用的用于探索板的 STM32 ST-LINK 虛擬 COM 端口。在一臺 Windows? PC 上,打開設(shè)備管理器。
打開 PC 上的串行終端并將其連接到上述虛擬 COM 端口。
在開發(fā)包實(shí)用程序目錄中提供了一個 Tera Term 初始化腳本(參考圖 4. 項(xiàng)目文件結(jié)構(gòu));此腳本設(shè)置了正確的參數(shù)。要使用它,請打開 Tera Term,選擇 Setup,然后選擇 Restore 設(shè)置。?
提示?下面提供的信息可用來配置 UART 終端,使其成為 Tera Term 初始化腳本的替代選擇。
終端設(shè)置?終端設(shè)置如圖 16 所示。下面的截屏顯示了終端設(shè)置和新行的推薦參數(shù)。串行終端新行傳輸配置必須設(shè)置為 LineFeed(\n 或 LF),以便允許從 UNIX?類型的文本文件復(fù)制粘貼。選擇本地 回顯選項(xiàng)將使復(fù)制粘貼結(jié)果顯示在控制臺上。

串口設(shè)置?
串口必須配置:?
實(shí)際的 COM 端口號?
115200 波特率?
8 位數(shù)據(jù)?
無校驗(yàn)位?
1 個停止位?
無流控?
串口設(shè)置如圖 17 中所示

UART 終端和串口設(shè)置完畢后,按下板復(fù)位按鈕(黑色)。按照 UART 終端上的指示上傳 Wi-Fi?和云配置數(shù)據(jù)。這 些數(shù)據(jù)保留在 Flash 存儲器中,并在下次板啟動時重復(fù)使用。
7、常見問題
問:當(dāng)我用 IAR?打開項(xiàng)目時,為什么會彈出此提示框?

答:很可能是由于此 IAR? IDE 版本比開發(fā)包所用版本更早(請參閱軟件包根文件夾中提供的版本說明,以了解支 持的 IDE 版本),因此不能保證兼容性。這種情況下,需要更新 IAR? IDE 版本。
問:應(yīng)該如何修改應(yīng)用程序來發(fā)布其他消息?
答:根據(jù)是使用 B-L475E-IOT01A 還是其他板,googleiot.c 文件中需要分別更新函數(shù) GoogleIoT_publishTelemetry ()或 GoogleIoT_publishDeviceState ()。
問:我的設(shè)備不能連接到 gcP。我該如何處理?
答:需要檢查的事項(xiàng)是:
1、確認(rèn)連接字符串中的 project-id、registry-id 和 device-id 均正確拼寫并提交。gcP 通常創(chuàng)建唯一指定的 project-id,它包含自動生成的名稱和/或編號,例如。因此,務(wù)必使用注冊 控制臺上顯示的 project-id。?
2、如果不成功,則必須再次仔細(xì)進(jìn)行初始配置。
3、如果仍然沒有連接,請?jiān)?gcP 控制臺上檢查并確認(rèn)為設(shè)備定義的設(shè)備公鑰是使用設(shè)備上保存的對應(yīng)的正確私鑰設(shè)置的。
問:我的設(shè)備不能連接到 Wi-Fi?接入點(diǎn)。我該如何處理?
答:請確認(rèn)其他設(shè)備是否可以連接到 Wi-Fi?接入點(diǎn)。如果可以,請?jiān)诎逯刂煤?,按下用戶按鈕(藍(lán)色)五秒鐘,輸 入 Wi-Fi?憑證。
問:在 B-L475E-IOT01A 板上,接近傳感器總是報(bào)告“8190”,即使我將障礙物靠近其放置也是如此。
答:廠家交付的接近傳感器貼有臨時保護(hù)膜。在使用傳感器前,確保已將膜去掉。保護(hù)膜為橙色,幾乎不可見。在 B-L475E-IOT01A 上,接近傳感器位于板前側(cè)焊接了 MCU 的左下角附近。
