久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機給手機發短信

作者:佚名   來源:本站原創   點擊數:  更新時間:2007年07月02日   【字體:

  隨著科技的飛速發展和人民生活水平的不斷提高,手機的普及率越來越高,更新也越來越快,價格也越來越便宜。因為手機工作的無線網絡覆蓋范圍廣,在信息傳遞方面性能穩定、可靠,所以把手機作為信息傳遞的載體,與單片機結合起來構成應用系統有著強大的生命力和廣闊的應用空間,特別是在遠程數據傳輸、遠程監控等領域更是受到電子設計應用工程師的關注。一些專業刊物也介紹了一些有關這方面的文章,然而由于手機的控制指令復雜,數據格式繁瑣,工程技術人員在進行單片機與手機的硬軟件接口設計時經常會遇到很多困難,有時還無資料可查。筆者在完成一個項目的開發過程中,針對幾種手機進行了大量的測試和實驗,在此基礎上歸納出一些帶規律性的結論,對此結論,工程設計人員可拿來即用,大大縮短研發周期,現在把它公布出來,愿與廣大電子設計人員共享。

1 硬件接口技術方面
    目前市場上流行的大部分手機幾乎都具有數據引出口,并基本上都支持與GsM短信息相關的AT控制指令(GSM-SMS-AT指令),手機通過數據口以串行方式接收指令并向外輸出數據。理論上講,在數據口中找出RxD、TxD和GND引腳與單片機的串口對應連接即完成了硬件接口。然而,實際上由于不同品牌,不同型號手機的RxD、TxD和GND引腳并非一致,找查這三根線有時也非易事;況且手機數據口的電平既不是RS232電平,也不是TTL電平,與由5V供電的單片機串口還不能直接連接。最簡單可靠的方法是使用手機的數據線建立單片機與手機的硬件連接。手機數據線是專為連接PC機9針串口而設計的,信號電平為標準的RS232電平,只要單片機的串口也轉換為Rs 2 3 2電平,就可方便連接。9針串口引腳定義是固定的,即2腳為TxD(手機發送),3腳為RxD(手機接收)、5腳為GND。這樣,無論什么型號的手機與單片機的連接就成了固定連接,不需要知道手機數據口信號的具體定義,二者通過數據線的連接電路如圖1所示。 

    需要注意的是:不同手機數據線內部電平轉換芯片的供電方式是不同的,有的是通過手機直接供電;有的是通過竊取PC機串口某些引腳(通常為4、6、7、8引腳)的電流經內部整流濾波穩壓后提供。判斷的方法是將數據線一端插到手機數據口,測量另一端2腳與5腳之間的電壓,如果有一7V左右的電壓,則為前者,如果測不出電壓,則為后者,對于后者則需要單片機為4、6、7、8引腳任意一引腳提供+5V電壓即可,如圖1中虛線所示。

2 軟件接口技術及控制原理
    單片機與手機的軟件接口其實就是單片機通過與GSM短信息有關的AT指令控制手機的控制技術,如讀取手機的短消息內容,刪除短消息內容,列出手機中還未讀的短消息等。關于AT指令的功能描述見參考文獻[1,2]的文章內容,此處不再贅述。然而,執行一條指令,也并非某些資料中介紹得那么簡單。事實上,指令的執行過程需要單片機與手機交互應答完成,每一次發送或接收的字節數有嚴格的規定,二者必須依據這些規定實現數據交換,否則,通信就是失敗的。筆者經過對幾種手機反復測試,總結出來一些規律,如表1所列。

    對幾個問題說明如下。
    ①所有AT指令的指令符號、常數、PDu數據包等都是以ASCII編碼形式傳送的,比如“A”的ASCII編碼為41H,“T”的AscII編碼為54H,數字“0,,的AsCⅡ編碼為30H等。
    ②單片機控制手機工作,必須把手機的短信息工作模式設置為PDu格式,即通過指令AT+cMGF=O完成。
    ③單片機向手機發送每一條指令后,必須以回車符作為該條指令的結束,回車的ASCII編碼為0DH。例如,單片機向手機發送“AT+CMGF=0”這條指令,其ASCII編碼序列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一個字節0DH就是回車符,表示該條指令結束,如果沒有這個回車符,手機將不識別這條指令。
    ④當手機接收到一條完整的AT指令后,手機并不立即執行這條指令,而是先把剛才接收到的AT指令的全部ASCII編碼序列全部反發送出來(含0DH),然后發送一個回車符和換行符的ASCII編碼,即0DH和0AH,最后執行該條指令。
    ⑤手機向單片機傳送短信息內容時,其PDu數據包的內容是以十六進制表示的數據,但并不是直接向單片機傳遞十六進制數據,而仍然是把每一位十六進制數以AscII編碼來發送。這樣,二個字節的十六進制數就變成4字節的ASCII碼。但是,PDU數據包中的數據字節長度部分仍然是實際字節長度,而不是變成AscII碼的字節長度,這在編程時應特別注意,否則,接收的數據就不完整。單片機接收到PDU數據包數據后,必須將其恢復成十六進制數據,其算法如下:設a為接收的ASCII碼,b為轉換后的十六進制數。如果a<39H,則b=a-30H;如果a>39H,則b=a-30H-07H,最后把前后兩個數合并為一個字節。
    ⑥手機向單片機應答PDU數據包的字節數不包括前9字節數據(短信服務中心地址),但向單片機傳送PDU數據包時,包括這9個字節的數據。例如,如果手機應答的PDU數據長度為50,而實際向單片機傳送的十六進制數據為59字節,ASCII碼為2×59字節,所以,單片機必須按2×59字節接收PDU數據。


3 應用實例
    筆者利用上述原理和接口技術開發了一個項目:高速公路顯示導引系統。安裝在高速公路上的LED顯示屏實時顯示前方路段車輛通行態勢和天氣氣候情況,提醒并引導駕駛人員,正確駕駛。該系統的使用一定程度上消除了許多交通事故隱患,從而保障了道路的暢通和人民生命財產的安全。該系統由控制中心和若干個顯示屏組成。控制中心實時將最新信息發送到各顯示屏。構建控制中心與顯示終端的通信鏈路,傳統的方法要么鋪設光纜用有線方式實現,要么構建專用無線網用無線方式實現。因為高速公路的特殊性,控制中心與顯示終端之間的距離通常很遠,兩種方案都必須投入大量資金和巨大的施工工作量。如果采用GSM公眾無線傳輸網絡,控制中心以短信息的形式把顯示信息發送到顯示終端的技術方案,則具有投資小,施工方便,工作可靠,運行費用低等諸多優點。
    在控制中心,微機編輯好短信息后通過手機這個載體發送出去。在顯示終端,單片機通過讀取手機的短信息把它顯示到LED顯示屏上。項目的核心技術是單片機與手機的接口和PDU數據包中的漢字信息編碼。因為短信息中的漢字僅僅是一個編碼,單片機應用系統將編碼變為漢字點陣數據,必須配置漢字字庫。按GSM07.05協議規定,短信息中的漢字編碼為Unicode編碼,如果構建一個Unicode編碼的漢字字庫,確實是一件繁瑣的工作,因此,在設計單片機應用系統時,采用如下兩點技術措施。
    ①單片機系統配置的字庫為GB-2312編碼的漢字庫,即區位碼漢字庫,該漢字庫在網上可免費下載,固化到Flash存儲芯片中即可。當然這樣做的前提是PDU數據包中的漢字編碼必須為漢字內碼而非Unicode編碼。
    ②控制中心編輯PDU數據包數據時,采用自定義數據方式,其中,代表漢字的數據,直接取用漢字的機內碼即可,免去了把機內碼再轉換為Unicode編碼之苦。實踐證明,這是可行的。
    采用以上技術措施的優點,一是省去了兩種編碼的相互轉換;二是保證了數據的保密性,非系統內用戶無法接收,即使接收也無法顯示。
    該項目研制成功投入使用后,因顯示終端只接收不發送,幾乎沒有運行成本。發送端(控制中心)可采用月租方式,也能把運行費用降低到最低限度。因此該項目得到用戶滿意的評價。

GSM(Global System for Mobile communication)系統是目前基于時分多址技術的移動通訊體制中比較成熟、完善、應用最廣泛的一種系統。目前已建成的覆蓋全國的GSM數字蜂窩移動通信網,是我國公眾移動通信網的主要方式。主要提供話音、短信息、數據等多種業務。基于GSM短消息功能可以做成傳輸各種檢測、監控數據信號和控制命令的數據通信系統,能廣泛用于遠程監控、定位導航、個人通信終端等。由于公眾GSM網絡在全球范圍內實現了聯網和漫游,建立上述系統不須再組建專用通信網絡,所以具有實時傳輸數據功能的短消息應用將得到迅速普及。

目前,人們設計的各類DTE設備基礎上以微處理器為核心,帶有RS232/RS485等通信接口,在物理層上很容易實現與GSM設置(如手機等)的連接。但對SMS協議的研究文獻卻較少,特別是用單片機控制手機的SMS(Short Message Service)收發的研究更少。筆者在用單片機設計基于GSM的SMS數據采集器時,對怎樣用單片機控制手機收發短信息進行了探討。

1 串口控制SMS的工作原理

單片機與手機一般采用串行異步通信接口,具有紅外和通信電纜兩種連接方式,通信速度可設定,通常為19200bps。采用紅外接口的優點是單片機系統與手機電氣隔離,相互不干擾,接口各自獨立,使用方便;缺點是通信距離較短,紅外傳播的方向性對接口相對位置有要求。采用電纜連接時,數據傳輸的可靠性較好;其主要缺點是接口的電氣參數不兼容,設計不當時會對手機的通信質量產生影響。筆者經過實踐設計的接口電平轉換電路如圖1。

GSM的短信息業務SMS利用信令信道傳輸,這是GSM通信網所特有的。它不用撥號建立連接,把要發的信息加上目的地址發送到短信息服務中心,經短消息服務中心完成存儲后再發送給最終的信宿。所以當目的GSM終端沒開機時信息不會丟失。每個短消息的信息量限制為160字節。

現在市場上大多數手機均支持GSM07.05規定的AT指令集。該指令集是ETSI(歐洲通信技術委員會)發布的,其中包含了對SMS的控制。利用GSM手機的串行接口,單片機向手機收發一系列的AT命令,就能達到控制手機收發SMS的目的。ETSI的GSM07.05中用于SMS收發控制的主要AT命令見表1。

表1 常用AT指令GSM07.05Function(功能)ATE0RESETAT+CSMS選擇短信息服務AT+CPMS選擇短信息內存AT+CMGF選擇短信息格式AT+CSCA短信息中心地址AT+CNMI顯示新收到的短信息AT+CMGR讀短信息AT+CMGS發送短信息AT+CMGL列出SIM卡中短信息AT+CMSS從SIM內存中發短信息AT+CMGW向SIM內存中寫入待發短信息AT+CMGD刪除SIM內存中的短信息AT+CSCB選擇蜂窩廣播信息

GSM手機通過異步通信接口實現對SMS的控制共有三種接入協議:Block Mode;基于AT命令的TextMode;基于AT命令的PDU Mode。PDU模式是發送或接收手機SMS信息的一種方法,短信息正文經過十六進制編碼后被傳送。目前,PDU Mode應用最為廣泛,基本上全國所有的電信局都提供支持PDU Mode的短消息業務。有些地址則不支持Text Mode和Block Mode,這就限制了這兩種接入協議的應用,而且PDU Mode已有取代Block Mode的趨勢。為了保證系統具有廣泛的適用性,本文采用PDU模式收發SMS。

PDU相當于一個數據包,它由構成消息(SMS)的信息組成。作為一種數據單元,它必須包含源/目的地址、保護(有效)時間、數據格式、協議類型和正文,正文長度可達140字節,它們都以十六進制表示。PDU結構根據短消息由移動終端發起或以移動終端為目的而不同。

當由移動終端發起時,PDU的格式為:
SMSCPDU類型MRDAPIDDCSVPUDLUD(0~140octed)

當以移動終端為目的時,PDU的格式為:
SMSCPDU類型OAPIDDCSSCTSUDLUD(0~140octed)

其中,SMSC為短消息業務中心地址,DA/OA為源/目的地址,PID為協議識別,DCS為數據編碼,UDL為用戶數據長度,UD為用戶數據,VP為有效時間,MR指明是發出信息,SCTS指明短消息到達業務中心的時間。

2 PDU格式下短信息的接收

根據設置不同,手機將收到的短消息保存在緩存單元或存入SIM卡,單片機從手機中接收短消息實質上就是從SIM或緩存中讀出信息。這主要利用AT+CMGR和AT+CMGL兩條指令來完成,其工作過程見圖2。

由于不同的廠商對AT指令集的解釋代碼和響應信息不一樣,所以單片機首先要確認能否與手機建立起通信,一般用ATE指令完成此確認;然后用AT+CMGF指令選定短消息的數據格式;在收到手機的正確回答反以AT指令完成讀出功能。一般用AT+CMGL讀取以前的信息,在收到手機的RING(振鈴)數據時,用AT+CMGR讀取實時信息。

以下是筆者設計的物流數據采集系統中用到的接收SMS的一個實例,它說明了PDU模式的應用。單片機發送和接收(手機回答)均為ASCII碼。所用手機為SIEMENS S3508i。

操作過程如下({}內為注釋):

發送:ATE

手機回答:OK {已建立聯接}

發送:AT+CMGF=0 {選用PDU格式}

手機回答:OK {允許選擇PDU格式}

發送:AT+CMGL=2 {列出已有的短信息}

手機回答:+CMGL:1,2,,24{1表示信息個數,2表示未發信息,24表示信息總容量}

0D71683108370105F004000D81683179133208F10000026080410033802632184CF682D

95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608

OK

以上這組PDU格式的十六進制字符串,不但包含了短消息的內容,同時包含了發送者的手機號碼、短信息中心號碼、短消息發送時間等。

下面對信息內容進行分析:

0D:短信息中心地址(號碼)長度。

91:短信息中心號碼類型,91是TON/NPI。TON/NPI遵守International/E.164標準,指在號碼前需加'+'號;此外還可直有其他數值,但91最常用。

683108370105F0:SMSC 短信息所使用的服務中心號碼13807310500。它經過十六進制以字節為單位的高低半字節換位處理,號碼是奇數的添F,構成一個HEX字節。

04:PDU類型,文件頭字節。

0B:主叫號碼長度。

81:主叫號碼類型。

3179133208F1:0A主叫號碼,也經過了處理,實際號碼為13973123801。

00:PID,為協議標識。

00:DCS短信息編碼類型是GSM Default Alphabet,即由7位ASCII碼移位組成8位十六進制碼(octet),其方法見表2。
1sthexB0A6A5A4A3A2A1A02ndhexC1C0B6B5B4B3B2B13rdhexD2D1D0C6C5C4C3C24thhexE3E2E1E0D6D5D4D35thhexF4F3F2F1F0E6E5E46thhexG5G4G3G2G1G0F6F56thhexH6H5H4H3H2H1H0G6

02608041003380:SCTS短信息發送時間,02/06/08/14:00:33.08。

26:UDL經處理后的8位碼(octet)短信息字節長度,它小于消息ASCII碼的長度。

32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608:UD 編碼后的PDU數據,短信息內容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。

3 短信息的發送

與接收短信息一樣,發送時也要先建立聯接,傳送一些初始化指令,然后發送短消息內容。下面是用SIEMENS S3508i發送一個短信息的例子,內容為:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII碼為:“32030322F30362F30382F31333A34382049443130324F4B

2049443130334F4B2049443230314641494C20”。

發送:ATE {請求建立聯接}

手機回答:OK {已建立聯接}

發送:AT+CMGF=0 {選擇PDU模式}

手機回答:OK

發送:AT+CSMS=0{檢測手機是否支持SMS命令}

手機回答:OK

發送:AT+CMGS=52{發送短信息,52 octets(不包括最初9個短信息元字節)}

手機回答:>{允許上傳數據,ASCII碼是($20H,$2EH)}

發送:0891683108701305F011000B813179133208F10000AA2632184CF682D95

E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A

不計最初9個短消息信元字節,本短信息有52字節(104個字符)。AT+CMGS僅說明了SMSC信息內容的長度,在收到手機回答的>符號手才發送PDU數據串,并以(CTRL^Z)結束。

PDU數據串的內容說明如下:

08:短信息信元SMSC(短信息中心號碼)的字節長度

91:短信息中心號碼類型,91表明中心號碼是國際通用電話號碼。

683108701305F0:短信息中心號碼:8613807310500。

11:PDU SMS發送的文件頭字節。這里11指正常發送短信息。

00:信息類型。這里00指讓手機自動加上主叫號碼。

0B:被叫號碼長度。

81:被叫號碼類型。

3179133208F1:被叫號碼13973123801。

00:協議標識。

00:短信息編碼類型是GSM Default Alphabet。

AA:短信息被保留的時間為4天,其計算方法依照表3。
VP值短消息有效時間長度0~143(VP+1)×5分鐘144~16712時+(VP-143)×30分168~1961天×(VP-166)197~2551周×(VP-192)

26:PDU格式短信息編碼后字節長度。

32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D

97A02451068B1983492608:編碼后的PDU數據,短信息內容為“2002/06/08/13:

48ID102OKID103OK ID201FAIL”。

1A:ASCII碼CTRL^Z:報文結束標志。

4 應用情況及常見主要問題的解決

筆者用MCS-51系列的單片機研制了一個手持式的數據采集產品,通過SIMEENS手機,利用GSM的SMS傳輸數據。經過在國內多個省市較大數量長期廣泛的使用,性能良好,沒有出現數據丟失的現象。證明上述設計用,性能良好,沒有出現數據丟失的現象。證明上述設計是正確的。但在調試和試用階段也遇到了如下問題:

(1)接口電平

手機的電纜接口電平一般是3V左右,單片機系統的工作電壓一般為2.7~5.5V,范圍較寬,為保證數據傳輸的正確,需在接口加電平限制電路,詳見圖1。

(2)部分城市無法使用

一些城市的SMS平臺不允許使用缺省短消息服務中心號碼的協議,只需在發送的PDU數據前面幾個字節加上中心號碼即可,詳見本文發送實例。

(3)不能接收已正確發送的短消息

除GSM的SMS信道擁塞原因外,主要是PDU中PID字節的設置,使得收到的信息要存入SIM卡,而SIM卡已滿,故不再接收信息。改變PID的設置即可。

(4)收不到開機前的短消息

主要是發送數據時,對短消息有效時間VP值設置不當造成的。

關閉窗口
主站蜘蛛池模板: 婷婷毛片 | 天天干天天爱天天爽 | www.日本在线观看 | 国产精品一区二区在线 | 精品久久久久久国产 | 精品一区二区三区在线视频 | 毛片一级黄色 | 欧洲免费视频 | 成人深夜福利在线观看 | 天天久| 日本视频在线 | 亚洲一区二区三区视频免费观看 | 欧美高清一级片 | 成年免费大片黄在线观看岛国 | 九九看片 | 亚洲色图第一页 | 亚洲日韩视频 | 国产乱码精品一品二品 | 成年免费大片黄在线观看一级 | 一本岛道一二三不卡区 | 免费看日韩视频 | 亚洲欧洲精品一区 | av香蕉| 伊人二区 | 成人免费看电影 | 欧美一级黄色片在线观看 | 91久久国产综合久久 | 日本不卡一区二区三区在线观看 | 亚洲日本激情 | 国产精品福利一区二区三区 | 中文字幕av亚洲精品一部二部 | 久久综合久 | 性欧美精品一区二区三区在线播放 | 小早川怜子xxxxaⅴ在线 | 日韩视频―中文字幕 | 国产精品久久国产精品久久 | 97视频在线观看免费 | 亚洲一区国产 | 精品视频免费 | 国产精品欧美一区二区三区 | 播放一级黄色片 |