1. Home
  2. 博客

    如何使用nRF Cloud

如何使用nRF Cloud 2023-08-31 George Xiong, Nordic Semiconductor

Nordic Semiconductor云服务和nRF Cloud构成了一个专为Nordic Semiconductor无线设备优化的物联网平台。该平台为使用Nordic Semiconductor芯片的原型和商用设备提供云连接和服务。

Nordic Semiconductor云服务和nRF Cloud构成了一个专为Nordic Semiconductor无线设备优化的物联网平台。该平台为使用Nordic Semiconductor芯片的原型和商用设备提供云连接和服务。

nRF Cloud的概况

nRF Cloud是一个为Nordic Semiconductor的无线设备优化的云服务平台,它提供了云连接和服务,适用于使用Nordic Semiconductor芯片的原型和商业设备。它的概念和优势如下:

  • 它支持多种的传输协议,包括CoAP, MQTT和REST,使您可以根据您的应用场景选择最合适的方式与云端进行通信。
  • 它提供了一些商业可用的功能,如位置服务和固件远程更新,可以帮助您的设备和客户应用获取快速和节能的位置信息,以及高效和灵活的设备固件管理 。
  • 它提供了一个网页端,让您可以方便地查看和控制您的设备,以及查看设备的数据和状态。
  • 它提供了一个REST API,让您可以使用任何编程语言或平台来构建您自己的用户界面或应用程序,以及与其他云服务进行集成。
  • 它基于Amazon Web Services (AWS)构建,具有高可靠性,高安全性和高可扩展性。
  • 它提供了不同的计划和计费结构,让您可以根据您的需求和预算选择最合适的方案。

以下图表提供了nRF Cloud组件的概览:

以下图表提供了nRF Cloud组件的概览

nRF Cloud账号管理

nRF Cloud的账号类型是指在nRF Cloud平台上注册和使用的不同级别的账号,它们决定了您可以使用的设备数量,服务功能,计费方式等。nRF Cloud的账号类型主要有以下三种:

  1. Develop:Develop是免费的账号类型,适用于开发和测试阶段的用户。您可以创建一个团队,并连接最多10个设备。您可以使用nRF Cloud提供的基本服务,如位置服务和固件远程更新2您不需要提供任何付款信息。
  2. Pro:Pro是付费的账号类型,适用于商业化阶段的用户。您可以创建多个团队,并连接最多2000个设备。您可以使用nRF Cloud提供的所有服务,如位置服务和固件远程更新,以及一些高级功能,如设备分组和API密钥。您需要提供有效的付款信息,并按照每月每个设备的费用进行结算。您的设备数据会永久保存在nRF Cloud上。
  3. Enterprise:Enterprise是定制的账号类型,适用于大规模部署阶段的用户。您可以创建多个团队,并连接不限数量的设备。您需要与nRF Cloud的销售团队联系,并根据您的需求和预算进行定价协商。您的设备数据会永久保存在nRF Cloud上。

nRF Cloud所支持的位置服务

目前nRF Cloud支持Single-cell, Multi-cell, Wi-Fi, A+P GPS, P-GPS, A-GPS。所以,功耗排列顺序,Single cell最省电,A-GPS最耗电。定位精度也如图所示,single cell精度最低,A-GPS定位精度最高。下图比较了各种定位模式的功耗和精度:

如何使用nRF Cloud

AGPS和PGPS,很多人不容易搞明白,下表详细介绍了A-GPS 与P-GPS区别:

 A-GPSP-GPS
Main purpose帮助快速准确地获得首次定位帮助很少连接到云的设备获得快速定位
Use scenario单定位模式、连续模式、周期模式主要是周期模式
Triggered by.NRF_MODEM_GNSS_EVT_AGPS_REQ应用程序直接请求,或由于没有预测或用完或低于阈值而间接请求
Request content to nRF CloudAGPS 请求的帮助类型 + 小区信息P-GPS 配置 + 日期时间,可选小区信息
Data download from nRF Cloud卫星轨道数据、精确定时数据和粗略位置估计,用于请求的 PRN(调制解调器通常要求所有 32 个 SV)未来长达 2 周内每 4 小时进行一次星历预测,存储到闪存。 当预测集中的所有星历表都过期后,P-GPS 将下载新的星历表。 对于所有 32 个 SV
Data injection to modem下载后立即.NRF_MODEM_GNSS_EVT_AGPS_REQ 在 TTFF 之前(当启用 P-GPS 且未启用 A-GPS 时),或每 4 小时从存储中触发定时器注入。
Main merit减少 GPS 设备估计其位置的时间 (TTFF)定期向调制解调器提供星历表,以确保调制解调器始终具有有效的轨道。 减少 GPS 设备定期定位的时间
Known limitation 如果应用程序使用 nrf_cloud_pgps_set_location() 反馈定位位置,并且设备在定位之间移动很长的距离,则下一次定位的时间可能比预期更长(不准确的 P-GPS 数据用作 A-GPS 注入)

在量产阶段的设备批量注册

1. 在以下链接中,下载批量注册脚本

~$ git clone https://github.com/nRFCloud/utils.git

2. 使用Python的pip工具安装所需的包:

~$ pip3 install -r requirements.txt

3. Create CA Cert

该脚本创建一个自签名的CA证书和相应的EC密钥对。CA证书和私钥可以用来创建设备凭证。通常情况下,只需要运行该脚本一次,然后可以使用其输出生成多个设备凭证。

以下是输出文件的格式:

<your_prefix><CA_serial_number_hex>_ca.pem
<your_prefix><CA_serial_number_hex>_prv.pem
<your_prefix><CA_serial_number_hex>pub.pem

usage: create_ca_cert.py [-h] -c, C, [-st ST] [-l L] [-o O] [-ou OU] [-cn CN] [-dv DV] [-e EMAIL] [-p PATH] [-f FILEPREFIX]

Create CA Certificate

optional arguments 
-h, --helpShow help message and exit
-c, C2 character country code
-st STState or Province
-l LLocality
-o OOrganization
-ou OUOrganizational Unit
-cn CNCommon Name
-dv DVNumber of days valid
-e EMAIL, --email EMAILE-mail address
-p PATH, --path PATHPath to save PEM files
-f FILEPREFIX, --fileprefix FILEPREFIXPrefix for output files
  

例如

python create_ca_cert.py -c CN -l CITY -o "COMPANY NAME" -ou "DEPARTMENT" -cn DOMAIN.cn -e FIRST.LAST@DOMAIN.CN -p ./my_ca

  Creating self-signed CA certificate...
  File created: /my_ca/my_company-0x3bc7f3b014a8ad492999c594f08bbc2fcffc5fd1_ca.pem
  File created: /my_ca/my_company-0x3bc7f3b014a8ad492999c594f08bbc2fcffc5fd1_prv.pem
  File created: /my_ca/my_company-0x3bc7f3b014a8ad492999c594f08bbc2fcffc5fd1_pub.pem

4. 对每个设备写入证书

device_credentials_installer.py这个脚本自动生成并写入设备证书,程序中必须支持AT指令,脚本通过串口写入设备证书。

例如

python device_credentials_installer.py -d -t YOUR-DK1 --ca my_ca\xx.pem --ca_key my_ca\xx_prv.pem -a --csv closed_dk_prov.csv --devinfo closed_dk_info.csv --devinfo_append --term CRLF

5. 批量注册,每1000个设备,执行一次脚本

python ./nrf_cloud_provision.py --apikey $API_KEY --csv example_prov.csv

云服务的模式

这节,重点讲nRF Cloud支持的模式,主要分为三种,从设备到nRF Cloud,从客户cloud到nRF Cloud,从设备到多个云。会以从云到云为重点讲解。

1. 从设备到nRF Cloud

目前nRF Connect SDK 默认是从设备到nRF Cloud,这种模式客户不需要修改。

cloud-从设备到nrf-cloud

2. 从设备到多个云

从设备端需要集成多个云接口,客户需要开发除nRF Cloud接口之外的云接口。

cloud-从设备到多个云

3. 从设备到客户cloud,从客户cloud到nRF Cloud

Cloud to nRF Cloud是一种可以让你的设备通过你自己的云端服务来连接nRF Cloud平台的方法。这样,你可以利用nRF Cloud提供的位置服务,固件更新服务,设备管理服务和安全服务,同时保持对你的设备通信流程的灵活性和控制。从客户云到nRF Cloud,从设备到客户云访问接口,需要客户自己开发。

cloud-从客户cloud到nrf-cloud

3.1. 从云到云的要求

  • nRF Cloud Pro或Enterprise的账户类型。

  • 必须使用代理服务器。

  • 必须生成一个服务密钥。

    要使用Cloud to nRF Cloud,你需要遵循以下步骤:

    • 在你自己的云端服务上注册和配置你的设备,使其能够与你的云端服务进行双向通信。
    • 在nRF Cloud平台上创建一个账户,并在设置中启用Cloud to nRF Cloud 功能。
    • 在nRF Cloud平台上生成一个API密钥,并将其保存在你自己的云端服务中。

    在你自己的云端服务中,使用REST API来与nRF Cloud平台进行交互。你可以使用以下API来实现不同的功能:

    • POST /devices: 用于在nRF Cloud平台上注册你的设备,并获取一个设备ID。
    • GET /devices/{device_id}: 用于查询你的设备在nRF Cloud平台上的状态和属性。
    • PUT /devices/{device_id}: 用于更新你的设备在nRF Cloud平台上的属性,如名称,标签,元数据等。
    • DELETE /devices/{device_id}: 用于从nRF Cloud平台上删除你的设备。
    • POST /messages: 用于向你的设备发送消息,如位置请求,固件更新指令等。
    • GET /messages: 用于接收来自你的设备的消息,如位置响应,固件更新状态等。

3.2. 下面以基站定位为例,说明从C2C模式的原理

首先我们讲下,如何使用CLOUD to nRF Cloud中的JSON Web Token和service key

JSON Web Token是一种可以在不同方之间安全地传递信息的标准。它由三部分组成:头部,有效载荷和签名。头部包含了JWT的类型和算法。有效载荷包含了JWT的主题,过期时间,发行者等信息。签名是用来验证JWT的完整性和来源的。

service key是一种可以用来签署JWT的密钥。它是由nRF Cloud平台生成的,并且只能由团队所有者获取。service key可以用来启用或禁用不同的位置服务,如A-GPS,P-GPS,SCELL,MCELL和Wi-Fi位置。

要使用CLOUD to nRF Cloud中的JSON Web Token和service key,你需要遵循以下步骤:

  • 在nRF Cloud平台上创建一个账户,并在设置中启用CLOUD to nRF Cloud功能。
  • 在nRF Cloud平台上生成一个API密钥,并将其保存在你自己的云端服务中。
  • 在nRF Cloud平台上生成一个service key,并将其保存在你自己的云端服务中。
  • 在你自己的云端服务中,使用service key来签署一个JWT,并将其作为Authorization: Bearer header来发送请求给nRF Cloud平台。
  • 在nRF Cloud平台上接收并验证JWT,并根据其有效载荷中的信息来提供相应的服务。

基站位置服务使你能够根据设备当前连接的基站和它能够通信的基站获取设备的大致位置。关于基站的信息可以转换为一个地理位置,并可以在地图上显示。

如何使用nRF Cloud map

如何使用nRF Cloud

截图显示了一个设备的三个位置:

  • 它最新的已知GNSS位置(一个蓝色的点)。
  • 基于它当前连接的cell的大致位置(黄色的圆)。
  • 基于它当前连接的cell和它能够接收信号的邻近cell的大致位置(红色的圆)。
  • 运行在 nRF9160 上的固件需要获取它所连接的移动网络的信息,并将这些小区位置数据发送到 nRF Cloud。

3.2.1. 从设备发cell信息到cloud

运行在 nRF9160 上的固件需要获取它所连接的移动网络的信息,并将这些小区位置数据发送到 nRF Cloud。

从设备发cell信息到cloud

在设备上,你可以使用 Modem information library 来获取设备当前连接的网络的信息。这些信息可以在后端用来解析设备的位置。Digital twin(在 AWS 上称为设备影子)是一个存储这些信息的好地方。信息可能如下:

{
  "nw": "LTE-M GPS",
  "area": 2305,
  "mccmnc": 24202,
  "cell": 33703712
}

3.2.2. 将当前连接的cell和邻近cell的信息发送到你的后端

%NCELLMEAS AT 命令扫描邻近的小区,并返回当前连接的小区和零个或多个设备可以通信的邻近小区。

这些信息可以在后端用来确定设备的位置。如果找到相邻的小区,那么大概的位置就会更精确。因为报告的大小可能很大,所以在device shadow中存储它是不可行的。因此,建议将它作为一个单独的消息发送到一个自定义的MQTT主题上。如下是个例子:

{
  "area": 2310,
  "adv": 65535,
  "mnc": 2,
  "rsrq": 8,
  "rsrp": 24,
  "mcc": 242,
  "cell": 34288908,
  "earfcn": 6300,
  "nmr": [
    {
      "rsrp": 22,
      "cell": 291,
      "rsrq": 6,
      "earfcn": 6300
    },
    {
      "rsrp": 21,
      "cell": 129,
      "rsrq": 4,
      "earfcn": 6300
    }
  ]
}

3.2.3 将小区位置数据存储在云端

设备发送的小区数据需要存储到物联网digital twin服务或数据库中。这样可以在以后的时间向应用程序提供这些信息,并使用nRF Cloud Cell Location服务REST API异步地将小区信息解析为地理位置。如果数据处理失败,可以重试。

对于单个小区位置,这个存储可以作为一个缓存。一个小区的位置信息可以被重用,如果有很多设备连接到同一个小区。它们的大概地理位置是相同的。

将小区位置数据存储在云端

3.2.4. 解析小区位置信息

使用GetPositionFromCells API方法将小区位置数据解析为地理位置

存储小区位置服务密钥:使用服务密钥签名的JSON Web Token (JWT)对所有API调用进行身份验证。在你的云端后台以安全的方式存储服务密钥。

搭建小区位置解析器:你需要实现一个解析器,它使用存储的单个cell或相邻cell数据来查询 GetPositionFromCells API 方法。它使用服务密钥来验证请求,并将结果存储在数据库中。你可以稍后检索结果,并使用它们为设备提供历史位置跟踪。

解析小区位置信息

位置解析器解析后的数据如下格式:

{
  "lat": 45.524098,
  "lon": -122.688408,
  "uncertainty": 300,
  "fulfilledWith": "MCELL"
}

完整图:

以下完整图表显示了设备单元位置数据的流程,以及将这些数据解析为地理位置并使其可供 Web 应用程序使用所涉及的必要组件

nrf cloud

3.2.5. 从云到云模式有以下几个优点:

  • 客户可以使用自己熟悉和信任的云服务平台,无需改变设备的配置或代码。
  • 客户可以灵活地选择使用哪些nRF Cloud服务,以及如何使用它们。
  • 客户可以更好地保护设备和数据的安全性和隐私性。

从云到云模式也有一些缺点:

  • 客户需要额外地搭建和维护一个代理服务器。
  • 客户需要付费购买nRF Cloud Pro或Enterprise计划。
  • 客户需要定期更新JWT以保持对nRF Cloud服务的访问权限。

总之,从云到云模式是一种适合高级用户和商业用户的使用nRF Cloud服务的方式,它提供了更多的灵活性和控制性。

观看网络研讨会

订阅Nordic新闻简报

了解最新信息!订阅后即可获取最新Nordic及物联网资讯

立即订阅