nRF Cloud UUID 批量注册
这种方式又被称为预链接模式(Preconnect Provisioning),是利用nRF Cloud 提供的云端REST接口进行批量的设备注册。这种方式主要面向工厂量产的大规模批量注册设备,因为证书的生成,写入以及nRF Cloud设备注册均是通过自动化的python脚本完成的。
预链接模式的注册可以用下图表示:
证书生成写入的英文版本详细指导可以查阅:https://docs.nrfcloud.com/Devices/Security/Credentials.html
Python所有脚本可以在该网址获取到:https://github.com/nRFCloud/utils/tree/master
具体步骤如下:
1. 删除当前nRF9160内已经存储nRF Cloud证书
证书可以通过查阅获得所有证书,具体如下图:
AT%CMNG=1
通过下面3条命令可以删除原本设备的nRF Cloud, 注意全新的nRF9160设备并没有存储证书所以不需要此步骤,这个步骤是给需要重新注册nRF Cloud的nRF9160设备
AT%CMNG=3,16842753,1 AT%CMNG=3,16842753,2 AT%CMNG=3,16842753,0
2. 证书生成和证书写入
通过以下命令可以生成新的证书:
python create_ca_cert.py -c CN -l Shenzhen -o "Nordic Semiconductor K.K." -ou "Sales" -cn nordic.cn -e david.duan@nordicsemi.no -p ./my_ca2
命令中可以添加该设备证书的基本信息,命令生成结果如下:
0x5d933112b037d94df0ef65968fea378745eb2281_prv.pem基于OPENSSL生成的私钥
0x5d933112b037d94df0ef65968fea378745eb2281_pub.pem基于OPENSSL生成的公钥
0x5d933112b037d94df0ef65968fea378745eb2281_ca.pem自签CA证书
通过以下命令可以将证书写入进nRF9160 modem:
python device_credentials_installer.py -d -t closed-DK --ca my_ca2\0x5d933112b037d94df0ef65968fea378745eb2281_ca.pem --ca_key my_ca2\0x5d933112b037d94df0ef65968fea378745eb2281_prv.pem -a --csv closed_dk_prov.csv --devinfo closed_dk_info.csv --devinfo_append --term CRLF
这一步骤会生成两个CSV文件,这个两个CSV文件包含所有使用上面脚本写入的DK板。
3. nRF Cloud 注册
考虑的量产的复杂情况,Nordic提供了两种方式来做nRF Cloud的认证。
- 使用以下脚本可以完成nRF Cloud的注册
python nrf_cloud_provision.py --apikey 919922c40bc0e7a4f10485ccb72e78da34d030f8 --csv provision.csv
apikey 可以在自己的nRF Cloud的User account 里面找到具体如下图
- Csv表格注册, 考虑到产线电脑可能无法链接外网,nRF9160同时支持是CSV表格来进行批量注册。在证书生成的步骤里面所有通过脚本写入的设备会被记录在closed_dk_prov.csv表格。
如下图在nRF Cloud内点击Bulk Onboard然后上传closed_dk_prov.csv既可以实现批量注册:
mqtt TLS connection / Https client 示例
nRF Connect SDK 提供了许多不同的应用层协议,可用于您的应用程序中的蜂窝通信。我们将解释MQTT通信的原理以及如何使用nRF Connect SDK中的MQTT库。我们还将学习如何使用MQTT over TLS 和 HTTPS over TLS来提供与另一端的安全端到端连接。
mqtt TLS connection
MQTT 是一种广泛使用的应用层协议,基于 TCP,它提供了一种在客户端网络和中央代理之间共享消息的高效可靠的方式。
MQTT(消息队列遥测传输)是一种通常在 TCP 上运行的应用层协议,通常用作云平台的后端。
MQTT 是一种发布-订阅网络协议,由消息代理和一个或多个客户端组成。信息通过主题进行组织;客户端可以通过 MQTT 代理发布和订阅特定主题。发布到某个主题时,订阅该主题的所有客户端都将收到来自 MQTT 代理的消息。
MQTT 协议具有保活功能,可确保代理和客户端之间的连接保持活动状态。连接到代理时,客户端指定保持活动间隔,即在连接关闭之前代理和客户端可以不进行通信的最长时间。经纪人还可以设置保活时间;如果broker的保活时间较短,则可以关闭broker端的连接。
MQTT 支持多种身份验证和数据安全机制。TLS 连接到 MQTT 代理是MQTT中一种重要的安全认证形式。添加 TLS 将对 MQTT 客户端和代理之间的通信进行加密。本示例将说明如何实现MQTT TLS 链接。
以nRF Connect SDK 2.5 为例, MQTT的例子的说明可以在下面的链接找到https://developer.nordicsemi.com/nRF_Connect_SDK/doc/2.5.0/nrf/samples/net/mqtt/README.html
该例子使用mosquitto 的公用测试服务器进行测试, MQTT的证书生成指导可以看这里https://test.mosquitto.org/ssl/
证书是通过SSL脚本生成,如下图SSL脚本会生成private key 和 CSR 证书。
之后 https://test.mosquitto.org/ssl/ 网站上通过CSR证书可以生成mosquito服务器认可的CRT证书
最终会生成如下证书:
同时将证书写入nRF91 的modem,证书说明表格如下:
最终MQTT TLS 链接结果如下图:
nrRF Cloud FOTA 示例
测试nRF Cloud FOTA 可以使用例子nRF Cloud REST FOTA。
该例子的说明链接如下:
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/2.5.0/nrf/samples/cellular/nrf_cloud_rest_fota/README.html
当固件被烧录到nRF9160 DK 后,DK会有串口Log输出。 当输出的log 显示已经可以成功链接上nRF Cloud 后。 可以nRF Cloud 上新建OTA任务。
nRF Cloud 上设置任务如下:
选择Device Management -> Firmware Updates->Add Bundle
并且创建的OTA job并将新的OTA 固件上传到nRF Cloud,具体如下图:
当完成创建后可以在这个页面使能OTA 的JOB, nRF9160 会通过MQTT协议一直订阅nRF Cloud 的OTA信息,当发现了有新的OTA job 会直接触发OTA升级动作。