在做4G模块项目的时候,首先要完成串口通信编程的学习,这里就不赘述了,然后就是AT指令的学习,在本文中就记载一下一些常用的AT指令。

一、busybox

在嵌入式平台下,集成有minicom软件,可以实现串口调试功能,但是有的不会集成minicom软件。busybox的文件系统下,有一个更加简单的串口工具microcom。

1、下载busybox
sudo apt-get install busybox

在这里插入图片描述

2、查看busybus
busybos

在这里插入图片描述
可以看见,其中已经包含了microcom工具。

3、查看microcom用法:

在这里插入图片描述
说明:
-t 单位毫秒,无操作自动退出时间。
-s 单位bps,串口波特率。
另外两个参数一般不会用到。

二、检测4G模块

1、检测4G模块是否被系统识别
lsUSB

在这里插入图片描述
说明:
这里使用的是 EC20模块,这 是一款支持 PCI Express Mini Card 标准接口的 LTE 模块,EC20 模块封装成标准的 PCIe 接口,实际走的是 USB 信号,并虚拟出多个 ttyUSB 设备节点。
硬件方面连接 好EC20 模块,执行 lsusb 命令,如果出现如图内容,则表示模块已经成功被 Linux 系统识别到。其中,0x2C7C 和 0x0125 分别是 Quectel EC25/EC20 R2.0 的 VID 和 PID 编号。

2、检测USB模块是否载入系统
lsmod | grep usb

在这里插入图片描述
说明:
lsmod:是list modules的缩写,即 列出所有模块,所以该命令的作用就是显示已载入系统的模块。

3、列出USB设备
ls /dev |grep ttyUSB 

在这里插入图片描述

三、开始AT指令集测试

1、先做准备测试
  • 进入测试,并查看AT是否可用正常使用: AT
busybox  microcom -s 115200 /dev/ttyUSB5

在这里插入图片描述

  • 查看SIM卡是否到位,返回ready则表示正常: AT+CPIN?
    在这里插入图片描述

  • 测试信号: AT+CSQ
    在这里插入图片描述

  • 查看运营商: AT+COPS?
    在这里插入图片描述
    说明:该命令中可修改运营商和自动/手动连接等。

  • 查看所有可用运营商:AT+COPS=?
    在这里插入图片描述
    说明:每一个()中的第一个数字就是stat,它会直接告诉我们哪些运营商可用:
    0 未知
    1 可用
    2 当前
    3 禁用

  • 获取模块标识: AT+CGMM

在这里插入图片描述

  • 获取模块厂商标识: AT+CGMI
    在这里插入图片描述
  • 网络注册。获得手机的注册状态: AT+CREG?
    在这里插入图片描述
    说明:
    +GREG:0,0,表示未注册,终端在搜寻新的运营商;
    +GREG:0,1表示注册本地网(正常);
    +GREG:0,2表示未注册,终端正在搜寻基站;
    +GREG:0,3表示SIM卡注册被拒绝;
    +GREG:0,4未知错误;
    +GREG:0,5表示注册漫游网络(正常)

注意(一些参数说明以及问题的解决办法)
在我上面手动改变了运营商之后,我发现出现了问题,就是我无法再进行拨打电话的操作了,查找一番发现是网络注册被撤销了。
在这里插入图片描述
此时我费了一番功夫,终于找到了解决办法:
就是输入 AT+CREG=1 设置允许网络注册主动提供结果代码,然后输入AT+COPS=0,将运营商转成自动模式,然后就发现可以继续进行拨号操作了。
在这里插入图片描述
由此我找出了这两个命令的各个参数的含义,记录在下:
(1)AT+CREG 网络注册和漫游
指令:AT+CREG=<mode>
响应:+CREG:<mode>,<stat> [,<lac>,<ci>]
在这里插入图片描述
参数说明:
<mode>

0: 禁止网络注册主动提供结果代码(默认设置)
1: 允许网络注册主动提供结果代码: +CREG:<stat>
2: 启用网络注册和位置信息非请求结果码: +CREG:<stat>[,<lac>,<ci>]

<stat>
0:未注册,终端当前并未在搜寻新的运营商
1:已注册本地网络
2:未注册,终端正在搜寻基站
4:未知代码
5:已注册,处于漫游状态

<lac> 位置区编号

<ci> 小区ID

注意:当设置AT+CREG成功时,调制解调器回复OK之后,会将网络注册状态通过响应返回。当网络注册状态发生改变时,调制解调器将状态通过响应反映上来。LAC及CI也可以从+CCED命令查询出来。

(2)AT+COPS( 强制选择和注册GSM网络运营 )
指令:AT+COPS=<mode>[,<format>[,<oper>]]
响应:OK
在这里插入图片描述
参数说明:
<mode>  
0  自动模式  被忽略
1  手动选择
2  从网络中手动注销
3  选择尽有有格式
4  手动或自动选择,如果手动失败,则自动使能

<format> 
0  支持长字节格式,能升到16字节长
1  短字节格式
2  数字格式

<oper>    运营商
但是这个操作只默认在有服务的情况下才可以使用。

2、拨打电话
  • 拨打电话: ATD电话号码; (电话号码后面一定要加分号)
    在这里插入图片描述
  • 来电显示: AT+CLCC(有电话打过来串口会打印RING提示。)
    在这里插入图片描述
  • 接电话: ATA
    在这里插入图片描述
  • 挂电话: ATH
    在这里插入图片描述
3、发短信:
  • 查看目前的短信编码模式:AT+CMGF?
    在这里插入图片描述
  • 切换编码模式:
    AT+CMGF=0 //PDU模式
    AT+CMGF=1 //TEXT模式
    在这里插入图片描述
(1)发送TEXT格式短信:
  • 发送短信
AT+CMGS=”收信号码”
… (此处为发送内容)
键盘按键 ctrl+z(0x1A)结束

在这里插入图片描述

  • 读取短信: AT+CMGR=index(index为读第几条短信)
    在这里插入图片描述
  • 设置存储区域为SM: AT+CPMS=”SM”
    在这里插入图片描述
(2)发送pdu格式短信:
  • 获取短信中心号码:AT+CSCA?
    在这里插入图片描述
    我这里的短信中心号码是13334262200

  • 格式化短信中心号码
    步骤:
    (1)要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。
    +8613334262200 ——> 8613334262200F

    (2)将奇数位和偶数位交换位置。
    8613334262200F ——> 683133242602F0

    (3)在前面加上“91”,是国际化的意思。
    683133242602F0 ——> 91683133242602F0

    (4)最后算一算它有多长了,把长度除于2,再把结果转换为2位的16进制数,加在最前面。91683133242602F0 长16, 16/2=8, 8的16进制“08” (一定要注意是2位)
    91683133242602F0 ——> 0891683133242602F0

    短信中心号码就处理完了,处理完的短信中心号码:0891683133242602F0

  • 格式化收信号码
    这里为了安全保密,我就随便举了一个电话的例子哟!不是用的本人的号码。
    (1) 要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。
    +8618934935552 ——> 8618934935552F
    (2) 将奇数位和偶数位交换位置。
    8618934935552F ——> 688139945355F2

  • 格式化发送内容
    (1) 把字符串转换为Unicode格式。
    我找了两种方式:
    一种是直接用转码工具,这个小工具做字符串和unicode之间的转码还是非常方便的:字符串和unicode在线转换工具
    Hello ——> 00480065006C006C006F
    还有一种是可以用函数来实现,就需要自己写一下转码函数啦!
    (2) 把串Unicode码的长度除于2,再把结果转换为2位的16进制数,加在最前面。 00480065006C006C006F 长 20; 20/2=10 10的16进制“0A”
    0A00480065006C006C006F

  • 总结一下所有的数据
    格式化后的短信中心:0891683133242602F0
    格式化后的收信号码: 688139945355F2
    格式化后的发送内容:0A00480065006C006C006F

  • 组合处理
    (1)算一下收信号码的长度,不包括“+”号。这个收信号码指的是+8618934935552。
    +8618934935552 ——> 8618934935552 长度为“OD”(2位16进制数表示)
    (2)在长度前后分别加“1100”。
    OD ——> 1100OD
    (3) 如果收信号码是手机的话就在后面追加“91”,如果是小灵通的话就要追加“81”。 +8618934935552是手机号码所以加“91”
    11000D ——> 11000D91
    (4)11000D91 + 格式化后的收信号码 + “000800” + 格式化后的发送内容
    11000D91688139945355F20008000A00480065006C006C006F

  • 记录一下上面字符串的长度,除于2。长度为50 ,50/2 = 25。
    总结一下相关信息
    格式化后的短信中心:0891683133242602F0
    实际的发送内容:11000D91688139945355F20008000A00480065006C006C006F
    发送内容的长度:25

  • 通过AT命令发送PDU短信
    将其设为PDU模式: AT+CMGF=0 //PDU模式
    在这里插入图片描述

  • 开始发送短信:

AT+CMGS=25 
    >0891683133242602F011000D91688139945355F20008000A00480065006C006C006F
<Ctrl+Z> (看到它返回“>” 在后面输入格式化的短信中心+实际的发送内容最后按Ctrl+Z发送)

在这里插入图片描述
可以看到我的手机上收到了 内容为 “Hello” 的短信:
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐