一个NB-IoT/4G模组的AT拨号联网流程

  在各类物联网应用中,NB或者4G网络是常见的通信介质,其最大的优势是可以借助现有的移动基站,无需额外建立基站,所以广泛应用在三表(水表、电能表、天然气表)无线抄表中。通常情况下,对于这类小流量的数据,是通过串口(UART)与NB或者4G模组通信,以AT指令的方式进行数据交互和命令控制。

  我们拿到一个模组后,一般原厂会提供一份或者多份AT指令手册,软件工程师根据指令手册实现预期的功能。厂家提供的指令手册一般的非常全面的,但是我们需要的可能只是其中一部分指令,大部分都是用不到的。这个时候就需要我们能够快速从“众多”命令中提取“有用”命令。本文就是本人根据使用过的模组总结一个整体流程,流程的每一步对应一条或多条AT指令,不同厂商的模组AT指令可能不同,但“总体流程”是不变的,根据流程去找指令,效率会高很多。


  举个也许不那么恰当的例子:使用一个UART需执行的配置步骤:

  • 波特率
  • 数据位
  • 停止位
  • 校验位
  • 流控

  不同的CPU,具体配置寄存器肯定是不一样的,但是上述的整体过程步骤是不会变的,根据理论步骤找到对应的寄存器。


根据以往使用的模组归纳整体拨号流程:

  测试串口链路—>关闭回显—>查询模组名称—>获取IEME号—>检测SIM卡—>查询信号强度—>设置网络着附—>查询网络着附—>查询运营商—>设置APN—>查询本地IP—>IEME认证—>建立连接—>open socket—>数据发送/接收—>close socket

  上述流程只是本人根据以往使用过的NB/4G模组进行的总结,不同的模组,特别是新推出或者小众厂商的模组,与流程不一定完全吻合,具体情况还得根据具体模组来。


1 测试串口链路

指令 返回
AT AT

  不同厂商的模组启动时间存在差异,模组完全启动后才能响应AT指令。比如之前遇到的一个美格模块,启动时间要14S。开机后,可考虑周期性向模组串口发送“AT”命令,直至有响应。


2 关闭回显

指令 返回
ATE0 OK

  有些模块默认是开启回显的。回显就是,发送的内容串口会完整地返回来,一般在开发初期调试会开启回显。后期正常产品是要关闭的,减少串口带宽占用。


开启回显命令: ATE1


3 查询模组名称

指令 返回
AT+CGMM 模块名称

  同一厂商不同模组或者不同厂商的模组,都有一定标识的模组名称。模组名称一般用于驱动程序中兼容多种模组的一个标识,根据不同的模组名称来执行后续不同的联网指令。如果一款产品只用一种模组,可以跳过这个步骤。


4 获取IEME号

指令 返回
AT+CGSN IEME

  国际移动设备识别码(International Mobile Equipment Identity,IMEI),就是我们平常所说的手机序列号(俗称手机串号),用于在移动电话网络中识别每一部独立的移动通信设备,相当于移动电话的身份证。同理,4G模组、NB模组也有一个唯一的IEME号。

  在4G模组拨号联网时,一般不用手动认证IEME号。NB模组在连接socket前一般需要手动认证IEME号。

  IEME号注意保密,就像你的身份证号一样。


5 检测SIM卡

指令 返回
AT+CPIN? +CPIN: READY

  检测到sim卡才能执行后续拨号联网过程。一些模组带有自动检测sim卡状态功能,模组上电后检测到sim卡会串口会主动输出信息,如卡不存在,模组则自动进入PSM模式,如移远的BCxx系列的NB模组。

例:
AT+CPIN?
+CPIN: READY

6 查询信号强度

指令 返回
AT+CSQ 信号强度

  拨号前查询信号强度,信号强度过低可能导致着附移动网失败。实际使用,根据信号强度选择是否进行拨号连接,减少重复拨号过程。连接上TCP网络后,可在空闲线程进行信号强度查询。

例:
AT+CSQ
+CSQ: 29,99

7 设置网络着附

  该命令不同模组可能不一样。参考命令:

指令 返回
AT+CREG=1 OK
例:
AT+CREG=1
OK

8 查询网络着附

  该命令不同模组可能不一样。参考SIMCOM某4G模组命令:

指令 返回
AT+CREG=1 +CREG: 1,1
例:
AT+CGREG?
+CREG: 1,3

9 查询运营商

指令 返回
AT+COPS? 具体运营商
例:
AT+COPS?
+COPS: 0,0,"CHN-TELECOM",7

  运营商信息主要用于下一步APN设置,其次是提供用户查看。


10 设置APN

  该命令不同模组可能不一样。参考移远某4G模组命令:

指令 返回
AT+QICSGP OK

  APN是根据上一步运营商类型来设置的,不同的运营商不一样的设置。如果是专网,还需要由专网运营商提供专门的用户名和密码。

  参考三大运营商非专网APN:

  • 移动 cmnet
  • 联通 3gnet
  • 电信 ctlte
例:
AT+QICSGP=1,1,"cmnet","card","card",3
OK

11 查询本地IP

  该命令不同模组可能不一样。参考移远某NB模组命令:

指令 返回
AT+CGDCONT? 本地IP

  如果成功获取到本地IP,说明模组已经接入运营商的移动网络,否则需等待本地IP获取。获取到本地IP后,离建立TCP网络就只差一步之遥了!

例:
AT+CGDCONT?
+CGDCONT: 1,"IP","CMIOT","10.139.210.85",0,0

12 IEME认证

  该命令不同模组可能不一样。参考移远某NB模组命令:

指令 返回
AT+EGMR+IEME OK

  IEME手动认证,一般用于NB模组中,4G网络中一般不用手动认证。应该是NB出自网络安全性认证考虑。

例:
AT+EGMR=1,7,"123456789012345"	/* IEME号注意保密,就像你的身份证号一样 */
OK

13 建立连接

  不同模组该命令不一定独立出来,一般与“open socket”命令结合一起,参考美格某模组指令:

指令 返回
AT+MIPCALL=1 成功返回本地IP
例:美格某模块建立连接
AT+MIPCALL=1
+MIPCALL:1,10.13.44.170

14 open socket

  该命令不同模组可能不一样。参考移远某NB模组命令:

指令 返回
AT+QIOPEN OK
例:移远某模组建立socket
AT+QIOPEN=1,1,"TCP","20.10.150.154",6201,10000,1
OK

15 数据发送

  该命令不同模组可能不一样。即使命令不一样,根据手册目录易辨别出TCP/UDP的命令。需要注意的是数据发送方式是十六进制字符还是ASII码,有的模组是同一条指令,通过配置实现切换;有的模组则是独立为两条指令。


16 数据接收

  模组的网络数据一般是主动输出到串口,带有特定标识的“URC帧”,接收后程序解析获取有效数据。

例:
移远某模组:+QIURC: "recv",1,20
SIMCOM某模组:+RECEIVE,1,20
美格某模组:+MIPRTCP=1,20

17 close socket

  该命令不同模组可能不一样,但同样易辨别出来。

例:
移远某模组:AT+QICLOSE=1
SIMCOM某模组:AT+NETCLOSE=1
美格某模组:AT+MIPCLOSE=1
原创文章 128 获赞 147 访问量 36万+

猜你喜欢

转载自blog.csdn.net/qq_20553613/article/details/104982950