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

结果如下:

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

nrf9160 做modem—— 连接云(接入方式MQTT)的更多相关文章

  1. nrf9160做modem——测试连接阿里云

    简介:在前面有讲过如何使用nrf9160去连接一个云,然后进行发布订阅信息,但是当时连接的是一个免费的测试云,在国内的话许多人想要连接阿里云或者华为云,下面就来测试一下连接阿里云.这里为什么要和上一篇 ...

  2. nrf9160做主控连接阿里云——(mqtt_simple例程)

    简介:基本每一个云都支持MQTT,这种轻量级协议在数据量不大的应用上是一个很好的选择.上一篇博客使用SLM例程去连接了阿里云,本次使用mqtt_simple去连接云进行测试,关于一些已近在前面文章中演 ...

  3. 在线工具生成接入信息mqtt.fx快速接入阿里云

    在线工具生成接入信息mqtt.fx快速接入阿里云 在使用阿里云获取的三元组信息进行接入的时候,往往需要加密生成接入信息之后才能进行接入,因此我根据阿里云提供的加密工具实现了一个阿里云物联网平台mqtt ...

  4. NB-IOT模块 M5310-A接入百度开放云IOT Hub MQTT

    目录 1.登陆百度开放云,在产品服务中选择IOT HUB 2 2.选择 创建计费套餐,目前1百万条/每月是免费的 2 3.点击管理控制台进入项目列表 4 4. 点击创建项目,项目类型选择数据型 4 5 ...

  5. (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)

    QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...

  6. Internet接入方式

    (转载) 接入网可以大概分成两类:拨号上网(包括ASDL)与专线上网 在接入网中,目前可供选择的接入方式主要有PSTN.ISDN.DDN.LAN.ADSL.VDSL.Cable-Modem.PON和L ...

  7. 漫谈LiteOS-端云互通组件-MQTT开发指南(上)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  8. 漫谈LiteOS-端云互通组件-MQTT开发指南(下)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  9. SSH如何通过公钥连接云服务器

    导读 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接.linux下可以直接通过ssh命令连接.其实这两者都是一致的,都是通过ssh协议进行传输. 如果我 ...

随机推荐

  1. js运算符和逻辑分支

    运算符 1.拼接运算符:+,加号两边只要有一边出现字符串就是拼接 2.算术运算符  如:2+3: 3.赋值运算符+=,-=,/=,*= 4.关系运算符>,<,==,=== != !== ! ...

  2. 升级CentOS 7 内核版本

    1.查看当前内核版本 $uname -r 3.10.0-957.el7.x86_64 $uname -a Linux prometheus 3.10.0-957.el7.x86_64 #1 SMP T ...

  3. mybatisplus-sql注入器

    sql注入器 使用mybatisplus只需要继承BaseMapper接口即可使用:但是有新的需求需要扩展BaseMapper里面的功能时可使用sql注入器. 扩展BaseMapper里面的功能 点击 ...

  4. Windows客户端DNS工作原理

    通常大家对Windows客户端DNS的配置存在多个误区. 误区一,配置1个内网DNS,1个外网DNS.解析内网的时候用内网DNS,解析外网的时候用外网. 电脑怎么知道哪个是内网?哪个是外网?我们内部的 ...

  5. SQL语句中过滤条件放在on、where、having的区别和联系

    摘要:SQL语句中,过滤条件放在不同筛选器on.where和having的区别和联系. 综述   在<SQL语句中过滤条件放在on和where子句中的区别和联系>中,介绍了多表关联SQL语 ...

  6. 【前端】在浏览器控制台,直接发Ajax请求

    我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据.但是由于一些session,cookie的存在,我们无法在postman上创建一些会话.那么这样,我们就可以在浏览器上直接发送Ajax请 ...

  7. 【gRPC】C++异步服务端客户端API实例及代码解析

    对于同步API而言,程序的吞吐量并不高.因为在每次发送一个gRPC请求时,会阻塞整个线程,必须等待服务端的ack回到客户端才能继续运行或者发送下一个请求,因此异步API是提升程序吞吐量的必要手段. g ...

  8. 第二章:视图层 - 1:URL路由基础

    路由的编写方式是Django2.0和1.11最大的区别所在.Django官方迫于压力和同行的影响,不得不将原来的正则匹配表达式,改为更加简单的path表达式,但依然通过re_path()方法保持对1. ...

  9. 通过nginx转发rabbitmq访问手动添加队列的时候报错:Management API returned status code 405

    原因: 正常访问该地址:https://xxx.xxx.com/rabbitmq/ 时能正常跳转,但是 rabbitmq management 的 API url 出现了 %2f 字符,这些字符会在经 ...

  10. ELK 性能优化实践

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI5MTU1MzM3MQ==&mid=2247489814&idx=1&sn=6916f8b7 ...