在电脑上使用SIM卡接码教程


准备工作

众所周知,注册、登录一个网站,永远要填写手机号→手忙脚乱找手机收验证码,非常麻烦,那有没有什么办法能在电脑上插SIM卡收验证码?肯定有,只需要:

  1. 一张SIM卡(非 奠 电信的),因为该模块背面的卡槽是中卡大小,所以可能还需要个卡套(直接插也能用,注意方向,不好拔出来)
  2. 一个SIM模块,这里我使用SIM800C模块
  3. SSCOM,也可以使用自己喜欢的串口模块
  4. 电脑、手、聪明的大脑以及一个有信号的人类聚集地

图片上同款模块是板载CH340T USB转串口芯片的,若没安装CH340驱动需要去安装一下

我使用的是图上的模块,用CH340T USB转串口模块,大虾丁丁做的SSCOM软件因为大虾电子网已经关了,网上很难找到下载链接,这个是官方发布页:http://www.daxia.com/sscom/官方下载地址:http://www.daxia.com/sscom/sscom5.13.1.rar,若失效了下载这个SSCOM 5.13.1.7z

关于为什么不能使用奠信的SIM卡,是因为SIM800C 只支持 2G GSM,而中国网络基建情况:

运营商 2G状态
中国移动 仍有2G
中国联通 部分地区保留
中国电信 从未使用GSM

中国奠信在2G时代并没有采用GSM制式,而是采用的CDMA制式(CDMA2000/CDMA)

接码

把SIM卡插入模块,如果是小卡注意缺口朝外,然后打开SSCOM软件

端口号选模块端口号,不知道是那个可以插拔一下看看那个不见了,波特率选择9600,勾选加回车换行,然后输入AT,发送,若回复“OK”就是OK了。若没有回复OK,而是□或其他,那说明可能是没插牢、波特率错了,可以尝试把波特率依次改为9600 -> 115200 -> 57600,然后发送AT,那个回复OK就是那个。

注意,一定要在输入框里回车,或者勾选“加回车换行”选项!如果没有回车模块无法识别命令的,模块没有识别到换行符的话只会原样还回(或者忽略,取决于是否开启回显模式)

测试成功后输入AT+CPIN?查看SIM卡状态,若回应为:READY说明SIM卡已就绪

[21:02:03.079]发→◇AT+CPIN?
□
[21:02:03.127]收←◆AT+CPIN?
+CPIN: READY

OK

可选:输入AT+CSQ查看信号强度,返回值+CSQ: 信号值

输入AT+COPS?查看运营商,返回值+COPS: 0,0,"运营商"

输入AT+CREG?查看网络注册状态,返回值+CREG: 0,1。0,1是已注册本地网络,0,2是搜索中,0,5是已注册漫游网络

当确认模块就绪,SIM卡已正确识别时就可以接码了,当收到短信时模块会主动向串口推送+CMTI: "SM",1,说明成功接收短信并储存存储器(SM)里,序号1,这时就可以执行以下步骤读取短信:

  1. 输入AT+CMGF=1将模式切换为文本模式

    该命令只是让 AT 指令以文本方式操作短信,不影响短信的实际编码格式。

  2. 输入AT+CMGR=1读取短信,这里的1就是刚刚CMTI的序号

SM 表示 SIM 卡存储,如果配置为 ME 则短信会存在模块内部

如果一切顺利,返回的内容应该是:

[21:15:50.491]发→◇AT+CMGF=1
□
[21:15:50.515]收←◆
OK

[21:15:56.369]发→◇AT+CMGR=1
□
[21:15:56.446]收←◆
+CMGR: "REC READ","10692994314
[21:15:56.479]收←◆27239","","26/03/09,19:17:07+32"
[21:15:56.512]收←◆
301054D454E954D454E93011003700
[21:15:56.545]收←◆31003800360034003100204E3A4F6076
[21:15:56.577]收←◆84624B673A63627ED19A8C8BC17801FF
[21:15:56.611]收←◆0C8BF7572800355206949F51855B8C62
[21:15:56.644]收←◆1063627ED130024E3A4FDD8BC18D2653
[21:15:56.677]收←◆F75B895168FF0C8BF752FF6CC46F0F6B649A8C8BC178013002

OK

可以看到成功读取出短信了,+CMGR: "REC READ","1069299431427239","","26/03/09,19:17:07+32"这一行字符串是 SIM800C 的标准短信元数据响应,格式是+CMGR: "状态","发件人","","时间戳"

但是返回的内容是十六进制字符串,一般来说没有人可以直接阅读它,这时候就需要进行解码了,我做了个短信解码小工具,你可以直接在下方的输入框中输入进行解码,比如上面这个例子中我应该粘贴:

301054D454E954D454E9301100370031003800360034003100204E3A4F607684624B673A63627ED19A8C8BC17801FF0C8BF7572800355206949F51855B8C621063627ED130024E3A4FDD8BC18D2653F75B895168FF0C8BF752FF6CC46F0F6B649A8C8BC178013002

到输入框中,解码结果为:

【哔哩哔哩】718641 为你的手机换绑验证码,请在5分钟内完成换绑。为保证账号安全,请勿泄漏此验证码。

非常完美~

Tips: 本工具适用于 UCS2 编码短信(常见于中文短信),如果是英文短信直接阅读就行了。

短信解码工具

粘贴从串口收到的 Hex 字符串(如 301054D4...):

解码结果:

Tip:

在读取短信时可以把“加时间戳和分包显示”选项关掉,这样返回的内容就是:

+CMGR: "REC READ","1069299431427239","","26/03/09,19:17:07+32"301054D454E954D454E9301100370031003800360034003100204E3A4F607684624B673A63627ED19A8C8BC17801FF0C8BF7572800355206949F51855B8C621063627ED130024E3A4FDD8BC18D2653F75B895168FF0C8BF752FF6CC46F0F6B649A8C8BC178013002

短信内容直接一长串返回无时间戳分包显示干扰,直接复制粘贴很方便

至此,成功实现最基本的在电脑上使用SIM卡模块接码功能,进一步更方便自动转码、系统提醒请等待下篇文章更新~~

为什么短信内容是十六进制?

在上述步骤中读取短信时,你会发现返回的内容并不是普通文字,而是一长串类似:

301054D454E954D454E930110037003100380036...

的十六进制字符串。

这是因为 短信在 GSM 网络中并不是直接以文字形式传输的,而是使用一种叫做 PDU(Protocol Data Unit) 的数据结构进行编码。

短信常见的编码方式有三种:

编码方式 用途
GSM 7-bit 英文短信
UCS2 中文、日文等 Unicode 字符
8-bit 二进制数据(基本见不到)

其中:

  • GSM 7-bit:每个字符使用 7 bit,最多可以发送 160 个字符
  • UCS2:每个字符使用 2 字节(16 bit),常用于中文短信,最多 70 个字符

当短信使用 UCS2 编码 时,每个字符会变成:

2 字节 = 4 个十六进制字符

例如:

4F60 = 你
597D = 好

所以一条短信就会变成类似:

4F60597D...

的十六进制字符串。

所以在本文中使用的解码工具,其实就是把:

每4个十六进制字符 → 转换为一个Unicode字符

从而还原出真正的短信内容。

顺便提一嘴,有时候解码十六进制字符串后会发现短信内容不完整啊,咋话说到一半没了?为什么短信头部还有个乱码Ԁͺȁ?这是因为短信最多只能发 70 个中文 / 160 个英文,因为在 GSM 网络中,一条标准短信的数据大小其实是 固定的,叫做 SMS Payload,大小为:

140 Bytes

也就是 140 字节(1120 bit)。

单条短信之所以会出现最大70 个中文 or 160 个英文限制,是因为不同编码方式占用空间不同,短信常见编码有两种:

编码 每个字符占用 一条短信最多
GSM 7-bit(英文) 7 bit 160 字符
UCS2(中文) 16 bit 70 字符

而有的超长短信有不止70 个中文 or 160 个英文,这时候短信系统会自动使用 分段短信(Concatenated SMS),也就是把超长短信拆除几节并在短信头部加入一个 UDH(User Data Header)记录总段数、当前段序号、同一短信的标识,这时候在SIM800C模块里读取就会发现短信内容不完整,需要把剩下几段一并提取查看才行。

UDH头部通常表现为:

0500037A0201

之后正文才开始

0500037A02014F60597D

由于0500037A0201并不是合法的十六进制字符串,所以会显示为乱码。

至于这一串UDH头部啥意思可以对照下表:

字节 含义
05 UDH长度
00 信息元素标识 (IEI)
03 IE数据长度
7A 短信引用号
02 总段数
01 当前段序

AT指令大全

文末附上AT指令大全,感兴趣的可以研究下

简单联网测试

命令 说明 返回值
AT AT测试指令 OK
ATE ATE1设置回显,ATE0关闭回显 OK
AT+CSQ 网络信号质量查询,返回信号值 OK
AT+CGMR 查询固件版本 OK
AT+CREG? 查询网络注册状态 OK
AT+CGATT? 检查GPRS附着状态 OK

AT+CSQ 信号质量反馈

当发送 AT+CSQ 时,模组会返回:+CSQ: <rssi>,<ber>

<rssi> (Received Signal Strength Indication)

这是信号强度,范围是 0-31,以及一个特殊值 99。

  • 0 - 9: 信号极差,基本无法通信。
  • 10 - 14: 信号较弱,偶尔可能断连。
  • 15 - 20: 信号良好,可以稳定工作。
  • 21 - 31: 信号极好,连接非常稳健。
  • 99: 模组未检测到信号或初始化未完成。

AT+CSQ 为什么只有 0-31?因为GSM 为了节省数据量,没有直接返回 dBm,而是返回 一个等级值,真实映射换算公式:RSSI = -113 + 2 × value (dBm)

CSQ 信号
0 -113 dBm
10 -93 dBm
20 -73 dBm
31 -51 dBm

<ber> (Bit Error Rate)

这是误码率。范围是 0-7。

  • 0: 误码率极低,信号纯净。
  • 7: 误码率极高,数据传输可能会频繁出错。
  • 99: 未知/不可用。

TCP/IP通信

非透传模式下的客户端通信

AT指令 指令说明 返回值
AT+CGATT? 检查GPRS附着状态 OK
AT+CSTT=”CMNET” 设置APN OK
AT+CIICR 建立无线链路 OK
AT+CIFSR 获得本地IP地址 OK
AT+CIPSTART=”TCP”,”118.190.93.84”,2317 建立TCP客户端链接 OK
AT+CIPSTART=”UDP”,”118.190.93.84”,2317 建立UDP客户端链接 OK
AT+CIPSEND=<字符长度> 发送指定长度字符串 OK
AT+CIPCLOSE 关闭链路通信 OK
AT+CIPSHUT 关闭PDP上下文连接 OK

透传模式下的客户端通信

AT指令 指令说明 返回值
AT+CGATT? 检查GPRS附着状态 OK
AT+CIPMODE=1 设置为透传模式 OK
AT+CSTT=”CMNET” 设置APN OK
AT+CIICR 建立无线链路 OK
AT+CIFSR 获得本地IP地址 OK
AT+CIPSTART=”TCP”,”118.190.93.84”,2317 建立TCP客户端链接 OK
AT+CIPSTART=”UDP”,”118.190.93.84”,2317 建立UDP客户端链接 OK
AT+CIPSEND=<字符长度> 发送指定长度字符串 OK
AT+CIPCLOSE 关闭链路通信 OK
AT+CIPSHUT 关闭PDP上下文连接 OK

HTTP通信

HTTP GET

AT指令 指令说明 返回值
AT+SAPBR=3,1,”Contype”,”GPRS” 配置承载场景1 OK
AT+SAPBR=3,1,”APN”,”CMNET” 配置承载场景APN OK
AT+SAPBR=1,1 激活一个 GPRS 上下文 OK
AT+SAPBR=2,1 查询 GPRS 上下文 OK
AT+SAPBR=0,1 关闭 GPRS 上下文. OK
AT+HTTPINIT 检查HTTP连接状态 OK
AT+HTTPPARA=”CID”,1 设置HTTP会话参数 OK
AT+HTTPPARA=”URL”,”hcyhub.com” 设置HTTP会话参数 OK
AT+HTTPACTION=0 GET会话开始 OK
AT+HTTPREAD 读取HTTP服务器的数据 OK
AT+HTTPTERM 结束HTTP服务 OK

HTTP POST

AT指令 指令说明 返回值
AT+SAPBR=3,1,”Contype”,”GPRS” 配置承载场景1 OK
AT+SAPBR=3,1,”APN”,”CMNET” 配置承载场景APN OK
AT+SAPBR=1,1 激活一个 GPRS 上下文 OK
AT+SAPBR=2,1 查询 GPRS 上下文 OK
AT+SAPBR=0,1 关闭 GPRS 上下文. OK
AT+HTTPINIT 检查HTTP连接状态 OK
AT+HTTPPARA=”CID”,1 设置HTTP会话参数 OK
AT+HTTPPARA=”URL”,”hcyhub.com” 设置HTTP会话参数 OK
AT+HTTPDATA=100,10000 上传100字节数据,等待10000毫秒 OK
AT+HTTPACTION=1 POST会话开始 OK
AT+HTTPTERM 结束HTTP服务 OK

邮件收发

由于现代邮件服务器普遍要求 TLS 加密,该功能在实操的话可能无法直接使用 真男人就给我关掉加密裸奔。

发送邮件

AT指令 指令说明 返回值
AT+SAPBR=3,1,”Contype”,”GPRS” 配置承载场景1 OK
AT+SAPBR=3,1,”APN”,”CMNET” 配置承载场景APN OK
AT+SAPBR=1,1 激活一个 GPRS 上下文 OK
AT+SAPBR=2,1 查询 GPRS 上下文 OK
AT+SAPBR=0,1 关闭 GPRS 上下文. OK
AT+EMAILCID=1 配置电子邮件参数 OK
AT+EMAILTO=30 配置 SMTP 会话超时时间(秒) OK
AT+SMTPSRV=”smtp.example.com”,25 设置SMTP服务器地址和端口 OK
AT+SMTPAUTH=1,”admin@example.com“,”123456” 设置用户名和密码 OK
AT+SMTPFROM=”admin@example.com“,”admin” 设置发送方地址和名字 OK
AT+SMTPRCPT=0,0,”admin@example.com“,”admin” 设置接受方 OK
AT+SMTPRCPT=1,0,”admin@example.com“,”admin” 设置抄送方 OK
AT+SMTPSUB=”Test” 设置邮件主题 OK
AT+SMTPBODY=19 设置邮件正文 OK
This is a new Email 邮件内容 OK
AT+SMTPSEND 发送邮件 OK

收取邮件

AT指令 指令说明 返回值
AT+SAPBR=3,1,”Contype”,”GPRS” 配置承载场景1 OK
AT+SAPBR=3,1,”APN”,”CMNET” 配置承载场景APN OK
AT+SAPBR=1,1 激活一个 GPRS 上下文 OK
AT+SAPBR=2,1 查询 GPRS 上下文 OK
AT+SAPBR=0,1 关闭 GPRS 上下文. OK
AT+EMAILCID=1 配置电子邮件参数 OK
AT+EMAILTO=30 配置 SMTP 会话超时时间(秒) OK
AT+POP3SRV=”pop.example.com”,”admin@example.com“,”123456”,110 设置 POP3 服务器地址和账户信息 OK
AT+POP3IN 登录POP3 服务器 OK
AT+POP3NUM 得到邮件总数和总的大小 OK
AT+POP3LIST=1 得到第一封邮件的大小 OK
AT+POP3CMD=4,1 读取第一封邮件 OK
AT+POP3READ=1460 读取该邮件内容 OK

短信收发

AT指令 指令说明 返回值
AT+CMGF=1 设置短信模式为TEXT OK
AT+CMGS=”PN” 设置收信人 >
AT+CSCS=”UCS2” 设置信息文本为UCS2类型 OK
AT+CSMP=17,167,2,8 设置文本模式参数 OK
AT+CMGL=”ALL” 查看所有短信 所有短信
AT+CMGR=1 查看槽位为1的短信 槽位1短信内容
AT+CMGD=1 删除槽位为1的短信内容 OK
AT+CNMI=2,2,0,0,0 直接把收到的短信内容推到串口 OK

关于AT+CSMP指令完整语法是AT+CSMP=[fo],[vp],[pid],[dcs],具体参考下表

参数 含义 解释与常用值
fo First Octet 第一字节。决定短信类型和发送选项。常用值 17,表示这是一个发送给短信中心(SMSC)的普通短信。
vp Validity Period 有效期。决定短信在短信中心存储多久。0-167 表示 5 分钟到 24 小时不等。167 通常代表 24 小时(最大有效期)。
pid Protocol ID 协议标识。通常设为 0,即默认协议。
dcs Data Coding Scheme 数据编码方案。这是最重要的!0 代表 GSM 7-bit 编码(纯英文);8 代表 UCS2 编码

蓝牙调试

没错,SIM800C有蓝牙功能,具体指令:

AT指令 指令说明 返回值
AT+BTPOWER=1 打开蓝牙电源 OK
AT+BTHOST? 查询蓝牙名称和地址 返回蓝牙名称和MAC地址
AT+BTSCAN=1,10 搜索蓝牙附近的设备 返回搜索到的蓝牙设备信息
AT+BTPAIR=1,1 数字确认方式响应配对 OK
AT+BTACPT=1 接受客户端的连接请求 OK
AT+BTSPPSEND 发送数据 返回>可以开始输入数据,发送16进制1A结束发送
AT+BTPOWER=0 断开蓝牙电源 OK


文章作者: Ethaniel
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Ethaniel !
赏
  目录