GSM模組支援兩種方式來發送和接收SMS簡訊息,文字模式和PDU(Protocol Description Unit)模式,文字模式只能發送普通的Ascill字元,要發送圖片,鈴聲,其它編碼的字元(如中文)就必須採用PDU模式。
PDU模式中,可以採用三種編碼方式來編碼要發送的 內容
,分別是7bit編碼,8bit編碼,16bit編碼,7bit編碼用於發送普通的Ascill字元,8bit編碼通常用於發送資料資訊,片和鈴聲,
而16bit編碼用於發送Unicode字元。三種編碼可以發送的最大字元分別是160,140,70。發送中文簡訊要採用PDU模式的Unicode編碼方式,具體步驟描述如下:
(1)GB2321編碼到Unicode編碼的轉換。
● 作業系統提供函數(有些系統不提供,如deltaos)。
● 手動查表。
(2)Unicode編碼到16bit編碼的轉換。
● 得到的Unicode編碼後,還需要轉換成PDU的16bit編碼才可以正確的發送。
●這個轉換過程中Unicode編碼最開始的0xffff標誌要去掉,在0xffff之後的內容才是真正的Unicode字元。
●
Unicode是雙位元組,根據系統如果是小端位元組序(little-endian),也就是說,儲存的時候,先存低位再存高位,例如:“中”的
Unicode編碼是0x4E2D,儲存的時候是2D4E,在轉換到16bit編碼的時候要轉換順序,如果是大端位元組序(big-endian)如本系
統,就不需要轉換了。
● 正確 計算 16bit編碼的訊息體長度,PDU規範中,包括訊息體本身。
● 正確設定TYPE,TP-MR,TP-PID,TP-VP,在下文PDU格式中,依次設定為:11,00,00,08,01(以上都為16進位數)。
(3)形成標準的發送包。 簡訊發送過程 分析
處理器通過向串口發送接收AT命令與GSM模組形成通訊迴路,通過AT命令實現對GSM模組的基本操作,用於傳送簡訊的AT命令如表1所示。
傳送簡訊可用文字模式和協議資料單元模式(PDU,protocol data
unit)。大多手機不支援文字模式,只支援PDU模式。PDU模式是把簡訊本文經十六進位編碼後被傳送,其編碼總體上分為三個部分:服務中心號、接收方
手機號、簡訊內容,如“你好”簡訊PDU編碼是這樣的(其中xyz是手機號具體數字):
0011000B8131258698yxFz000801044F60597D,其意義如表2所示。
表1 傳送簡訊使用的AT命令
| AT命令 |
功能 |
例子 |
| AT+CMGF |
設定簡訊的格式,0=PDU模式(預設),1=文字模式 |
AT+CMGF=0 |
| AT+CSCA |
擷取服務中心的號碼 |
AT+CSCA? |
| AT+CMGS |
發送AT+CMGS= YYY ;其中 YYY 為TPDU的十進位長度 |
AT+CMGS=19 |
| 接收到“>” |
響應後傳送簡訊內容 |
|
表2 發送資料分析
| 接收號部分 |
簡訊內容部分 |
| 00 11 00 0B 8131208698yxFz |
000801 04 4F605970 |
| 00:SCA以00寫入,應用預設的服務中心地址,該服務中心地址用AT+CSCA指令寫入11:PDU類型00:TP-MR表示MR 訊息 參考 0B:接收號字元數81:表示是國內代碼31258698yxFz:接收號 編碼時間長度度為奇數末尾追加“F”每兩個位元組進行位置交換,即13526889xyz |
00:TP-PID協議標示 08:TP-DCS資料編碼方式 01:TP-VP有效期間 04:UDL使用者資料長度,用十六製表示4F60597D:簡訊內容的UNICODE編碼 |
如果發送成功,串口返回以下結果:
+CMGS: X 這裡的X是個數字