//Logo Image
作者:甘凱文(2005-04-18);推薦:吳昌暉,徐業良(2005-04-19)

PIC_SERVER教材(13)-如何以PIC_SERVER收發手機簡訊

簡訊服務(Short Message Service, SMS)GSM(Global System for Mobile Communication)通訊協定中,透過簡訊服務中心(Short Message Service Center, SM-SC)進行資訊存儲和轉發,所提供的一種廣為使用的基本服務,PIC_SERVER如能連結GSM網路傳送簡訊,可以開發出多種相關應用。本文首先介紹SMS傳輸流程,接著電腦終端操作介紹GSM的軟硬體介面的通訊方式,最後再以PIC_SERVER做實際控制手機傳送與接收簡訊。

1.     簡訊傳輸流程

簡訊傳輸流程如圖1來源手機(Original Mobile Station, MS)欲傳送簡訊給一終端手機(Terminating MS),簡訊先被送到Inter-Working Mobile Switch Center(IWMSC),傳至SM-SC儲存並檢查簡訊的目的地,SM-SC會與一個特殊的Gateway MSC(GMSC)相連,稱為SMS GMSC,而不會直接接到一般的MSC上,GMSC要找出Terminating MS所在的MSC,並將此簡訊轉送到該MSC,要求Base Station Controller(BSC)下所有Base Station Transceiver(BTS)將簡訊以點對點或是以廣播的方式傳送。

在此流程中所有的簡訊都一定要經過SM-SCStore-and-Forward的動作,所以SM-SC必須要是一台功能強大的電腦,能夠同時處理多個SMSSM-SC通常也會提供TCP/IP的介面,如此就可以由Internet送簡訊。如圖1右方所示,使用者向簡訊傳送服業者申請帳號,利用個人電腦編輯簡訊內容,傳送至簡訊傳送服務業者,業者再傳送至SM-SC,再以相同的方式傳至欲傳送的終端手機。

1. 簡訊傳輸流程

SMS的傳送容量較低,一次傳送容量以純數字或英文字母可寫入160個字元,若使用中文字最多只能寫入約70個字。接到簡訊後,MS必須有特殊的軟體才能解碼儲存簡訊,存在SIM卡或記憶體中。

2.     使用電腦終端機控制GSM模組發送簡訊

市場上提供的標準GSM模組都支援GSM 07.05所定義Attention(AT)命令集的指令,AT命令的是在HayesHayes是最早製造數據機的公司)相容性的數據機當中的指令集,因為這些指令都是以AT開頭的,所以稱為AT命令。AT命令是一般利用數據機作為通訊傳輸時,必須要執行的指令,而個人電腦透過RS232便可直接向GSM模組發AT命令,只需要一個GSM模組與一條電腦連結的訊號傳輸線,就可以使用電腦終端機控制GSM模組發送簡訊。表1為一些用於傳送接收SMSAT命令。

1. 用於傳送接收SMSAT命令

AT命令

執行用法

說明

AT(Attention)

AT

確認通訊是否連結

ATZ

ATZ

重置初始模式,關閉所有連結

ATE(Echo)

ATE<mode>

<mode>=0, 停用回應

<mode>=1, 使用回應

AT+CMGF(Message Format)

AT+CMGF=<mode>

<mode>=0, PDU mode

<mode>=1, Text mode

AT+CMGS(Send Message)

AT+CMGS=<length>

AT+CMGS=<”Phone number”>

<length>傳送的字串長度用於PDU mode

<“Phone number”>收訊者電話號碼,用於Text mode

AT+CPMS(PerferredMessage Storage)

AT+CPMS=<mem1>,<mem2>,<mem3>

<mem1>=”ME””SM”CMGR之讀取位置;

<mem2>”ME””SM”為編輯簡訊記憶位置;

<mem3>”ME”接受簡訊之儲存位置

AT+CMGR(Read Message)

AT+CMGS=<index>

<index><mem1>內的第某條簡訊

AT+CMGD(Delete Message)

AT+CMGD=<index>

<index><mem1>內的第某條簡訊

根據GSM 07.05的定義SMS簡訊的發送和接收模式共有三種Block模式、AT命令的Text模式、和AT命令的Protocol Data Unit(PDU)模式。使用Block模式需要GSM模組生産廠家提供驅動支援,PDU模式則使用於中英文簡訊傳送,只傳送英文簡訊可使用Text模式,簡訊發送和接收比較簡單。以下分別介紹使用電腦終端機控制GSM手機模組以Text模式和PDU模式發送簡訊。

2.1  使用Text模式發送簡訊

使用Text模式發送接收簡訊的步驟可分爲初始化GSM模組、發送簡訊資訊、和接收簡訊資訊。首先開啟電腦終端機並設定其通訊阜與傳輸率為9600bps(視各GSM模組硬體能接受的速度而定,一般為9600bsp),在其他參數設定如圖2所示。

2. 終端機通訊阜參數設定

接著在終端機視窗下使AT命令來發送簡訊,如圖3所示,第1行的“AT”用來測試連接是否建立,如連接上則GSM模組會回應“OK”,第3行程式“ATZ”表示重置GSM模組的模式於出廠定義,第5行程式“AT+CMGF=1”用以設定簡訊發送模式,其中1表示使用Text模式,如設為0則為PDU模式。第7和第8行程式為發送一條簡訊到簡訊服務中心,其資訊包含了被接收者的電話號碼與發送的簡訊內容,AT命令的格式分別爲AT+CMGS=“0920xxxxxx” <cr>THIS IS SMS TEST <^Z>,其中被接收者的電話號碼爲0920xxxxxx,簡訊內容爲“THIS IS SMS TEST”,確認控制字元爲Ctrl-Z,如發送成功系統服務中心則會發送“OK”的回應。

3. Text模式發送簡訊

2.2  使用PDU模式發送簡訊

若要發送和接收中文或中英文混合的簡訊必須使用PDU模式,設定如同Text模式,只是在發送模式要設為PDU模式,其AT命令為“AT+CMGF=0”。使用手機以PDU模式傳送SMS的編碼方式,必需先將傳送資訊轉換為一種特定內碼,如圖4所示,其中AT+CMGS=2727表示PDU的內容包含了27 bytes的資料,下一行則為簡訊內容之內碼,PDU模式簡訊內容內碼說明如表1

4. PDU模式發送簡訊

2. PDU模式簡訊內容內碼說明

Byte

資料

資料含意

定義

0

00

使用手機的內部SM-SC資訊

 

1

11

固定為11

 

2

00

TP參考訊息

3

0A

“A1”+“9002665735”=10 bytes

型態與受訊者電話長度

4

A1

國內標準模式

0x81:未定義;0x91:國際標準;    0xA1:國內標準;

5~9

9002665735

受訊者電話 0920667553

 

10

00

 

協定認證碼

11

00

 

資料碼方式

12

FF

忽略

確實之週期

13

10

訊息為16進位

 

14~27

5464720A4A4E41D3E614442D4EA9

傳送的編碼內容“THIS SMS TEST”

訊息碼

PDU模式的純英文簡訊內容編碼使用GSM字元集的7位元編碼方式。表3為傳送”Hello”編碼轉換的例子,首先將各個字元轉換爲7位元的標準二進位ASCII碼,然後要將後面字元的低位元逐位元調整到前面,補齊前面的差別。例如“H”的二進位ASCII碼爲1001000“e”的二進位ASCII碼爲1100101H的二進位編碼不足八位元,那麽就將後面字元e的最後一位元補足到H的前面,就成了11001000(0xC8)e剩下六位110010,前面再補兩個0,變成00110010(0x32),於是“He”就變成了兩個八進位數C832。表3例子經過移位的轉換後,“Hello”的編碼變為C8329BFD06

3. Hello例子的編碼轉換

文字元

H

e

l

l

o

7bits hex

0x48

0x65

0x6C

0x6C

0x6F

7bits binary Msb ---Lsb

1001000

1100101

1101100

1101100

1101111

轉換8 bits

11001000

00110010

10011011

11111101

00000110

In Hex

0xC8

0x32

0x9B

0xFD

0x06

3.     使用PIC_SEVER發送與接收簡訊

3.1 發送簡訊

使用PIC_SEVER上的RS-232介面發送AT命令,也可控制手機模組來傳送簡訊,進而設計一個簡單的事件觸發系統,當PIC_SEVER判定特定事件被觸發時便發送簡訊。

使用PIC_SERVER來控制手機發送簡訊,需要一支手機和搭配此手機的RS-232傳輸線。如圖5所示,手機的RS-232接腳(以9PINR-232接頭為例)PIN2為接收為接腳,PIN3為傳送接腳,PIN5為接地腳;在PIC_SERVER上則以PIN_C6為傳送接腳,以PIN_C7為接收接腳。

5. 腳位接線圖

6為簡單的手機簡訊發送PIC_SERVERC程式,以前述Text模式傳送簡訊。程式的第5行定義使用PIC_SERVERPIN_C6RS-232傳輸腳位,PIN_C7RS-232接收腳位,而Baud Rate設定在11520。程式第14行傳送字串形式的AT命令“ATE0”給手機且不要使用Echo,第16行設定使用的傳送格式為Text模式,第19行設定欲傳送簡訊之手機號碼,其中“\x22”為字元中的“0920xxxxxx”為手機號碼。程式的第22行為傳送的簡訊內容,而23行為確認控制位元Ctrl-Z,第27~29行分別為游標歸位換行及重置手機的模式,第31行在LCD上顯示簡訊已傳送的訊息。

6. 發送簡訊程式內容

3.2 接收簡訊

本節討論如何使用PIC_SERVER去觸發手機,檢查是否有新簡訊,並由判斷簡訊內容可進一步觸發PIC_SERVER作控制動作,達成以手機簡訊作PIC_SERVER之遠端遙控的目的。

7是由PIC_SERVER接收簡訊之流程圖,PICC程式內容如圖8所示。首先使用AT命令設定手機的模式與簡訊存取位置,在手機設定模式設定與發送簡訊的程式的設定相同,為圖8程式第18~24行。程式第27行為設定簡訊的儲存與讀取位置,使用的AT命令為“AT+CPMS=“ME”, “SM”, “ME””,而這個指令有三個簡訊儲存位置設定,分別為讀取位置、編輯簡訊存放位置、與接收簡訊暫存位置,其中“ME”“SM”分別表示Mobile Equipment(即手機本身)與SIM卡。在本文中讀取位置設定在ME,也就是手機接獲讀取簡訊的指令(AT+CMGR)時,會讀取這個位置的簡訊。編輯簡訊存放位置設定在SM,接收簡訊暫存位置設定在ME,但這兩個位置與本文應用無關。

程式第31~68行是一個讀取簡訊與判讀簡訊內容的循環迴圈。手機接獲程式35行讀取簡訊的指令“AT+CMGR=1”時會先回傳歸位(0x0A)與換行(0x0D)這兩個字元,接著才回傳簡訊內容,程式第36行接收這兩字元,但不作後續處理。

程式第38行讀入簡訊內容,暫存在變數string,如果沒有簡訊手機會傳回“+CMS ERROR: 500”錯誤訊息(即字串變數error預設內容),因此程式第39行使用的CCS指令strncmp(string, door, 4),比對所讀到的簡訊內容(string)與字串變數error,如果前4個字元相同,則判定沒有簡訊,在LCD上顯示“NO NEW SMS”

若有簡訊,程式則繼續判讀收到的簡訊內容是否與預先設定的內容相同。手機傳回簡訊內容格式如下:

+CMGR: “REC UNREAD”,“+886920xxxxxx”,,“05/03/15,16:20:12:30”

door

OK

其中第2(door)才是真實簡訊內容。程式第48行讀取此段簡訊內容後,程式第49行比對所讀到的簡訊內容(string)與字串變數sent(字串變數“sent”中預設內容為“door”),如果前4個字元相同則在LCD上顯示“GET NEW SMS”,且進一步觸發PIC_SERVER做出對應的控制動作(此處為beep兩聲);如果簡訊內容前4個字元與預設內容不同,則LCD上顯示“INVALID SMS”,並發出beep一聲。最後程式第5563行刪除剛才接收的簡訊內容。

7. 使用PIC_SERVER讀取手機簡訊

8. 接收簡訊程式內容

參考資料

白中和,RS-232介面技術應用,民87,全華科技圖書股份有限公司。

John Uffenbeck, 1998. The 80x86 Family Design, Programming, and Interfacing, Prentice-Hall, Inc.

www.usbdeveloper.com/GSMPage/gsmpage.htm

http://houghost.idv.tw/other/comp_dict/A/A0138.HTML