AT指令發送短信


一、英文短信
發:AT
收:OK
發:AT+CMGF=1 
收:OK
發:AT+CMGS=13911139197

收:>
發:data→ //test 為發送內容,→為發送符(ctrl+z,十六進制0x1A)
收:+CMGS: 54 OK

二、中文PDU短信
本文以一個實例來解說AT指令發送PDU短信的全過程,假如我要發送下面的短信:
接收號碼:+8613902433649
短信內容:工作愉快!
短信中心號碼:+8613800100500

1、短信中心號碼處理:用字符串 addr 表示
a、將短信息中心號碼去掉+號,看看長度是否為偶數,如果不是,最后添加F
即 addr = "+8613800100500"
=> addr = "8613800100500F"
b、將奇數位和偶數位交換。
=> addr = "683108100005F0"
c、將短信息中心號碼前面加上字符91,91是國際化的意思
=> addr = "91683108100005F0"
d、算出 addr 長度,結果除2,格式化成2位的16進制字符串,16 / 2 = 8 => "08"
=> addr = "0891683108100005F0"

2、手機號碼處理:用字符串 phone
a、將手機號碼去掉+號,看看長度是否為偶數,如果不是,最后添加F
即 phone = "+8613902433649"
=> phone = "8613902433649F"
b、將手機號碼奇數位和偶數位交換。
=> phone = "683109423346F9"

3、短信息部分處理:用字符串 msg 表示
a、轉字符串轉換為Unicode代碼,例如“工作愉快!”的unicode代碼為 5DE54F5C61095FEBFF01,(轉換在linux里可用iconv函數實現。)
b、將 msg 長度除2,保留兩位16進制數,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
=> msg = "0A5DE54F5C61095FEBFF01"

4、組合
a、手機號碼前加上字符串 11000D91(1100:固定,0D:手機號碼的長度,不算+號,十六進制表示,91:發送到手機為91,發送到小靈通為81)
即 phone = "11000D91" + phone
=> 11000D91683109423346F9
b、手機號碼后加上 000800 和剛才的短信息內容,000800也寫死就可以了
即 phone = phone + "000800" + msg
即 11000D91683109423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
=> phone = 11000D91683109423346F90008000A5DE54F5C61095FEBFF01
c、phone 長度除以2,格式化成2位的十進制數
即 11000D91683109423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25

5、所以要發送的內容為
發:AT
收:OK
發:AT+CMGF=0 
收:OK
發:AT+CMGS=25
收:>
發:addr+phone→ //→為發送符(ctrl+z,十六進制0x1A)
收:+CMGS: 54 OK

6、如果返回不是ERROR,恭喜你,發送成功了

三、幾個要注意的問題
1、發送的指令用0x0D結尾,注意不是通常認為的0x0D,0x0A。

特別是在發送PDU短信的AT+CMGS=25命令時,

一定只能以0x0D結尾。
2、在發送短信內容時,以0x1A(代表ctrl+Z的虛擬鍵值)結尾。
3、用AT+CMEE=1命令,可以在短信貓返回ERROR時帶上原因,這樣方便調試。

 轉於:https://blog.csdn.net/u013087068/article/details/45147019

https://blog.csdn.net/u012158332/article/details/74355742

https://blog.csdn.net/woshishui918/article/details/79051473


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM