AT指令對wavecom串口GSM工業手機發送短信(英文和PDU短信)

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

相關文章
相關標籤/搜索