本文以一個實例來解說AT指令發送PDU短信的全過程,假如我要發送下面的短信:
接收號碼:+8613602433649
短信內容:工作愉快!
杭州短信中心號碼:
聯通:+8613010360500
移動:+8613800571500
一、短信中心號碼處理:用字符串 addr 表示
1、將短信息中心號碼去掉+號,看看長度是否爲偶數,如果不是,最後添加F
即 addr = "+8613800200500"
=> addr = "8613800200500F"
2、將奇數位和偶數位交換。
=> addr = "683108020005F0"
3、將短信息中心號碼前面加上字符91,91是國際化的意思
=> addr = "91683108020005F0"
4、算出 addr 長度,結果除2,格式化成2位的16進制字符串,16 / 2 = 8 => "08"
=> addr = "0891683108020005F0"
二、手機號碼處理:用字符串 phone
1、將手機號碼去掉+號,看看長度是否爲偶數,如果不是,最後添加F
即 phone = "+8613602433649"
=> phone = "8613602433649F"
2、將手機號碼奇數位和偶數位交換。
=> phone = "683106423346F9"
三、短信息部分處理:用字符串 msg 表示
1、轉字符串轉換爲Unicode代碼,例如“工作愉快!”的unicode代碼爲 5DE54F5C61095FEBFF01
2、將 msg 長度除2,保留兩位16進制數,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
=> msg = "0A5DE54F5C61095FEBFF01"
四、組合
1、手機號碼前加上字符串 11000D91(1100:固定,0D:手機號碼的長度,不算+號,十六進制表示,91:發送到手機爲91,發送到小靈通爲81),
即 phone = "11000D91" + phone
=> 11000D91683106423346F9
2、手機號碼後加上 000800 和剛纔的短信息內容,000800也寫死就可以了
即 phone = phone + "000800" + msg
即 11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
=> phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01
3、phone 長度除以2,格式化成2位的十進制數
即 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25
五、所以要發送的內容爲
//PDU格式發送
AT+CMGF=0 <回車>//格式選擇,PDU
OK
AT+CMGS=25<回車> //信息長度
> addr+phone <Ctrl+Z發送>//發送完PDU編碼之後,在不回車的情況下以Hex的格式發送0x1A
//文本格式發送
AT+CMGF=1 <回車>//格式選擇,文本
OK
AT+CMGS=+86139xxxxxxxx<回車> //輸入手機號
>ABCD1234(短信信息,回車)
hex格式下發送0x1A
注意點:格式選擇和信息發出後的換行操作
六、PDU格式在線轉換鏈接:
http://www.multisilicon.com/blog/a22201774~/pdu.htm