1、英文短信linux
發:AT函數
收:OKspa
發:AT+CMGF=1調試
收:OKcode
發:AT+CMGS=13602433649unicode
收:>字符串
發:data→ //test 爲發送內容,→爲發送符(ctrl+z,十六進制0x1A)test
收:+CMGS: 54OK英文
2、中文PDU短信co
本文以一個實例來解說AT指令發送PDU短信的全過程,假如我要發送下面的短信:
接收號碼:+8613602433649
短信內容:工做愉快!
短信中心號碼:+8613800200500
1、短信中心號碼處理:用字符串 addr 表示
a、將短信息中心號碼去掉+號,看看長度是否爲偶數,若是不是,最後添加F
即 addr ="+8613800200500"
=>addr = "8613800200500F"
b、將奇數位和偶數位交換。
=>addr = "683108200005F0"
c、將短信息中心號碼前面加上字符91,91是國際化的意思
=>addr = "91683108200005F0"
d、算出 addr 長度,結果除2,格式化成2位的16進制字符串,16 / 2 =8 => "08"
=>addr = "0891683108200005F0"
2、手機號碼處理:用字符串 phone
a、將手機號碼去掉+號,看看長度是否爲偶數,若是不是,最後添加F
即 phone ="+8613602433649"
=>phone = "8613602433649F"
b、將手機號碼奇數位和偶數位交換。
=>phone = "683106423346F9"
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
=>11000D91683106423346F9
b、手機號碼後加上 000800 和剛纔的短信息內容,000800也寫死就能夠了
即 phone =phone + "000800" + msg
即11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
=>phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01
c、phone 長度除以2,格式化成2位的十進制數
即11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25
5、因此要發送的內容爲
發:AT
收:OK
發:AT+CMGF=0
收:OK
發:AT+CMGS=25
收:>
發:addr+phone→ //→爲發送符(ctrl+z,十六進制0x1A)
收:+CMGS: 54OK
6、若是返回不是ERROR,恭喜你,發送成功了
3、幾個要注意的問題
1、發送的指令用0x0D結尾,注意不是一般認爲的0x0D,0x0A。特別是在發送PDU短信的AT+CMGS=25命令時,必定只能以0x0D結尾。
2、在發送短信內容時,以0x1A(表明ctrl+Z的虛擬鍵值)結尾。
3、用AT+CMEE=1命令,能夠在短信貓返回ERROR時帶上緣由,這樣方便調試。
轉自bbs.sendsms.cn