(三)Linux 4G模块实现短信发送的两种格式(Text和PDU)

一、前言

在上一篇:(二)树莓派Linux环境串口通信编程–AT指令集的发送和接收,已经实现了串口通信编程,可发AT指令集,例如查SIM卡信号等指令,但是还是存在一个问题就是不能发送短信,这是因为涉及到编码的问题了,因为SIM卡发送短信,并不是简单的发送字符串,而是发送一个完整的Text格式或者PDU编码(包括已处理的中心号码、本SIM卡号码、数据Unicode码、号码长度、数据长度等信息)。现在我们需要了解Text格式和PDU格式的组成结构和用到的AT指令,以及后面如何用代码实现封装它。

二、需要掌握的知识

2.1 检查穿串口和SIM卡

在发送短信之前,我们需要保证几点是正常的,不然就可能造成发送短信失败:
(1)确保串口可用

AT

若返回OK则说明串口可用。

(2)确保能检测出SIM卡,串口可通信不代表能检测出SIM卡

AT+CPIN?

若返回READY,则说明能检测出SIM卡

(3)检测SIM卡是否已经注册

AT+CREG?

若返回0,1 或者返回0,3 则说明SIM卡已注册

(4)检测SIM卡信号

AT+CSQ

命令解释:检查网络信号强度
命令格式:AT+CSQ
命令返回:+CSQ: ** ,##
其中**应在 10 到 31 之间,数值越大表明信号质量越好,##为误码率,值在 0 到 99 之间。

2.2 Text格式

设置短信格式为Text格式

AT+CMGF=1 

需要发送的号码,注意是英文双引号

AT+CMGS="135xxxx4414"

在出现>号后输入英文即可发送
下面是我用Linux下的AT指令软件microcom进行指令的收发,因为我前面写的程序还没有实现发短信功能。
在这里插入图片描述
下面是目标号码收到的短信
在这里插入图片描述

可以看出,发送英文的短信所需要的处理的流程是非常简单的,这是因为没有涉及到转码。

2.3 PDU格式

(1)PDU编码规则

在这里插入图片描述
PDU编码协议简单说明

例1发送:SMSC号码是+8613800250500,对方号码是1369309203,消息内容是“Hello!”。从手机发出的PDU串可以是
08 91 683108200505F0 11 00 0D 91 683196032930F0 00 00 00 06 C8329BFDOE 01
对照规范,具体分析:分段含义说明

  • 08 短信中心号码地址信息的长度共8个八位字节(包括91)
  • 91 短信中心号码地址格式(TON/NPI)用国际格式号码(在前面加’+’)
  • 68 31 08 20 05 05 F0 SMSC地址8613800250500,补F’凑成偶数个
  • 11基本参数(TP-MTI/VFP)发送,TP-VP用相对格式
  • 00消息基准值(TP-MR)
  • OD目标地址数字个数共13个十进制数(不包括91和’F’)
  • 91目标地址格式(TON/NPI)用国际格式号码(在前面加’+’)
  • 68 31 96 03 29 30 F0目标地址(TP-DA)8613693092030,补F’凑成偶数个
  • 00协议标识(TP-PID)是普通GSM类型,点到点方式
  • 00用户信息编码方式(TP-DCS)7-bit编码
  • 00有效期(TP-VP)5分钟
  • 06用户信息长度(TP-UDL)实际长度6个字节
  • C8 32 9B FD OE01用户信息(TP-UD)“Hello!”

在这里插入图片描述

(2)短信中心号码

在上面PDU编码中使用到了短信中心号码,没听说过的人可能会一头雾水。下面解释一下:

信息中心号码是一种短信息服务器,如果填错了,短消息是无法发送成功的,各个地区都有自己的信息中心号码,具体号码可以询问当地的网络运营商。
也可以用下面AT指令获取中心号码:

AT+CSCA?

(1)介绍
信息中心号码,即短信服务中心,SMSC(Short Message Service Center),负责在基站和移动台(ME)间中继、储存或转发短消息;ME到SMSC的协议能传输来自移动台或朝向移动台的短消息,协议名遵从GMS 03.40协议。
GSM手机需要设置短信服务中心号码。
CDMA手机不需要设置短信服务中心号码。
(2)格式
中国移动,短消息中心号码以+861380开头,紧接的4位数号码所在的地区码(电话区号),比方0571(杭州),最后一般是500。对于区号小于四位的地区,地区码则在第四位补0,例如北京0100。
中国联通,短消息中心号码为+8613010开头,紧接的3位数号码是各省分公司分配的短消息中心序列号),最后一般是500。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值