中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用AT命令操作SIM卡進行短信發送

發布時間:2021-11-11 17:42:02 來源:億速云 閱讀:932 作者:柒染 欄目:互聯網科技

如何使用AT命令操作SIM卡進行短信發送,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

        最近投身于某電子公司的用電信息采集終端軟件重寫,主要負責終端與主臺的通訊功能編寫。本周用到了AT命令操作SIM卡進行發送短信功能,在此做一個小小的總結,希望對有類似需求的童鞋能有所幫助。

        注:由于有C語言源碼,再加上鄙人對硬件實在是知之甚少,所以很多操作步驟都是按照原有邏輯進行重寫(尤其是短信模塊的初始化),若有錯誤,請各位酌情添加、刪除或修改。

1、 硬件的初始化

在現有代碼邏輯中按如下步驟進行硬件初始化:打開串口→重啟SIM硬件模塊→發送AT命令檢查SIM卡運行狀態。

a)      打開串口

串口操作已經有很成熟的代碼,這里就不贅述了。

b)      重啟SIM硬件模塊

使用的魔法數字定義:

static const unsigned char RESET_CTL = 0;

static const unsigned char POWER_CTL = 1;

static const unsigned char IGT_CTL = 2;

重啟步驟

硬件操作

turnOffModel()

int fd = open( "/dev/gprs_io", O_RDWR | O_NONBLOCK )

 

ioctl( fd, 0, POWER_CTL)

 

sleep(3)

 

::close(fd)

startModel()

int fd = open( "/dev/gprs_io", O_RDWR | O_NONBLOCK )

 

ioctl(fd, 0, IGT_CTL)

 

ioctl(fd, 1, POWER_CTL)

 

ioctl(fd, 1, RESET_CTL)

 

usleep(500000)

 

ioctl(fd, 0, RESET_CTL)

 

usleep(500000)

 

ioctl(fd, 1, RESET_CTL)

 

sleep(2)

 

ioctl(fd, 1, IGT_CTL)

 

sleep(3)

 

ioctl(fd, 0, IGT_CTL)

 

::close(fd)

 

sleep(5)

c)       發送AT命令檢查SIM卡運行狀態

操作步驟

發送的AT命令(C++轉意格式)

模塊正常時回復的結果

結果含義

檢測模塊是否正常

“AT\n”

AT

OK

OK表示模塊正常

ERROR表示模塊異常

查詢移動終端國際移動臺標號

“AT+CIMI\n”

AT+CIMI

460000973136668

第二行數字為移動終端國際移動臺標號。

此處用于系統進行操作記錄,可忽略結果。

檢測SIM是否已注冊到網絡

“AT+CREG?\n”

AT+CREG?

+CREG: 0,2

 

OK

<0,2><0,5><1,2><1,5>均認為結果正確。

+CREG: mode,state

mode:

0 : 禁止網絡注冊主動提供結果代碼(默認設置)

1:允許網絡注冊主動提供結果代碼,格式:

state:

0:未注冊,并且模塊當前不搜尋新的運營商

1:已注冊本地網絡

2:未注冊,終端正在搜尋基站

4:注冊被拒絕

5:已注冊,并且處于漫游狀態

查看信號值

“AT+CSQ\n”

AT+CSQ

+CSQ: 13,5

 

OK

第一個數字(即接收信號強度)大于6即認為可用。

+CSQ:<RSSI>,<FER>

<RSSI>:

有效值0-31。值越大表明信號越好,16以下,呼叫有可能失敗。

模塊信號強度范圍在-75到-125DB,換算到有效值公式為

31×(125-|DB|)/50

<FER>:

信道誤幀率。

設置短信格式

“AT+CMGF=0\n”

AT+CMGF=0

OK

0:PDU模式。

1:文本模式。

2、 接收短信

操作步驟如下:

操作步驟

發送的AT命令(C++轉意格式)

模塊正常時回復的結果

結果含義

獲取短信數量

"AT+CPMS=\"SM\",\"SM\",\"SM\"\r"

+CPMS: 4,50,4,50,4,50

 

OK

此處取前兩位數字:

4表示當前存儲的短信數量;

50表示SIM卡可存儲的短信總量。

獲取短信1信息

“AT+CMGR=1\r"

+CMGR: 1,,38

0891683108200845F7240D91683121436587F9

0000617072917253231

474747A0E4ACF416110BD3CA783C66F72D905

錯誤時會返回:

AT+CMGR=1

+CMS ERROR:<err>

刪除短信

“AT+CMGD=1\r”

OK

錯誤時返回

AT+CMGD=1

+CMGD ERROR:<err>

短信PDU碼流解析:

0891683108200845F7240D91683121436587F90000617072917253231474747A0E4ACF416110BD3CA783C66F72D905

08

短信中心號碼(含類型碼)所占字節數

08表示之后8個字節(即16個十六進制數)為短信中心號碼(含類型碼)

91

短信中心號碼類型

91表示國際碼

A1表示國內碼

68 31 08 20 08 45 F7

短信中心號碼

使用的是BCD編碼,該例中短信中心號碼為“8613800280547”。即所有字節高低位交換。F為填充碼。

24

基本參數(TP-MTI/MMS/RP)

含義未知

0D

發送方電話號碼長度(個數,非字節數,不含類型碼)

本例中為13個數字

91

發送方電話號碼類型

91表示國際碼

A1表示國內碼

68 31 21 43 65 87 F9

發送方電話號碼

本例發送方電話號碼為“8613123456789”(請原諒我為了保護隱私,修改了這段碼流)

00

參數顯示SMSC以何種方式處理SM (比如FAX,、Voice等)

00表示是普通GSM類型,點到點方式

00

用戶數據(UD)編碼方案

00為7-bit編碼,08為UCS2編碼

61 70 72 91 72 53 23

BCD編碼,時間戳

本例為 16年7月27日19:27:35 +8時區

14

短信的實際長度。

本例為20個字節。

74 74 7A 0E 4A CF 41 61 10 BD 3C A7 83 C6 6F 72 D9 05

用戶數據”this is a test code.”的7-bit編碼。

用戶數據所占字節數因“編碼方案”不同而不同。

用戶數據的實際字節數(1個字節為2個16進制數)計算方式:

7-bit編碼: 短信實際長度*7/8,若有余數則加1.

UCS2編碼: 短信實際長度.

其他方式(不推薦,僅用于保證程序的健壯性):短信實際長度和”/r/n”之間的數據。

3、 發送短信

操作步驟如下;

操作步驟

發送的AT命令(C++轉意格式)

模塊正常時回復的結果

結果含義

發送短信

“AT+CMGS=33\r"

等待輸入短信PDU編碼

"0891683108100005F011000D91683121436587F90000AA

1474747A0E4ACF416110BD3CA783C66F72D905"+0xA1

OK

發送成功。

失敗返回:

+CMS ERROR: :<err>

0xa1為<Ctrl-Z>的符號碼,表示PDU碼流發送結束。


“AT+CMGS=33\r"中33表示發送的PDU編碼中除去短信中心號碼(”0891683108100005F0”)外的其他信息字節數(不含0xA1)。本例中為碼流” 11000D91683121436587F90000AA1474747A0E4ACF416110BD3CA783C66F72D905”的長度除以2.

短信PDU碼流解析:

0891683108100005F011000D91683121436587F90000AA1474747A0E4ACF416110BD3CA783C66F72D905

08

短信中心號碼(含類型碼)所占字節數

08表示之后8個字節(即16個十六進制數)為短信中心號碼(含類型碼)

91

短信中心號碼類型

91表示國際碼

A1表示國內碼

68 31 08 10 00 05 F0

短信中心號碼

使用的是BCD編碼,該例中短信中心號碼為“8613800100500”。即所有字節高低位交換。F為填充碼。

11

pdu類型

11:160個英文字符/70個漢字以內的短信,無短信報告

31:160個英文字符/70個漢字以內的短信,有短信報告

51:長短信(多條合并),無短信報告

71:長短信(多條合并),有短信報告

00

消息基準值(TP-MR)

 

0D

發送方電話號碼長度(個數,非字節數,不含類型碼)

本例中為13個數字

91

發送方電話號碼類型

91表示國際碼

A1表示國內碼

68 31 21 43 65 87 F9

發送方電話號碼

本例發送方電話號碼為“8613123456789”(請原諒我為了保護隱私,修改了這段碼流)

00

參數顯示SMSC以何種方式處理SM (比如FAX,、Voice等)

00表示是普通GSM類型,點到點方式

00

用戶數據(UD)編碼方案

00為7-bit編碼,08為UCS2編碼

注;與短信實際長度、用戶數據要相對應,否則會返回531錯誤。

AA

短信有效期(TP-VP)

00 表示5分鐘

AA表示最長

其他未知

14

短信的實際長度。

20個字節。與編碼方案、用戶數據相對應。

74 74 7A 0E 4A CF 41 61 10 BD 3C A7 83 C6 6F 72 D9 05

用戶數據”this is a test code.”的7-bit編碼。

用戶數據所占字節數因“編碼方案”不同而不同。

4、 關閉模塊

turnOffModel()、關閉串口。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

at
AI

通许县| 东安县| 洛川县| 定远县| 大港区| 龙陵县| 蕉岭县| 龙口市| 无锡市| 普定县| 吴江市| 林芝县| 七台河市| 和林格尔县| 磐安县| 剑川县| 夏邑县| 临夏市| 泸水县| 沛县| 易门县| 鹤庆县| 托克托县| 阳朔县| 柳州市| 博兴县| 邹平县| 新巴尔虎右旗| 新密市| 珲春市| 淄博市| 偃师市| 衡水市| 乌苏市| 南溪县| 巩义市| 永和县| 河池市| 克什克腾旗| 淮安市| 甘肃省|