你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用于 STM32Cube 的 Google Cloud Platform™扩展包入门

[复制链接]
STMCU-管管 发布时间:2021-2-5 09:46
用于STM32Cube 的 Google Cloud Platform™扩展包入门
: W( m& ?% H( w. \7 T
2.1.gif
8 ]) s$ @! a0 i, P( u2 L! a
引言

3 B2 k; C, h7 W
本用户手册描述 STM32Cube™ 扩展包的内容,该扩展包用于 Google Cloud Platform™(GCP)Google Cloud IoT Core 的服务。用于 GCP 的 STM32Cube 扩展包(X-CUBE-GCP)提供了将 STMicroelectronics 板卡连接到 Google CloudPlatform™ 的 Google Cloud IoT Core 的应用示例。它将 MQTT 客户端库移植到相应的 STM32 器件上去实现与云平台的连接。
: I) I1 f6 ?; l2 g
X-CUBE-GCP 可在五个平台上运行:
※       通过Inventek ISM43362 模块支持Wi-Fi®连接的B-L475E-IOT01A和 32F413HDISCOVERY 板
※       提供原生以太网接口的 32F769IDISCOVERY 板
※       P-L496G-CELL01 和 P-L496G-CELL02 探索包分别通过 2G/3G(UG96)和 LTE(BG96)Quectel 蜂窝调制解调器子板支持蜂窝连接
+ F+ q1 ]" L# n8 l( f2 n
对于这五个平台,应用示例配置了网络连接参数,并说明了设备与GCP交互的各种方式。

# ]* {# y, H$ l; V
该扩展包包含了设备到云端的遥测数据报告、用于安全连接云端的云端到设备的消息、向云端发送命令和从连接的设备接收通知的实现示例。
B-L475E-IOT01A 板报告遥测数据,例如湿度、温度和大气压力测量值。
; a  R7 c4 R- W- N6 a
1 概述
& j8 ]: Z* N: N( O' `0 y
用于 Google Cloud Platform™ 的 Google Cloud IoT Core 的 X-CUBE-GCP 扩展包在基于 Arm® Cortex®-M 处理器 的 STM32 32位微控制器上运行。表 1 给出了相关缩略语的定义,帮助您更好地理解本文档。
% z( \. [' g7 _/ G% w
2.2.png
▲ 表1. 缩略语列表
: Z% K+ Z( q) |' T! F5 Z9 w% u
2  Google Cloud Platform™
2 n. a$ ]3 B3 l) J
本章介绍 Google Cloud Platform™ 的 Google Cloud IoT Core。与 Google CloudPlatform™(GCP)相关的详细信息可从 GoogleCloud™ 专用网站cloud.google.com 下载。X-CUBE-GCP实现嵌入式C客户端,能够将板安全地连接到GCP 的 Google Cloud IoT Core。X-CUBE-GCP 所针对的GCP生态系统如图 1 所示。

# b7 }. V" X% e0 O! }+ [1 R
2.3.png
▲ 图1. Google Cloud IoT Core 生态系统

( t, f4 h& m" ^; ?1 N' U. L
用户可以使用智能手机或个人计算机连接到云端,并可以随时随地访问该板提供的信息。GoogleCloud™ 在GCP在线文档中展示的 GoogleCloud IoT Core 如图 2 所示。
/ K3 ?5 Z% a7 e! P) T7 l& l8 h! |
2.4.png
图 2.Google Cloud IoT Core 图
/ \' H2 ~, r4 w' W" Y
注意 ©2018 Google LLC,经许可使用。Google 和 Google 徽标是Google LLC. 的注册商标 X-CUBE-GCP 实现必要的服务,将设备连接到图 2 中用蓝色框出的生态系统部分。
. E- J) l& l4 }/ u7 e1 [5 u7 v8 _
特别是,该扩展包演示了如何配置 GCP 的 IoT Core 服务,以便将设备安全地连接到 Google Cloud IoTCore 服 务。设备使用私钥(ECDSA 或 RSA)签署连接云平台时需要的 JWT(JSON 网络令牌)。CloudIoT Core 通过在设备 创建过程中上传到云服务的相应公钥验证设备的 JWT。X-CUBE-GCP 还提供了示例,展示了如何使用数据格式和使用 MQTT 协议在设备与 IoT Core 元件之间交换数据, 将遥测数据发送到云端,以及从云端接收配置数据。发送到 Cloud IoT Core 的数据随后可通过 Pub/Sub(发布/订 阅)服务发布,并能在日后需要使用时通过网络应用进行访问。用于数据分析和使用的网络应用的开发不在 XCUBE-GCP 的范围之内。

1 P8 N5 u( T- s3 M! u) j7 R
3 软件包说明
" m# [: Q6 d, z
本章详述了 X-CUBE-GCP 扩展包的内容和使用。
  |$ f" P1 @3 }% c! X
3.1 概述

/ r9 [5 \3 ^) S5 b3 T2 W* T2 c
X-CUBE-GCP 扩展包由多系列的基于 STM32L4 系列,STM32F4 系列和 STM32F7 系列微控制器的库和应用示例组成。

) w+ U* G/ Q+ ?! t% k$ x( e
X-CUBE-GCP 可在五个平台上运行:
※       通过 Inventek ISM43362 模块支持 Wi-Fi®连接的 B-L475E-IOT01A 和 32F413HDISCOVERY 板
※       提供原生以太网接口的 32F769IDISCOVERY 板
※       P-L496G-CELL01 和 P-L496G-CELL02 包分别通过 Quectel 的 2G/3G UG96 和 LTE BG96 蜂窝调制解调器子板支持蜂窝连接。用于连接 2G/3G 蜂窝网络与云端的 P-L496G-CELL01 STM32 探索包(STM32-C2C/ 2G-3G)和用于连接 LTE 蜂窝网络与云端的 P-L496G-CELL02 STM32 探索包(STM32-C2C/2G-LTE)是基于蜂窝网络和云技术的解决方案的完整开发平台。探索包内含一个基于 STM32L496AGI6 的带预加载固件的低功耗探索主板和一个带天线的 STMod+蜂窝网络扩展板。
2 A9 ^7 B; M7 u6 j
X-CUBE-GCP 扩展包包含以下组件:
※       Eclipse™ Paho MQTT 嵌入式 C 客户端
※       mbedTLS
※       用于 B-L475E-IOT01A 和 32F413HDISCOVERY 板的 Inventek ISM43362 Wi-Fi®驱动程序
※       用于 32F769IDISCOVERY 板的以太网驱动程序、FreeRTOS™和 LwIP
※       用于 B-L475E-IOT01A 板的传感器驱动 • 用于 P-L496G-CELL01 和 P-L496G-CELL02 套件的蜂窝网络驱动程序
※       用于所有 MCU 板的 BSP
※       STM32L4 系列、STM32F4 系列,和 STM32F7 系列 HAL
※       应用程序示例
1 `* S. \8 x' l- F, @# v8 U
软件以 zip 文档的形式提供,其中包含源代码。可支持以下集成开发环境:
※       IAR Embedded Workbench® 对于 Arm®(EWARM)
※       Keil®微控制器开发套件(MDK-ARM)
※       System Workbench for STM32 有关所支持 IDE 版本的信息,请参阅软件包根文件夹中的版本说明。

) j( c  L% k: d" g2 o7 F! O
有关所支持 IDE 版本的信息,请参阅软件包根文件夹中的版本说明。
" u# e2 j' m9 x& R: k3 T4 q9 s% E+ x
3.2 架构

) O1 _; F- L7 r# b  ?
本节介绍 X-CUBE-GCP 中的软件组件。X-CUBE-GCP 是 STM32Cube™ 的扩展软件。其主要功能和特性如下:
※       完全兼容 STM32Cube™ 架构
※       为了能够开发应用程序来访问和使用 Google Cloud Platform™ 的 Google Cloud IoTCore,扩展了 STM32Cube™
※       基于 STM32 微控制器的硬件抽象层 STM32CubeHAL

# y, t/ W7 e/ H; A6 M' t
应用软件访问和使用 Google Cloud Platform™ 的 Google Cloud IoT Core 所用的软件组件如下:
※       STM32Cube HAL

6 S; i0 N. Z. G
HAL 驱动层提供通用的多实例简单API 组(应用程序编程接口),以便与上层(应用、库和协议栈)交互。它由通用和扩展 API 构成。它直接围绕通用架构构建,允许在其基础上的软件层,例如中间件层,实现了它的功能又无需依赖给定 MCU 的特定硬件配置。此结构可提高库代码的可复用性,并确保可向其他设备轻松移植。
" A. Y6 n- K; D* c6 @
※       板级支持包(BSP)
除 MCU 之外,板软件包需支持STM32 板上的外设。板支持包中包含此软件。这是一个有限的 API 集,为板 特有的某些外设(例如 LED 和用户按钮等)提供编程接口。
) X( |) J. \2 g$ G* I
※       mbedTLS
MQTT 中间件使用由 mbedTLS库实现的 TLS 连接。

- \( g9 w( h5 ?( A9 B# p6 h% A# I% T: |
※       MQTT 客户端中间件
它由 Eclipse™ Paho MQTT 嵌入式 C 客户端库(被 MQTT 应用用作传输层)和 JSON 解析器构成。
; K6 V+ u' I8 ]. R: u
※       TCP/IP
TCP/IP 连接可由 Wi-Fi®模块(当使用 Wi-Fi®连接时)、LwIP TCP-IP 栈(当使用以太网连接时)或通过蜂窝连接(当使用蜂窝网络扩展板时)来处理。
. f( Y) Z) a3 x( W; ]+ d- s  `$ ?
※       FreeRTOS™
它是一个实时操作系统,使用 LwIP 为用户提供基于套接字的接口时,需要用到。

! Z9 K. ^# n- P& z" j- D
※       Google Cloud™IoT
示例应用程序 一个应用示例,实现了连接 GCP Google Cloud IoTCore 组件所需的设备服务。这包括连接管理、JWT 安全 连接处理和与云端交互的合适消息格式。
3 }. f7 c1 K4 }, h, E' j4 w
X-CUBE-GCP 软件的架构如图3 所示。

/ D' W! c2 C/ w0 d$ l4 ]
2.5.png
▲ 图3. X-CUBE-GCP 软件架构
( [  N0 `& N! \" K
3.3 文件夹结构
3 S  y+ H- H9 ^
X-CUBE-GCP 扩展包的文件夹结构如图 4 所示。

/ T( T* C) Q+ t7 F7 g% |* f7 ~4 x, S
2.6.png
▲ 图4. 项目文件结构

2 E+ F' h- M. D5 n& {9 R$ s% K
3.4 B-L475E-IOT01A 板传感器

1 O3 U2 m" _( |4 a' z* g5 ^
应用示例使用的板载传感器包括:
※       用于相对湿度和温度测量的电容式数字传感器(HTS221)
※       高性能 3 轴磁力计(LIS3MDL)
※       3D 加速度计和 3D 陀螺仪(LSM6DSL)
※       260-1260 hPa 绝对数字输出气压计(LPS22HB)
※       接近传感器(VL53L0X)

3 H4 O- K- [9 T+ _
B-L475E-IOT01A 板传感器报告值的单位如表 2 所示。
( X% b, C; o- u# l3 q8 s$ m4 `
2.7.png
▲ 表2. B-L475E-IOT01A 板传感器报告值的单位
* K: y- t$ C- E' t2 {2 {
3.5 Wi-Fi®元件
4 K+ A. q- M3 `' w
Wi-Fi®软件分为两部分,Drivers/BSP/Components下是模块专用软件,Projects//WiFi 下是 I/O 操作和 WiFi®模块的抽象层。
7 Z3 I$ U0 r' h  n+ j
3.6 复位按钮

' \; B6 V% }# [$ b2 E  [, g# n
复位按钮(黑色)用于随时复位板子。此操作可使板重新启动。

* ~4 f6 M5 K: j
3.7 用户按钮

8 w+ ~8 G& n* K3 S8 H
用户按钮(蓝色)用于以下情况:
※       要配置 Wi-Fi® 和 Google Cloud™安全证书,从板启动时开始直到启动后五秒,都可以完成此操作。
※       板子初始化后,如果用户按下按钮的时间很短,则应用程序仅发布 B-L475E-IOT01A 板子的传感器值、0/1 切 换值(绿色 LED 将相应切换)以及时间戳。双击按钮后,应用程序进入循环并每秒自动发布一次。再一次双 击将恢复先前的模式。应用程序通过板级支持包功能来配置和管理用户按钮。BSP 功能位于 Drivers\BSP \ 目录中。使用 BSP 按钮功能时(采用 BUTTON_USER 值),对于给定的平台,应用不会从硬件角度考虑此按钮连接的方式;该映射由 BSP 处理。

/ k! J' b3 ^  s! n) F, S! b% U
3.8 用户 LED

$ p' |7 Q+ W# t
应用程序所用的用户LED 配置通过板级支持包功能完成。
BSP 功能位于Drivers\BSP\目录。
使用 BSP 功能时(采用LED_GREEN 值),对于给定的平台,应用不会考虑 LED 映射的方式;该映射由 BSP 处 理。
- {0 T# l- r% Y* e0 k
3.9 实时时钟

. X9 ~7 k, w6 U+ {) |+ Q. `( ~
STM32 器件的 RTC 在启动时从 www.gandi.net 网络服务器进行更新。用户可以使用HAL_RTC_GetTime() 函数得到时间值。例如,此函数可以用于时间戳消息。

- c' o2 V4 p" d( {
3.10 mbedTLS 配置
1 N! o8 E  Z: G' h. _7 h
利用#include配置文件,可以对mbedTLS中间件进行配置。可使用 MBEDTLS_CONFIG_FILE #define 指令覆盖配置文件名。X-CUBE-GCP 包使用文件 googleiot_mbedtls_config.h来实现项目配置。这可以通过在 mbedTLS.c 和 mbedTLS.h 文件开头设置以下#指令来实现:
配置文件指定了要使用的相关加密参数。
8 N2 p5 |. I& D) d8 D
4 硬件和软件环境设置
% l  h# s2 Y: E' [
为了设置硬件和软件环境,必须利用 USB 线将支持的板连接到个人计算机。连接到 PC 后,允许用户:
※       烧写板
※       存储 Wi-Fi®和 Google Cloud™安全证书
※       通过 UART 控制台与板进行交互
※       调试

; f0 \  ^* K# n: ?5 R2 q  D6 T
B-L475E-IOT01A 和32F413HDISCOVERY 板必须连接到 Wi-Fi®接入点,P-L496G-CELL01 和 P-L496G-CELL02 套件的天线必须插入以连接到周围的蜂窝网络,并且 32F769IDISCOVERY 板必须连接到以太网接口,如图 5 所 示。
/ k: x% _0 k! Y7 s! ^
2.8.png
▲ 图5. 硬件和软件设置环境

7 w% S- N: ]; B6 z" D( I
运行示例的先决条件是:
  M- e# `+ Q' D3 e6 S
(1)    以下连接解决方案之一:
※       一个 Wi-Fi® 接入点,具有透明的互联网连接,也就是说不能有代理服务器或者防火墙阻止开发板与外网 的通信。它必须运行一个 DHCP 服务器,将 IP 和 DNS 配置提供给主板。
※       以太网连接,具有透明的互联网连接,也就是说不能有代理服务器或者防火墙阻止开发板与外网的通信。
※       有效的蜂窝网络订阅,激活了无线通信数据服务,来自集成了 MVNO 配置文件的嵌入式 SIM 或外部 Micro-SIM。
3 @0 C9 Z* b1 w# k
(2)    一台开发 PC,用于构建应用、利用 ST-LINK 进行编程以及运行虚拟控制台。
7 s( u3 D, D3 I* C4 x3 y
(3)    一台计算机,用于运行连接 Google Cloud™控制台的网络浏览器或管理 Google Cloud Platform™的 GCLOUD SDK 命令行工具。计算机防火墙(如果有)必须允许 MQTT 连接进入(通常是端口 1883 和 8883)。例如,它可以是开发 PC、虚拟专用服务器或单板计算机。
+ `+ B- S$ e9 I
(4)    OpenSSL 工具套件,用于构建新的设备公钥/私钥对。
; \8 r1 O9 u5 M8 Z0 V$ `* d6 Z2 R
5 应用程序示例

/ E, O1 p# x1 h" m0 I$ N& X
本章介绍如何注册和登录 Google Cloud Platform™的 Google Cloud IoT Core,以及如何使用 X-CUBE-GCP 扩展包中的 GCP IoT Core 应用。此外,还展示了如何从 Google Cloud™控制台配置 GCP,但也可以使用 Google Cloud™ SDK 中的命令行工具应用相同配置。请参考 Google Cloud™ SDK 文档了解关于命令行工具的更多详细信息。

8 r% j: G; n! {7 m! U0 S
5.1 应用描述

. c6 o4 [, C. _! N, ]1 m' w7 V/ B$ {
应用提供下列服务:

, L2 I9 K3 S. }2 u6 u1 k- A: I
※       连接管理
应用首先配置板连接(Wi-Fi®、以太网或蜂窝网络),并确保连接正常且正常工作,以便提供有效的 IP 地址 和 IP 连接。

/ k- w% J3 J: J9 h
※       通过 JWT 提供安全连接
一旦有 IP 连接可用,应用将通过JSON 网络令牌(JWT)创建安全地连接到 GCP IoTCore 服务。GCP IoT core 支持多种密钥格式。该应用支持两种密钥格式:ES256 和 RS256。

+ L! x( a5 U0 s' {  J
※       发送/获取设备状态
一旦安全连接,应用将向 GCP IoT Core 发送更新后的设备状态。这将允许从 GCP 控制台获取设备信息。设 备状态是设备的内部表达。
/ L2 f/ b) `/ Q: y/ g8 |2 `7 Y2 T
在 X-CUBE-GCP 应用中,设备状态是一个简单的 JSON 字符串,包含板 LED 状态、遥测间隔、本地时间 戳、MAC 地址和当前固件版本。下面是发布的设备状态示例:
  1. {
    * C3 \4 u" Y5 d7 d
  2. "LedOn": false, " o% g: i  A4 F5 ~
  3. "TelemetryInterval": 60,
    2 R8 `5 F+ t( N' J
  4. "ts": 1530170497,
      l8 _3 A% n% }; F" m/ g# m+ \
  5. "mac":"C47F5104341",
    2 i8 Q/ F9 `, _5 ^
  6. "FW version":"V1.1.0"- H: [% I5 Q& T! t' k! ^$ j
  7. }
复制代码
& Q. U. u' `, \, k& x/ {' r8 r# X  |
※       配置设备
GCP 提供修改设备配置的功能。根据GCP 文档中的定义,设备配置是一种任意的用户定义的数据 BLOB。XCUBE-GCP 应用使用配置从云端控制 LED 状态,更改遥测间隔并强制重启。应用接受简单 JSON 格式的配 置,如下所示:

0 @# y4 p& F1 Q; S% w7 Y
  1. {* F( a/ ]$ l0 M+ [2 b
  2. "LedOn": true,
    - s3 `" K% Y! ^7 Y
  3. "TelemetryInterval":60,/ y+ a& q2 ]1 q( l) Z) c, i" _$ Z
  4. "Reboot": false' {+ ?( a# I$ Z2 M
  5. }
复制代码
* o5 a0 p9 L: K% M9 [: i
X-CUBE-GCP 在每次连接时对配置进行注册。每次重新注册时,GCP IoT Core 服务总是发送最新配置。因此,如果在配置中发送重启 命令"Reboot":true,用户必须将 配置重新更新为"Reboot": false,以免在每次重新连接时发生无限重启。
; _! N& t; ]8 A) z
※       通过 MQTT Bridge 发送遥测数据
应用只支持 GCP IoT Core 的 MQTT Bridge 服务。
它不支持 HTTP Bridge。一旦用户按一次用户按钮,应用就发送遥测数据。如果用户按两次用户按钮,设备将进入发布循环,并定期发送遥测数据。在最初的设备配置步骤中使用参数 TelemetryInterval 配置此循环的周期。
. q) [: A3 S) Z8 t1 o- g
如 GCP 在线文档中所述,设备可以通过发出 PUBLISH 消息(通过 MQTT 连接)来发布遥测事件。应用示例 中使用的 Quality of Service 是 QOS1(至少传输一次)。必须用以下格式将消息发布到 MQTT 主题:/ devices/{device-id}/events。
  q- Q* Y* X4 f0 a# R6 R
下面是带传感器的板的消息发布示例:

( C, h1 x& ?( ]) T# a9 D4 Y
  1. {
    , W7 j4 v/ |0 g" H9 v! g5 Y0 g
  2. "data":7 U) h  e( v4 p4 K6 n" W
  3. [{"dataType":"temp","value":"27.91"},& K; r/ y# S+ ~1 O: A
  4. {"dataType":"hum","value":"48.72"},
    " s( y. c( I- ~" p
  5. {"dataType":"pres","value":"1015.17"}]
    1 [7 G4 b' ~2 N. h& ?2 p  T
  6. }
复制代码

$ O. ~# @, b: t& g) W4 W8 O' g
应用行为如图 6 所示。
2 w: p* Z8 Q! l# q, f+ E) B3 ^
2.9.png
▲ 图6. 应用状态机
2 F" v% y; m# V7 V0 v* ]$ C
5.2 GCP 和 IoT Core 帐户设置

# `1 Q+ e0 o0 Z) ]2 ]6 O
为了使用 Google Cloud IoT Core 服务,需创建 Google Cloud Platform™帐户。用户必须先创建帐户,然后才能继 续操作并创建或选择 GCP 项目。
提示 关于注册、项目创建和 API 使能,请访问 cloud.google.com。

# C5 |0 }7 n. ]' _( [4 g& z- o, l
创建用户帐户的步骤如下:
* a) M, u8 q  y8 ~% A- S+ K
1. 使能项目计费,如图 7 所示。如不使能项目计费,用户将无法继续执行帐户创建的剩余步骤。

4 f! W# L# ~2 L6 Y
2.10.png
▲ 图7. 需要计费

+ v  @- R2 y: Y( H8 N  k
2. 使能应用使用的“GoogleCloud IoT Core”和“Pub/Sub” API。在GCP 控制台中,进入“API 和服务仪表板”,如图 8 所示。
! H) R2 O$ W6 P0 U+ F
2.11.png
▲ 图8. 使能 API 菜单
3 v  F4 M- R2 G9 ]* C% _
3. 使用“使能 API 和服务”并至少使能Google Cloud IoT API 和 Cloud Pub/Sub API,如图 9. 使能 Google Cloud IoT API 和图 10. 使能 Cloud Pub/Sub API 所示。
6 a$ X& t) W% y8 D+ k# Q! n: r
2.12.png
▲ 图9. 使能 Google Cloud IoT API

7 ^$ A& P6 B. o  O' J. `0 G
2.13.png
▲ 图10. 使能 Cloud Pub/Sub API

' G) m6 _, S: h1 B& O7 k2 @3 J
5.3 在 GCP IoT core 上创建设备

+ Y) v# C) v0 A# S: x% m: X
关于 Google Cloud IoT Core 的完整文档和如何创建注册表、设备和遥测主题,请访问 cloud.google.com/iot/ docs。
8 W. x: U" b5 A8 |' N, j
按照下述步骤创建并注册新设备:

' N1 p( X* F& i5 l
1. 在 GoogleCloud IoT Core 中,创建新设备注册表(在连接字符串中定义为{registry-id}),如图 11 所 示。

+ l# E' @* C, ?2 Z
2.14.png
▲ 图11. GCP“创建注册表”按钮
. K0 F" b4 s) `  ?! d2 S7 h; i% A5 V
2. 在注册表创建面板上选择一个区域(默认为 us-central1),以后可以将其作为连接字符串中的{cloudregion}进行配置。如果不存在,创建名为“events”的遥测主题,并维持默认状态主题。该主题必须命名为 “events”,因为这是应用使用的名称。应用只支持 MQTT 协议;不支持 HTTP 且可以取消选中 HTTP。用户无 需添加证书。注册表创建设置的专用窗口如图 12 所示。

/ G) x1 f" J4 _
2.15.png
▲ 图12. GCP“创建注册表”设置
/ O3 {1 ]* Z: i7 j' o5 w
3. 在新创建的注册表中添加新设备
! _3 v2 N( U$ t* z5 f
定义设备 ID,即连接字符串中的{device-id}。

. u3 z' w5 W' f
按照 GCP 的“创建公钥/私钥对”文档中的描述,使用“openssl”创建 RS256 或 RS256 类型的公钥和私钥。
※       对于 RS256
  1. > openssl genrsa -out rsa_private.pem 2048
    6 a$ ^: j6 W* r% c
  2. > openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem
复制代码
  L. l  {; m9 \: z# q
※       对于 ES256
  1. > openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
      Z8 v+ q+ g# @
  2. > openssl ec -in ec_private.pem -pubout -out ec_public.pem
复制代码
% {. G) I6 j3 w" ]9 f3 M. ^
将公钥 pem 文件的内容添加到设备并保存私钥,私钥将通过控制台接口传递到设备。设备的创建如图 13. GCP“创建设备”设置所示。

) D5 Y/ u* J4 r  j% [+ l* m
2.16.png
▲ 图13. GCP“创建设备”设置
/ m2 k' n! I2 Z2 z  c% V
在执行上述步骤后,云的设置完毕;可以使用设备并将其连接到 GCP。

5 y7 ]- d8 m. Z% O+ U
5.4 应用程序编译和烧写

& x: u7 r* U+ F
提示 使用任何工具链打开项目之前,请确保文件夹安装路径不太深,否则工具链可能会在编译之后报告错误。

- t, \% p" T$ V% N" R3 ?
使用所支持的某种开发工具链打开并编译项目(有关版本要求的详细信息,请参阅版本说明)。在STM32 板上编程固件:将Projects\\Applications\Cloud\GoogleIoT\Binary下的二进制文件复制 (或拖放)到 STM32 板插入 PC 时所创建的 USB 大容量存储位置。或者,用户可以直接通过所支持的其中一个开 发工具链对STM32 板进行编程。
5 q' t  |- m. P, A2 z( W) ?# [
5.5 应用程序首次启动
! U% ^- i# Q7 U# A" X5 m; l
1. 必须通过 USB(ST-LINK USB 端口)将板连接到 PC。通过串行终端仿真器(如 Tera Term)打开控制台,选择板子的 ST-LINK COM 端口,并进行以下配置:
※       8 位数据长度,无校验,1 位停止位,115200波特率,无硬件流控制
※       行结束符设置为 LF
※       “echo on”选项,以便能够读取用户输入的参数
※       此外,建议使能“自动模式”选项(如果有)
- Q/ r) o, r4 g3 Y! o$ H
有关详细信息,请参见第 6 节 与板交互。
0 U, U3 _% J* c( c! F
对于支持 Wi-Fi®的板,通过控制台输入 Wi-Fi® SSID、加密模式和密码。对于蜂窝网络连接,输入选中操作员 提供的接入点和密码。

$ z" ^% D% v! N6 r
2. 系统提示用户输入连接字符串,其中包含与使用 GCP 用户帐户创建的项目和注册设备相关的必要信息。输入设备的 GoogleCloud IoT Core 连接字符串:(模板:project-id=xxx;registry-id=xxx;deviceid=xxx;cloud-region=xxx)
% u& l+ F. T  ?
连接字符串的示例:
project-id=my-project-123456;registry-id=stm32registry;deviceid=mystm32device;cloud-region=us-central1

/ a% o# P- W6 y" U6 g% A6 R
3. 设置 TLS 根 CA 证书:
0 ]8 e7 N& j4 M" n3 ?7 O; c
复制粘贴Projects\ Common\GoogleIoT\comodo_google.pem的内容。该设备使用它通过TLS对远程主机进 行身份验证。
注意:示例应用程序要求提供2个CA证书的连结。
3 N' m* n2 C$ g/ h
a. 用于HTTPS 服务器,启动时通过该服务器检索当前时间和日期(“Comodo”证书)
b. 用于GCP,以便验证云服务器。根据服务器,可能需要按照 Google Cloud™的支持CA列表更新 comodo_google.pem(可在pki.google.com/roots.pem 中找到)。
5 W" ^$ S! H& R
4. 设置设备私钥
复制粘贴在 GCP 控制台上的设备创建步骤中创建的公钥所对应的私钥 rsa_private.pem 或 ec_private.pem 的 内容。
2 {: q1 \! x  O) H* `* f
5. 参数配置完成后,如果需要重新更改参数,可以根据提示通过重启板并按下用户按钮(蓝色按钮)来进行更改。

+ P5 P% O) \; T
5.6 应用程序运行时

' G/ v9 F6 ^: d7 h( o
1. RTC 配置
应用程序发出 HTTPS 请求来检索当前时间和日期,并配置 RTC。
/ N" w3 q1 e5 @$ F
2. 设备到云的连接
在正确配置设置后,设备连接到 GCP IoT core。为了核实连接是否正确,用户可以从 GCP IoT core 控制台检 查设备详情,如图 14. IoT core 设备控制台所示。

! f% [: D2 H! n; Q2 p# Y6 s
2.17.png
▲ 图14. IoT core 设备控制台
5 T1 M, f& G+ _( _8 `
从同一控制台菜单,用户可以:
※       检查最新的错误状态。当设备拔出和与云端的连接中断时,一种典型的错误是“mqtt:服务器:MQTT 保 持连接检查失败导致连接断开”。
※       在相应菜单中检查配置和状态历史。系统提供最新发布的设备状态和配置供用户参考。

8 [, t$ B% l# p6 e+ l
3. 发布的遥测数据
如果板子为 B-L475E-IOT01,则应用可发布传感器值、0/1 切换值(绿色 LED 相应切换)以及时间戳。
! Y+ M; d( ^) i8 d; G, [
※       短暂按下用户按钮一次后
※       按用户定义的固定遥测间隔(按下用户按钮两次)。遥测间隔可通过设备配置进行修改。

+ h, X2 w, j7 @% P& e
上一步“设备到云的连接”中的 IoT Core Device 面板显示了最新接收的遥测数据的日期。GCP 不提供对数据的 即时访问。用户必须依赖其他 GCP 服务或使用 CLOUD SDK 工具套件将数据可视化。
7 k6 y$ k4 D, ?5 t9 P9 a
4. 云到设备的连接
4 i. {4 U: ^* k% R
可以在 GCP 控制台上使用“更新配置”菜单进行此类交互,将以简单 JSON 格式编码的命令发送至设备(请参 考图 15. IoT core 设备配置)。如果设备没有连接,将在下一次连接时接收配置。

. o/ J4 P/ q9 A' v0 T& V+ P
2.18.png
▲ 图15. IoT core 设备配置
, i" P! I9 a1 @
注意:X-CUBE-GCP 在每次连接时对配置进行注册,GCP IoT Core 服务总是在每次重新注册时发送最新配置。因此,如果在配置中发送了重启命令"Reboot": true,用户必须将配置重新更新为"Reboot":false,以免在每次重新连接时发生无限重启。
) H( ?/ i3 H% ^: X% g
5.7 仪表板和绘图值

9 h: A) |1 ~& u  t% h  z+ u
GCP 中没有默认的仪表板用于数据可视化。用户需通过额外的 GCP 服务创建网络应用。或者,可以安装 Google Cloud™的 GCLOUD SDK,并使用工具套件订阅 Pub/Sub 主题。
, u/ R7 z! {. A
请参考 GCLOUD SDK 文档和gcloud pubsub 命令,如:$ gcloud pubsub subscriptions pull
. m) |, @: _) F5 ?
6 与板交互

  P& Q- J% c6 X; X$ I9 I
需要串行终端来:
※       对板子进行配置
※       监测应用状态
※       在本地显示云到设备消息
* I  j- x  _+ O  Z3 n) U
本文档中使用 Tera Term 进行说明。也可以使用其他类似的工具。

! D9 _  v1 U6 x( r8 F( G6 P' }
在首次使用板时,必须使用连接字符串数据进行编程:
※       确定 PC 上所用的用于探索板的 STM32 ST-LINK 虚拟 COM 端口。在一台 Windows® PC 上,打开设备管理器。
※       打开 PC 上的串行终端并将其连接到上述虚拟 COM 端口。
+ d4 T: q- q2 P4 v1 \) D
在开发包实用程序目录中提供了一个 Tera Term 初始化脚本(参考图 4. 项目文件结构);此脚本设置了正确的参数。要使用它,请打开 Tera Term,选择 Setup,然后选择 Restore 设置。
9 D) I* [2 _8 j$ z1 _: w$ |3 w: E
提示 下面提供的信息可用来配置 UART 终端,使其成为 Tera Term 初始化脚本的替代选择。

: f3 c) g* r4 N6 X) y" |
终端设置
终端设置如图 16 所示。下面的截屏显示了终端设置和新行的推荐参数。串行终端新行传输配置必须设置为 LineFeed(\n 或 LF),以便允许从 UNIX®类型的文本文件复制粘贴。选择本地 回显选项将使复制粘贴结果显示在控制台上。
) w) z# \1 Q: z* n* h8 K5 y
2.19.png
▲ 图16. 终端设置

7 B: v" k) w' ]1 I* @: z9 @5 K5 N
串口设置

4 o- ?# _# Q, }0 k( p1 Z
串口必须配置:
※       实际的 COM 端口号
※       115200 波特率
※       8 位数据
※       无校验位
※       1 个停止位
※       无流控

& S# S2 ?3 q- ]( u( s# v
串口设置如图 17 中所示。
, E$ \7 E9 H) ?
2.20.png
▲ 图17. 串口设置
2 g! ?0 o7 ^2 }* u" i. M8 O' o. ~
UART 终端和串口设置完毕后,按下板复位按钮(黑色)。按照 UART 终端上的指示上传 Wi-Fi®和云配置数据。这 些数据保留在 Flash 存储器中,并在下次板启动时重复使用。

. N& T5 l6 m8 V6 h5 g
7 常见问题

. b' W8 S0 ^% W/ _5 }+ b* L+ G7 Q# f' ~
问:当我用 IAR™打开项目时,为什么会弹出此提示框?
, U6 ^( w: i( i2 X% G
2.21.png
▲ 图18. 当 IAR™ IDE 版本与 X-CUBE-GCP 所用的版本不兼容时会弹出此提示框
$ N! Z9 e  N6 V) z) U
:很可能是由于此 IAR™ IDE 版本比开发包所用版本更早(请参阅软件包根文件夹中提供的版本说明,以了解支持的 IDE 版本),因此不能保证兼容性。这种情况下,需要更新 IAR™IDE 版本。

4 {9 ^$ ^8 N$ O3 |( s
问:应该如何修改应用程序来发布其他消息?
:根据是使用 B-L475E-IOT01A 还是其他板,googleiot.c 文件中需要分别更新函数GoogleIoT_publishTelemetry ()或GoogleIoT_publishDeviceState ()。
1 ~% ~3 K( b! I. T
问:我的设备不能连接到 GCP。我该如何处理?
:需要检查的事项是:
1、确认连接字符串中的project-id、registry-id 和device-id 均正确拼写并提交。GCP 通常创建唯一指定的 project-id,它包含自动生成的名称和/或编号,例如。因此,务必使用注册控制台上显示的 project-id。
2、如果不成功,则必须再次仔细进行初始配置。
3、如果仍然没有连接,请在 GCP 控制台上检查并确认为设备定义的设备公钥是使用设备上保存的对应的正确私钥设置的。
+ ^8 t2 R8 q5 ^3 Z: ^9 m
问:我的设备不能连接到 Wi-Fi®接入点。我该如何处理?
:请确认其他设备是否可以连接到 Wi-Fi®接入点。如果可以,请在板重置后,按下用户按钮(蓝色)五秒钟,输入 Wi-Fi®凭证。
. I, e1 T: X) A+ d# X& t  ?
问:在 B-L475E-IOT01A 板上,接近传感器总是报告“8190”,即使我将障碍物靠近其放置也是如此。
:厂家交付的接近传感器贴有临时保护膜。在使用传感器前,确保已将膜去掉。保护膜为橙色,几乎不可见。在 B-L475E-IOT01A 上,接近传感器位于板前侧焊接了 MCU 的左下角附近。

% z$ i* @7 L5 J
收藏 评论0 发布时间:2021-2-5 09:46

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版