SIM900A—發送、接收中英文短信

一.SMS簡介

SMS(Short Messaging Service)中文名稱短信服務,短信是當下每一部手機上必備的功能之一,顧名思義,它是在手機之間發送文字信息或從個人計算機或手持設備向手機發送信息的一種方式,其文本信息的最大發送量爲160個字符(字母、數字或者拉丁字母中的字符),對於中文一般最大發送量爲70個字符。
這裏我想用SIM900A模塊實現短信的收發
在這裏插入圖片描述

二.短信的控制模式與編碼

先說一下:我採用的是Text Mode下使用GSM編碼收發英文短信、使用UCS2編碼收發中文短信

對於短信的控制一共有三種模式:Block Mode、基於AT指令的Text Mode、基於AT指令的PDU Mode 。目前手機中默認使用PDU Mode,通過PDU編碼的短信可以是文字、聲音或者圖像。Text Mode只能用於發送ANSI範圍的字符,發送方式比較簡單。
SIM900A模塊只提供Text Mode 和PDU Mode。
中文短信中,所有漢字和字符都是採用UNICODE編碼。

1.Text Mode

Text Mode下,發送及接收到的數據均以ASCII碼的顯示來表示,可以發送指令"AT+CMGF=1",將GSM短信發送方式更改爲文本模式。文本模式下接收的數據會自動解碼,比如你收到一條短信息,GSM會返回:+CMGR: “REC UNREAD”,"+8613806XXXXXX",“11/10/21,13:22:13+32”
hello (短信內容會自動換行)
不需要自己解碼,便可得到短信的發送者、發送時間和短信內容,比較容易操作。
理論上Text Mode下,是隻能夠收發英文短信,但是SIM900A模塊可以在Text Mode下使用UCS2編碼,從而可以發送接收中文短信。

2.PDU Mode

PDU相當於一個數據包,它由SMS的信息組成,作爲一種數據單元,必須包含源地址、目的地址、有效時間、數據格式、協議類型、正文、正文長度(可達140字節),這些信息都以十六進制表示。
PUD Mode被所有手機支持,可以使用任何字符集,其編碼方式分爲:7bit、8bit、UCS2。
7-bit編碼用於發送普通的ASCII字符,它將一串7-bit的字符(最高位爲0)編碼成8-bit的數據,每8個字符可“壓縮”成7個;8-bit編碼通常用於發送數據消息,比如圖片和鈴聲等;而UCS2編碼用於發送Unicode字符。在這三種編碼方式下,PDU串的用戶信息(TP-UD)段最大容量(可以發送的短消息的最大字符數)分別是160、140和70。這裏,將一個英文字母、一個漢字和一個數據字節都視爲一個字符。
理論上發送中文短信需要使用PDU Mode的UCS2編碼,上面也說了,SIM900A模塊可以使用Text Mode發送UCS2編碼,而且PDU Mode比Text Mode更加複雜,所以我採用了Text Mode收發中英文短信。
PDU Mode的詳細講解可以借鑑此博客:點擊鏈接跳轉

3.GSM編碼

在GSM編碼模式下,收發消息的內容和電話號碼,都是以ASCII字符的形式顯示的,發送英文短信時使用十分方便。
所以我使用GSM編碼來收發英文短信。

4.UCS2編碼

談到UCS2編碼就不得不說UNICODE,UNICODE又叫統一碼、萬國碼,是計算機科學領域裏的一項行業標準,包括字符集、編碼方案等。UNICODE 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。簡單來說,UNICODE編碼可以表示世界上任意一種語言(有點誇張),自然也可以表示中文。
而UCS2編碼是UNICODE的一種,UCS2中每個字符都佔倆個字節。
使用UCS2編碼後,發送短信的手機號碼、短信內容都要經過UCS2編碼轉換纔可以,但UCS2編碼發送的消息在手機上可以直接顯示爲中文。
所以,需要UCS2與中文的轉換軟件,如下,可以實現中文和UCS2的雙向轉換

在這裏插入圖片描述

三.收發英文短信

採用Text Mode 的GSM編碼。
首先,模塊要通過一系列開機測試指令,纔可以收發短信。這裏介紹一下常用的對短信操作的一些AT指令:

1.AT+CPMS查詢短信數量

在這裏插入圖片描述

2.AT+CNMI設置新消息提示類型

在這裏插入圖片描述

3.AT+CMGF選擇短信模式

在這裏插入圖片描述

4.AT+CSCS設置編碼

在這裏插入圖片描述
在這裏插入圖片描述

5.AT+CSMP設置短信文本模式

使用Text Mode的GSM編碼時,短信文本模式設置爲:

  • AT+CSMP=17,167,0,240(消息顯示在終端)
  • AT+CSMP=17,167,0,241(消息存儲在SIM卡中)

在這裏插入圖片描述

6.AT+CMGS發送消息到指定手機號

使用Text Mode的GSM編碼時,直接AT+CMGS="手機號"即可,然後,在>後輸入要發送的內容(不要勾選發送新行),最後發送HEX(十六進制)的:1A 即可。
如圖,我使用本機向本機發送了一條短信,而且,本機收到短信後在終端中顯示出來了。
在這裏插入圖片描述

這是SIM公司給出的例子:
在這裏插入圖片描述

CTRL-Z 代表十六進制:1A

使用SIM900A向本機發送一條英文短信的完整步驟如下:
在這裏插入圖片描述

四.收發中文短信

收發中文短信利用的是Text Mode下的UCS2編碼。
相比於收發英文短信,收發中文短信需要修改的地方有:

  • 修改編碼:AT+CSCS=“UCS2”
  • 修改短信文本模式:AT+CSMP=17,167,0,24(短消息顯示在終端,25:存儲在SIM中)
  • 手機號碼要用UNICODE碼
  • 發送的消息要用UNICODE碼(有專門的轉換軟件)

這是SIM公司給出的例子:
在這裏插入圖片描述

我向女朋友發送信息:可愛的小白鼠,女朋友收到後回覆消息,用軟件將UNICODE碼轉換爲中文,串口操作界面如示:
在這裏插入圖片描述
發消息如示:
在這裏插入圖片描述
收消息如示:
在這裏插入圖片描述

這是我的SIM900A
在這裏插入圖片描述

有什麼問題可以q一下博主,一起學習進步哦
q:2723808286

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章