一個NB-IoT/4G模組的AT撥號聯網流程

  在各類物聯網應用中,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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章