注意:在有些时候输入的AT指令是不显示的,需要用‘ate1’来显示命令。
AT指令收发短信主要有两种模式:Text模式和PDU(Protocol data Unit,协议数据单元)模式。使用Text模式收发短信代码非常简单,很容易实现,最大的缺点就是不支持中文短信。但是PDU模式不仅能发英文短信,还可以发送中文短信。PDU收发短信一共有3种编码可以用:7-bit、8-bit和UCS2编码。7-bit编码用于普通的ASCII码,即英文短信,最大可发送160字符;8-bit编码用于发送数据消息;UCS2编码用于发送Unicode字符,可发送中文字符,最多可发送70字符。下面是常用命令:
设置短信格式为Text模式: AT+CMGF=1 OK
设置短信格式为PDU模式: AT+CMGF=0 OK
发送短消息 命令格式:AT+CMGS=“xxxxxxxxxxxx”,里面为对方的电话号码。
设置短信存储载体 命令格式:AT+CPMS
读取短信 命令格式:AT+CMGR
删除短信 命令格式:AT+CMGD
获取短信中心号码 命令格式:AT+CSCA?
英文短信相比中文的要简单很多,因为英文直接就可以转ASCII码发送,但是中文就要转换一下才可以。
首先,需要利用AT+CMGF=1 ,将其设置为Text模式,然后,利用AT+CMGS=“xxxxxxxxxxxx”命令指定对方号码,然后就可以发消息了。 发:AT (检测Module与串口是否连通,能否接收AT命令) 收:OK 发:AT+CMGF=1(设为Text模式) 收:OK 发:AT+CMGS=“+86xxxxxxxxxxxx”(指定号码,+86可以选择加) 收:>(收到这个箭头后就可以发送消息了,但是要发送的信息输入完成后需要加ctrl+z或十六进制0x1A结束) 收:+CMGS: 54 OK (发送成功)
在使用AT指令发送中文指令的时候,首先要设置为PDU模式,然后这个会有一个中心号码。发送之前要对接收号码、短信内容、短信中心号码进行处理。假如发送的内容是: 接收号码:+8618585761900 短信内容:工作愉快! 短信中心号码:+316540942000,这里中心号码可以用上面的命令获取,也可以百度。
接收号码处理:用字符串pho表示
将接收号码去掉+号,看看长度是否为偶数,如果不是,最后添加F,即pho= “+8618585761900” =>pho = “8618585761900F”将奇数位和偶数位交换。 =>pho=“688185751609F0”短信中心号码处理:用字符串atr
将短信中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F atr="+316540942000" => atr=“3165409442000”
将奇数位和偶数位交换。 atr=“13560449240200”
将短信息中心号码前面加上字符91,91是国际化的意思 atr=“9113560449240200”
算出 atr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => “08” atr=“089113560449240200”
短信息部分处理:用字符串 msg 表示
转字符串转换为Unicode代码,例如“工作愉快!”的unicode代码为 5DE54F5C61095FEBFF01,(转换在linux里可用iconv函数实现,这里不是很懂,下来再研究一下iconv函数)
将 msg 长度除2,保留两位16进制数,即 5DE54F5C61095FEBFF01 = 20 / 2 => “0A”,再加上 msg => msg = “0A5DE54F5C61095FEBFF01”
组合:
手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81) 即 pho = “11000D91” + pho => 11000D91688185751609F0
手机号码后加上 000800 和刚才的短信息内容,000800也写死就可以了 即 pho = pho + “000800” + msg
即 11000D91688185751609F0 + 000800 + 0A5DE54F5C61095FEBFF01 => pho = 11000D91688185751609F00008000A5DE54F5C61095FEBFF01
phone 长度除以2,格式化成2位的十进制数 即 11000D91683109423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25
发送: 发:AT 收:OK 发:AT+CMGF=0 收:OK 发:AT+CMGS=25 收:> 发:atr+pho→ //→为发送符(ctrl+z,十六进制0x1A) 08911356044924020011000D91688185751609F00008000A5DE54F5C61095FEBFF01 收:+CMGS: 54 OK