1. 環境準備
1.1. 硬件準備
- 小熊派開發板
- M26通信模組
1.2. 軟件準備
- QCOM串口助手
- M26通信模組測試AT命令腳本(
M26.ini
)
下載地址:https://github.com/Mculover666/QCOM_Tools_Scripts
下載之後在QCOM中導入M26測試腳本的方法如下:
文檔準備
此文檔來自於移遠官方!閱讀本教程時,關於AT指令的詳細說明請參考該文檔!
切換開關
小熊派開發板右上角的開關撥到AT-PC一端,則模組直接與PC相連,方便調試。
2. 模組信號查詢與網絡查詢AT指令
AT
指令:AT
功能:測試AT指令功能是否正常
示例:
AT
OK
AT+CPIN?
指令:AT+CPIN?
功能:查詢SIM卡是否正常,返回ready則表示SIM卡正常
示例,如果SIM卡插入成功,則返回結果爲:
AT+CPIN?
+CPIN: READY
OK
如果未插入SIM卡,則返回結果爲:
AT+CPIN?
+CME ERROR: 10
AT+CSQ
指令:AT+CSQ
功能:查詢模組的信號強度,第一個值爲0-31則正常,99爲不正常
示例:
AT+CSQ
+CSQ: 17,0
OK
AT+CREG?
指令:AT+CREG?
功能:查詢模組是否註冊上GSM網絡,+CREG:0,1 表示已註冊上本地網,+CREG:0,5表示註冊上漫遊網。
示例:
AT+CREG?
+CREG: 0,1
OK
AT+CGREG?
指令:AT+CERGE?
功能:查詢模組是否註冊上GPRS網絡,+CGREG:0,1 表示已註冊上本地網,+CGREG:0,5表示註冊上漫遊網。
示例:
AT+CGREG?
+CGREG: 0,1
OK
3. 激活移動場景,獲取ip地址
必須在查詢GPRS網絡已正常註冊網絡的情況下進行本節實驗!
AT+QIFGCNT=0
指令:AT+QIFGCNT=0
功能:配置當前場景
示例:
AT+QIFGCNT=0
OK
AT+QICSGP=1, “CMNET”
指令:AT+QICSGP=1, “CMNET”
功能:設置GPRS的APN,移動CMNET,聯通UNINET
示例:
AT+QICSGP=1, "CMNET"
OK
AT+QIMODE=0
指令:AT+QIMODE=0
功能:設置數據傳輸模式,0表示非透傳模式,1表示透傳模式
示例:
AT+QIMODE=0
OK
AT+QIDEACT
指令:AT+QIDEACT
功能:在激活GPRS場景之前先關閉GPRS場景,確保連接正確
示例:
AT+QIDEACT
DEACT OK
AT+QIREGAPP
指令:AT+QIREGAPP
功能:啓動任務並設置接入點APN、用戶名和密碼
示例:
AT+QIREGAPP
OK
AT+QIACT
指令:AT+QIACT
功能:激活移動場景
示例:
AT+QIACT
OK
AT+QILOCIP
指令:AT+QILOCIP
功能:查看模組獲取的IP地址
示例:
AT+QILOCIP
100.125.208.23
4. 基於 TCP 協議連接遠程服務器通信實例
4.1. 搭建遠程TCP服務器
首先我們需要搭建一個TCP服務器,有兩種方式:
- 在服務器上使用Python、Java、C#等語言自行編寫服務器程序;
- 在本地PC上使用網絡調試助手開啓TCP服務器;
因爲M26模組直接註冊的是公網ip地址,所以這裏我們使用第一種方式,在Linux服務器上運行一個Python編寫的tcp測試服務器:
本地PC使用的是局域網,公網不可以直接根據ip地址訪問到本PC,需要進行內網穿透,不推薦使用。
這裏的Python程序如下:
# tcp-server.py
from socket import *
host = ''
port = 8000
# 創建server socket
server_socket = socket(AF_INET,SOCK_STREAM)
# 綁定socket監聽地址
server_addr = (host,port)
server_socket.bind(server_addr)
# 開始監聽,最大允許連接數5
server_socket.listen(5)
# 處理連接請求
try:
while True:
print('waiting for connect...')
#阻塞等待客戶端的連接
client_socket, client_addr = server_socket.accept()
# 連接成功後,打印客戶端信息
print('a client connnect from:', client_addr)
while(True):
# 向客戶端發送數據
client_socket.send('Hello, client!'.encode())
# 接收客戶端的數據
data = client_socket.recv(1024)
print('recv data is ', data.decode())
# 接收到quit則關閉socket
if "quit" in data.decode():
break
# 關閉socket
client_socket.close()
server_socket.close()
print("socket closed.")
break
except:
client_socket.close()
server_socket.close()
print("socket closed.")
運行:
python3 tcp-server.py
效果如下:
4.2. 模組連接服務器
查詢ip地址:
AT+QILOCIP
100.125.208.23
使用AT命令連接TCP服務器,其中第一個參數是協議類型,“TCP”則表示使用TCP協議,第二個參數是TCP服務器ip地址,也可以使用域名,最一個參數是TCP服務器開啓監聽的端口:
AT+QIOPEN=<mode>,<IPaddress>/<domain name>,<port>
示例:
AT+QIOPEN="TCP","122.51.89.94","8000"
OK
CONNECT OK
連接之後,在服務器端也可以看到:
4.2. 模組接收消息
模組連接到服務器後,服務器會自動發送消息,模組會打印出收到的信息:
Hello, client!
4.3. 模組主動發送消息
使用如下的命令即可向TCP服務器發送消息,首先設置要發送數據的字節數,等待模組返回>
後,輸入要發送的數據即可,如果發送的數據超過了設置的n個字節,則只發送前n個字節,後面的數據被認爲是無效數據,不會發送:
AT+QISEND
>hello<0x1a>
示例:
Hello, client!AT+QISEND
> hello
SEND OK
發送成功看服務器上運行的TCP服務器是否收到:
4.4. 關閉TCP連接
通信完畢之後,可以使用下面的命令關閉TCP連接:
AT+QICLOSE
示例:
AT+QICLOSE
CLOSE OK
接收更多精彩文章及資源推送,歡迎訂閱我的微信公衆號:『mculover666』。