nrf9160 做modem—— 连接云(接入方式MQTT)

今天测试把nrf9160作为modem的例程Serial LTE Modem程序(后面简称slm),何为做modem,通俗来说就是将nrf9160作为无线模块,主控由其余MCU做,主控通过AT命令控制nrf9160工作。

前期开发准备:

  1. nrf9160-DK版
  2. nRF Connect for Desktop(桌面版)
  3. NCS(官方最新开发SDK,笔者写这篇博客时更新到NCS1.9)
  4. 一张新的移动物联网卡(特别注意一定是要移动的,还要是激活的物联网卡,购买时让移动公司进行激活,因为设备会进行绑定,如果需要迁移到其余设备,需要去找移动客服进行解绑)。

一、开发环境安装。

环境安装请参考nrf9160开机测试——连接nrfcloud云 - 星辰_start - 博客园 (cnblogs.com)

 

二、连接测试

1、连接MQTT云(无证书连接)

由于我没建立自己的云网站,在这利用一个免费的MQTT测试云进行硬件测试。

 

1.1、下载modem固件

第一步先去官网上下载mfw_nrf9160的固件(这注意一下版本,固件版本和NCS版本是有对应的,官网下载固件处,点击向下的箭头直接查看适用于那个NCS版本),下载链接如下:

Compatible Downloads - nordicsemi.com,(或者在官网,搜索9160进入9160 DK,然后下拉网页同样找到如图界面进行下载)。

 1.2、下载mfw_nrf9160固件到nrf9160

打开nrf connect 下的programmer软件,进行固件下载:

第一步链接开发板和PC端,然后打开programmer软件,链接开发板,然后擦除,在解压刚刚下载的nrf9160dk_fw_2022-02-17_ec486dab.zip其中有一个mfw_nrf9160_1.3.1.zip固件直接拖到文件添加区,然后点击write,进行烧写。

 等待烧写完成:

 这一步完成后我们就可以,打开SES或者VS code编译NCS中的官方程序进行程序下载。

1.3、APP程序下载

打开VS code,按照如图所示操作,选择好先前下载NCS文件。

 如下为选择的NCS和编译工具链,1为下载好的NCS目录,2为目录中的工具链目录toolchain,选择好有如图显示即可,笔者使用了NCS1.9,其余版本同样的选择。选择完毕不用其余操作。

 然后建立镜像工程:流程如图,

 在弹出的窗口中选择如下工程:slm。然后点击open in browser,会打开一个网页有对这个工程的解释与指导,然后创建工程。

然后选择板子:

 从而得到一个nrf9160的项目,编译并下载。

 1.4、MQTT云客户端准备

由于我使用了mosquitto进行测试,首先我们去到mosquitto的官网下载一个mosquitto客户端:连接如下 :Download | Eclipse Mosquitto,如图为官网选择和自己环境相关的客户端进行下载,由于nordic的LTE Link Monitor也运行于Windows,所以建议在开发时使用Windows版本的,便于联合调试。如图选择Windows进行下载安装。

 下载后双击选择安装:

一路next,注意在安装路径,你可以选择其他盘,或者你想要安装的路径,请记住这个路径,并点击安装等待安装完成。

 安装完毕后,去到刚刚选择安装的路径下,并进入到这个文件中:

 在文本框中直接输入cmd然后回车

 

会弹出一个命令行窗口,同样的方式,在打开一个(一共两个),我们进行一下测试,看你的mosquitto客户端是否可以正常订阅与发布,便于稍后的测试

 

 测试如下:

 以上测试代码如下:

订阅:
mosquitto_sub -h test.mosquitto.org -t "mqtt" -v

【-h】指定要连接的MQTT服务器
【-t】订阅主题,此处为mqtt
【-v】打印更多的调试信息

发布:
mosquitto_pub -h test.mosquitto.org -t "mqtt" -m "test——9160"-h】指定要连接的MQTT服务器
【-t】订阅主题,此处为mqtt
【-v】打印更多的调试信息

1.5、nrf9160消息订阅与发布

在前面2.1.3有说到过,我们建立工程时可以打开一个关于nrf9160作为modem的slm程序网页指导教程,现在我们打开它,找到MQTT AT commands,在这有我们需要的所有关于如何连接MQTT云,并进行连接、订阅,发布的相关AT控制指令。注意一点如果你想连接其余类型的云,那也可以在这找到其余相关的AT指令,如(http)。指令连接网站如下:MQTT client AT commands — nRF Connect SDK 1.9.99 documentation (nordicsemi.com)

在nrf connect中打开LTE Link Monitor,给硬件插入好物联网卡,并用LTE Link Monitor连接(也可以用其余工具,具体可以在网页指导中查看)上硬件后复位一下看到有Ready输出,说明硬件已经准备好了,我们可以进行配置,让我们的设备去订阅与发布了。

 

1.5.1、nrf9160设置 

第一次使用时,需要运行如下命令进行模式配置,才可以在进行测试(在中国):(以下使用到的AT指令都可以在官方AT指令集中进行查询,或者使用通用的3GPP指令(部分通用)去查询)

第一步:先设置为离线模式

AT+CFUN=4
0:关闭电源并存储。通过停用LTE和GNSS服务来禁用射频电路。
1-正常的模式。主动模式是LTE或GNSS,或两者都有
2:活动系统模式下的仅接收模式。
4:飞行模式,通过停用LTE和GNSS服务来禁用射

第二步:设置为NB网络,默认为LTE但是国内为NB,所以要进行切换,如果你确定你的地区有LTE覆盖,那就不用进行切换。

AT%XSYSTEMMODE=0,1,0,0

第三步:设置使用PCO

AT%XEPCO=0

0:使用 PCO
1:使用 ePCO

第四步:开启modem

AT+CEREG=5

第五步:开始联网

AT+CFUN=1

等待CEREG返回为1时说明已经联网了,2为搜索网络

 有时候你需要确定你的物联网卡是有可以连接运营商的网络,那么我可以使用下面的指令进行查询,看其返回值:

AT+CGATT?

返回:
1——说明连网成功
2——说明没有连网

如果出现返回为2,那么需要从新去搜索连接网络,如果一直无法连接,请和运营商确定一下你的SIM看是否可以连接网络,或者你所在的区域是否有NB网络覆盖到。

 1.5.2、MQTT连接命令:

如果连网成功,那么我们就开始进行连接测试云,下面是官方AT指令中关于MQTT连接云的命令格式:其中涉及几个参数客户端ID、主机名、端口号都是很重要的参数。

 所以连接命令就可以设置为(注意该命令在使用时要保证没有填写参数的字符端有至少一个空格,否则会出错):

AT#XMQTTCON=1,"0"," "," ","test.mosquitto.org",1883

由于我只有一个设备,所以客户机ID字段为零,当你有多个设备时,请顺序给你的设备命名,并且可以利用查询指令进行查询,知道这是第几个设备,连接的云地址是什么,连接端口号是什么等信息

命令如下,相关参数说明在指导中也有说明:

AT#XMQTTCON?

以下是我测试时得到的返回:

根据我们连接的test.mosquitto.org云相关说明,选择端口1883为不用加密,不用认证的开放连接,所以可以不用账户密码,还有证书等,如果你需要其余加密连接或者有CA证书的连接,还需要去生成证书,并导入相关云平台的证书:

发送指令后返回第一个参数为零,说明我们连接成功,如果连接成功了,不能再次去运行这个连接指令,否则报错,只有用断开指令后,才能再次运行连接指令。

断开指令如下:

AT#XMQTTCON=0,"0"," "," ","test.mosquitto.org",1883
或者
AT#XMQTTCON=0

 

 1.5.3、MQTT订阅

AT命令格式如下:

AT#XMQTTSUB="nrf9160_test",0

订阅成功后,使用mosquitto客户端去发布一条消息:

 

 可以看到我们的LTE中既收到了订阅的关于“nrf9160_test”的消息:

  1.5.3、MQTT发布

我们先在mosquitto客户端也去订阅一下:

指令如下:

mosquitto_sub -h test.mosquitto.org -t "nrf9160" -v

 

 然后在LTE中去发布一下:

相关命令参如下(也可在指导文档中直接查看):

命令:

AT#XMQTTPUB="nrf9160","nrf916 test message",0,0

 

 还有一下其余指令,可以自行进行测试。

 

 2、连接MQTT云(有证书连接方式)

前面测试并连接了无需证书端口的连接,那么我接下来测试一下去连接需要证书的端口,步骤如下:

2.1、获取test.mosquitto.org云颁发的CA证书,实际项目运用过程中也请去你云的所在平台申请这个CA证书。test.mosquitto.org平台证书获取如下图所示,点击红框所示连接即可获取一个.crt证书。

 我获取的CA证书如下:

2.2、接下来就是客户端证书获取,点击生成客户端证书的连接会跳转到下面界面:

根据说明,我们需要openssl程序来生成我们的私钥和CSR,所以我们想要去配置会在搭建一个openssl的环境,如果你已经有了请忽略下列步骤,如果没有那么可以在下列开源平台去下载一个可以直接运行的openssl软件,如果你方便可以给相关提供该软件的作者进行一下打赏,毕竟制作不易,连接如下:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com),选择下载后我们双击下载的.exe文件:

会弹出安装界面,请记住你的安装路径,稍后我们需要进入到这个目录,然后一路Next:

 安装好之后找到软件的安装目录,并找到如图所示目录,并输入cmd调出命令行窗口,:

 然后在打开的命令窗口中运行CSR和私钥生成命令:

 私钥生成命令:

openssl genrsa -out client.key

然后执行CSR生成命令:

openssl req -out client.csr -key client.key -new

执行该命令时需要根据提示输入一些信息,意义如下

 在刚刚的软件目录下即可看到两个文件,分别为私钥和CSR。

现在需要把CSR打开提供给Generate client certificates for test.mosquitto.org,会获得客户端证书。

 

 2.3、给nrf9160提供私钥,CA证书和客户端证书

第一步:打开LTE Link Monitor工具链,并连接nrf9160然后利用AT指令让其处于离线不工作状态,我们开始上传证书:

离线命令:

AT+CFUN=4

然后分别打开前面生成的私钥,服务端给到我们的CA证书,客户端证书,把内容添加到如下界面响应的字段出,并设定自己的凭证(图中12345678)。

等待上传成功, 然后在配置按无证书时一样配置一道网络,几个命令同样列举如下:

AT%XSYSTEMMODE=0,1,0,0

AT%XEPCO=0

AT+CEREG=5

AT+CFUN=1

等待接入网络后。即可去连接需要证书的端口了,命令如下(一定要加入写入证书的凭证,下列命令中111为凭证,请使用你自己设置的凭证):

AT#XMQTTCON=1,"0"," "," ","test.mosquitto.org",8884,111

 返回0,说明我们连接成功,接下来订阅一下后,利用客户端发送一下消息测试一下是否可以接收到订阅消息

订阅:

AT#XMQTTSUB="CA_CER_nrf9160_test",0

PC端mosquitto客户机发布命令:

mosquitto_pub -h test.mosquitto.org -t "CA_CER_nrf9160_test" -m "test--9160"

可在LTE中看到订阅消息,说明我们通讯成功。

 发布:

PC端mosquitto客户机订阅命令:

mosquitto_sub -h test.mosquitto.org -t "CA-nrf9160_test" -v

LTE端发布命令:

AT#XMQTTPUB="CA-nrf9160_test","nrf916 test message",0,0

结果如下:

 到此为止我们测试完毕,实际应用中也差不多的操作流程。

 

 注意事项:

# 研发生产测试方向
1、 预留好射频测试的串口测试点作为串口 TX 和 RX 做 DTM 测试用,任意 GPIO 即可 (首推空引脚),方便研发调试或者方便和工装对接
2、 开发调试的时候使用 Jlink 进行下载代码和 Debug;工厂批量烧录如下,主要是下载速 率和稳定性的问题,因为影响工厂生产效率
3、 芯片射频匹配电路根据芯片型号和封装和线路图参考手册上面的参数进行配置;射频 走线为 50 欧姆,走线光滑过渡自然,背面等有完整的参考地面,走线附近多地孔 等;天线匹配根据实际天线设置匹配参数;研发阶段射频必须做频偏校准,通过调节 高频晶振负载电容控制 CH0 /CH19/CH39 通道的频偏在 0KHz 附近,同时射频区域和晶 振匹配电容的器件选用小封装、高精度、低温飘的器件,以保批量时候的产品一致性
 
posted @ 2022-05-10 11:45  星辰_stars  阅读(1340)  评论(7编辑  收藏  举报