在各類物聯網應用中,NB或者4G網絡是常見的通信介質,其最大的優勢是可以藉助現有的移動基站,無需額外建立基站,所以廣泛應用在三表(水錶、電能表、天然氣表)無線抄表中。通常情況下,對於這類小流量的數據,是通過串口(UART)與NB或者4G模組通信,以AT指令的方式進行數據交互和命令控制。
我們拿到一個模組後,一般原廠會提供一份或者多份AT指令手冊,軟件工程師根據指令手冊實現預期的功能。廠家提供的指令手冊一般的非常全面的,但是我們需要的可能只是其中一部分指令,大部分都是用不到的。這個時候就需要我們能夠快速從“衆多”命令中提取“有用”命令。本文就是本人根據使用過的模組總結一個整體流程,流程的每一步對應一條或多條AT指令,不同廠商的模組AT指令可能不同,但“總體流程”是不變的,根據流程去找指令,效率會高很多。
舉個也許不那麼恰當的例子:使用一個UART需執行的配置步驟:
- 波特率
- 數據位
- 停止位
- 校驗位
- 流控
不同的CPU,具體配置寄存器肯定是不一樣的,但是上述的整體過程步驟是不會變的,根據理論步驟找到對應的寄存器。
根據以往使用的模組歸納整體撥號流程:
測試串口鏈路—>關閉回顯—>查詢模組名稱—>獲取IEME號—>檢測SIM卡—>查詢信號強度—>設置網絡着附—>查詢網絡着附—>查詢運營商—>設置APN—>查詢本地IP—>IEME認證—>建立連接—>open socket—>數據發送/接收—>close socket
上述流程只是本人根據以往使用過的NB/4G模組進行的總結,不同的模組,特別是新推出或者小衆廠商的模組,與流程不一定完全吻合,具體情況還得根據具體模組來。
1 測試串口鏈路
指令 | 返回 |
---|---|
AT | AT |
不同廠商的模組啓動時間存在差異,模組完全啓動後才能響應AT指令。比如之前遇到的一個美格模塊,啓動時間要14S。開機後,可考慮週期性向模組串口發送“AT”命令,直至有響應。
2 關閉回顯
指令 | 返回 |
---|---|
ATE0 | OK |
有些模塊默認是開啓回顯的。回顯就是,發送的內容串口會完整地返回來,一般在開發初期調試會開啓回顯。後期正常產品是要關閉的,減少串口帶寬佔用。
注
開啓回顯命令: ATE1
3 查詢模組名稱
指令 | 返回 |
---|---|
AT+CGMM | 模塊名稱 |
同一廠商不同模組或者不同廠商的模組,都有一定標識的模組名稱。模組名稱一般用於驅動程序中兼容多種模組的一個標識,根據不同的模組名稱來執行後續不同的聯網指令。如果一款產品只用一種模組,可以跳過這個步驟。
4 獲取IEME號
指令 | 返回 |
---|---|
AT+CGSN | IEME |
國際移動設備識別碼(International Mobile Equipment Identity,IMEI),就是我們平常所說的手機序列號(俗稱手機串號),用於在移動電話網絡中識別每一部獨立的移動通信設備,相當於移動電話的身份證。同理,4G模組、NB模組也有一個唯一的IEME號。
在4G模組撥號聯網時,一般不用手動認證IEME號。NB模組在連接socket前一般需要手動認證IEME號。
IEME號注意保密,就像你的身份證號一樣。
5 檢測SIM卡
指令 | 返回 |
---|---|
AT+CPIN? | +CPIN: READY |
檢測到sim卡才能執行後續撥號聯網過程。一些模組帶有自動檢測sim卡狀態功能,模組上電後檢測到sim卡會串口會主動輸出信息,如卡不存在,模組則自動進入PSM模式,如移遠的BCxx系列的NB模組。
例:
AT+CPIN?
+CPIN: READY
6 查詢信號強度
指令 | 返回 |
---|---|
AT+CSQ | 信號強度 |
撥號前查詢信號強度,信號強度過低可能導致着附移動網失敗。實際使用,根據信號強度選擇是否進行撥號連接,減少重複撥號過程。連接上TCP網絡後,可在空閒線程進行信號強度查詢。
例:
AT+CSQ
+CSQ: 29,99
7 設置網絡着附
該命令不同模組可能不一樣。參考命令:
指令 | 返回 |
---|---|
AT+CREG=1 | OK |
例:
AT+CREG=1
OK
8 查詢網絡着附
該命令不同模組可能不一樣。參考SIMCOM某4G模組命令:
指令 | 返回 |
---|---|
AT+CREG=1 | +CREG: 1,1 |
例:
AT+CGREG?
+CREG: 1,3
9 查詢運營商
指令 | 返回 |
---|---|
AT+COPS? | 具體運營商 |
例:
AT+COPS?
+COPS: 0,0,"CHN-TELECOM",7
運營商信息主要用於下一步APN設置,其次是提供用戶查看。
10 設置APN
該命令不同模組可能不一樣。參考移遠某4G模組命令:
指令 | 返回 |
---|---|
AT+QICSGP | OK |
APN是根據上一步運營商類型來設置的,不同的運營商不一樣的設置。如果是專網,還需要由專網運營商提供專門的用戶名和密碼。
參考三大運營商非專網APN:
- 移動 cmnet
- 聯通 3gnet
- 電信 ctlte
例:
AT+QICSGP=1,1,"cmnet","card","card",3
OK
11 查詢本地IP
該命令不同模組可能不一樣。參考移遠某NB模組命令:
指令 | 返回 |
---|---|
AT+CGDCONT? | 本地IP |
如果成功獲取到本地IP,說明模組已經接入運營商的移動網絡,否則需等待本地IP獲取。獲取到本地IP後,離建立TCP網絡就只差一步之遙了!
例:
AT+CGDCONT?
+CGDCONT: 1,"IP","CMIOT","10.139.210.85",0,0
12 IEME認證
該命令不同模組可能不一樣。參考移遠某NB模組命令:
指令 | 返回 |
---|---|
AT+EGMR+IEME | OK |
IEME手動認證,一般用於NB模組中,4G網絡中一般不用手動認證。應該是NB出自網絡安全性認證考慮。
例:
AT+EGMR=1,7,"123456789012345" /* IEME號注意保密,就像你的身份證號一樣 */
OK
13 建立連接
不同模組該命令不一定獨立出來,一般與“open socket”命令結合一起,參考美格某模組指令:
指令 | 返回 |
---|---|
AT+MIPCALL=1 | 成功返回本地IP |
例:美格某模塊建立連接
AT+MIPCALL=1
+MIPCALL:1,10.13.44.170
14 open socket
該命令不同模組可能不一樣。參考移遠某NB模組命令:
指令 | 返回 |
---|---|
AT+QIOPEN | OK |
例:移遠某模組建立socket
AT+QIOPEN=1,1,"TCP","20.10.150.154",6201,10000,1
OK
15 數據發送
該命令不同模組可能不一樣。即使命令不一樣,根據手冊目錄易辨別出TCP/UDP的命令。需要注意的是數據發送方式是十六進制字符還是ASII碼,有的模組是同一條指令,通過配置實現切換;有的模組則是獨立爲兩條指令。
16 數據接收
模組的網絡數據一般是主動輸出到串口,帶有特定標識的“URC幀”,接收後程序解析獲取有效數據。
例:
移遠某模組:+QIURC: "recv",1,20
SIMCOM某模組:+RECEIVE,1,20
美格某模組:+MIPRTCP=1,20
17 close socket
該命令不同模組可能不一樣,但同樣易辨別出來。
例:
移遠某模組:AT+QICLOSE=1
SIMCOM某模組:AT+NETCLOSE=1
美格某模組:AT+MIPCLOSE=1