LiteOS通信模組教程02-AT指令玩轉2G通信


1. 環境准備

硬件准備

  • 小熊派開發板

BearPi-IoT

  • M26通信模組

M26通信模組

軟件准備

  • QCOM串口助手

QCOM串口助手

文檔准備

此文檔來自於移遠官方!閱讀本教程時,關於AT指令的詳細說明請參考該文檔!

切換開關

小熊派開發板右上角的開關撥到AT-PC一端,則模組直接與PC相連,方便調試。

所有工具和文檔均在『小熊派開源社區』公眾號回復“通信模組”獲取!

2. 模組信號查詢與網絡查詢AT指令

AT

指令:AT

功能:測試AT指令功能是否正常

示例:

AT

OK

AT+CPIN?

指令:AT+CPIN?

功能:查詢SIM卡是否正常,返回ready則表示SIM卡正常

示例:

AT+CPIN?

+CPIN: READY

OK

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+QIFGTCNT=0

指令:AT+QIFGTCNT=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

效果如下:

Tcp服務器程序

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM