nrf9160 做modem—— 连接云(接入方式MQTT)
今天测试把nrf9160作为modem的例程Serial LTE Modem程序(后面简称slm),何为做modem,通俗来说就是将nrf9160作为无线模块,主控由其余MCU做,主控通过AT命令控制nrf9160工作。
前期开发准备:
- nrf9160-DK版
- nRF Connect for Desktop(桌面版)
- NCS(官方最新开发SDK,笔者写这篇博客时更新到NCS1.9)
- 一张新的移动物联网卡(特别注意一定是要移动的,还要是激活的物联网卡,购买时让移动公司进行激活,因为设备会进行绑定,如果需要迁移到其余设备,需要去找移动客服进行解绑)。
一、开发环境安装。
环境安装请参考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、主机名、端口号都是很重要的参数。
所以连接命令就可以设置为(注意该命令在使用时要保证没有填写参数的字符端有至少一个空格,否则会出错):
由于我只有一个设备,所以客户机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)的更多相关文章
- nrf9160做modem——测试连接阿里云
简介:在前面有讲过如何使用nrf9160去连接一个云,然后进行发布订阅信息,但是当时连接的是一个免费的测试云,在国内的话许多人想要连接阿里云或者华为云,下面就来测试一下连接阿里云.这里为什么要和上一篇 ...
- nrf9160做主控连接阿里云——(mqtt_simple例程)
简介:基本每一个云都支持MQTT,这种轻量级协议在数据量不大的应用上是一个很好的选择.上一篇博客使用SLM例程去连接了阿里云,本次使用mqtt_simple去连接云进行测试,关于一些已近在前面文章中演 ...
- 在线工具生成接入信息mqtt.fx快速接入阿里云
在线工具生成接入信息mqtt.fx快速接入阿里云 在使用阿里云获取的三元组信息进行接入的时候,往往需要加密生成接入信息之后才能进行接入,因此我根据阿里云提供的加密工具实现了一个阿里云物联网平台mqtt ...
- NB-IOT模块 M5310-A接入百度开放云IOT Hub MQTT
目录 1.登陆百度开放云,在产品服务中选择IOT HUB 2 2.选择 创建计费套餐,目前1百万条/每月是免费的 2 3.点击管理控制台进入项目列表 4 4. 点击创建项目,项目类型选择数据型 4 5 ...
- (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)
QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...
- Internet接入方式
(转载) 接入网可以大概分成两类:拨号上网(包括ASDL)与专线上网 在接入网中,目前可供选择的接入方式主要有PSTN.ISDN.DDN.LAN.ADSL.VDSL.Cable-Modem.PON和L ...
- 漫谈LiteOS-端云互通组件-MQTT开发指南(上)
1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...
- 漫谈LiteOS-端云互通组件-MQTT开发指南(下)
1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...
- SSH如何通过公钥连接云服务器
导读 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接.linux下可以直接通过ssh命令连接.其实这两者都是一致的,都是通过ssh协议进行传输. 如果我 ...
随机推荐
- js运算符和逻辑分支
运算符 1.拼接运算符:+,加号两边只要有一边出现字符串就是拼接 2.算术运算符 如:2+3: 3.赋值运算符+=,-=,/=,*= 4.关系运算符>,<,==,=== != !== ! ...
- 升级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 ...
- mybatisplus-sql注入器
sql注入器 使用mybatisplus只需要继承BaseMapper接口即可使用:但是有新的需求需要扩展BaseMapper里面的功能时可使用sql注入器. 扩展BaseMapper里面的功能 点击 ...
- Windows客户端DNS工作原理
通常大家对Windows客户端DNS的配置存在多个误区. 误区一,配置1个内网DNS,1个外网DNS.解析内网的时候用内网DNS,解析外网的时候用外网. 电脑怎么知道哪个是内网?哪个是外网?我们内部的 ...
- SQL语句中过滤条件放在on、where、having的区别和联系
摘要:SQL语句中,过滤条件放在不同筛选器on.where和having的区别和联系. 综述 在<SQL语句中过滤条件放在on和where子句中的区别和联系>中,介绍了多表关联SQL语 ...
- 【前端】在浏览器控制台,直接发Ajax请求
我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据.但是由于一些session,cookie的存在,我们无法在postman上创建一些会话.那么这样,我们就可以在浏览器上直接发送Ajax请 ...
- 【gRPC】C++异步服务端客户端API实例及代码解析
对于同步API而言,程序的吞吐量并不高.因为在每次发送一个gRPC请求时,会阻塞整个线程,必须等待服务端的ack回到客户端才能继续运行或者发送下一个请求,因此异步API是提升程序吞吐量的必要手段. g ...
- 第二章:视图层 - 1:URL路由基础
路由的编写方式是Django2.0和1.11最大的区别所在.Django官方迫于压力和同行的影响,不得不将原来的正则匹配表达式,改为更加简单的path表达式,但依然通过re_path()方法保持对1. ...
- 通过nginx转发rabbitmq访问手动添加队列的时候报错:Management API returned status code 405
原因: 正常访问该地址:https://xxx.xxx.com/rabbitmq/ 时能正常跳转,但是 rabbitmq management 的 API url 出现了 %2f 字符,这些字符会在经 ...
- ELK 性能优化实践
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI5MTU1MzM3MQ==&mid=2247489814&idx=1&sn=6916f8b7 ...