nrf9160 做modem—— 连接云(接入方式MQTT)
阅读原文时间:2023年07月10日阅读:1

今天测试把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

结果如下:

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章