LiteOS通信模組教程03-AT指令玩轉NB-IoT通信


1. 環境准備

硬件准備

  • 小熊派開發板

BearPi-IoT

  • NB-IoT通信模組(BC35-G)

BC35-G 是一款高性能、低功耗的多頻段 NB-IoT 無線通信模塊,支持 B1/B3/B8/B5/B20/B28 頻段,在設計和AT指令上與BC95兼容。

BC35-G

小熊派NB-IoT通信擴展模組的波特率為9600bps。

軟件准備

  • QCOM串口助手

QCOM串口助手

文檔准備

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

切換開關

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

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

2. NB-IoT入網AT指令

AT

指令:AT

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

示例:

AT

OK

獲取信號強度指示

指令:AT+CSQ

功能:返回從 UE 接收到的信號強度指示 <rssi> 和信道誤碼率 <ber>,其中第一個值rssi應當在0-31之間,如果為99則表示信號無法檢測,第二個參數ber因為模組當前不支持,所以始終為99。

示例:

+CSQ:26,99

OK

查詢網絡注冊狀態

指令:AT+CEREG?

功能:查詢當前 EPS 網絡注冊狀態,該指令返回的第一個參數為0則表示禁止網絡注冊URC,第二個參數表示網絡注冊狀態,1表示已注冊本地網,5表示已注冊漫游網絡,其余值則表示注冊失敗。

示例:

+CEREG:0,1

OK

查詢網絡是否被激活

指令:AT+CGATT?

功能:該命令用於查詢當前是否將 UE 附着於 PS 域,返回值為1則表示已附着,即網絡激活成功。

示例:

+CGATT:1

OK

查詢模塊的 IP 地址

指令:AT+CGPADDR

功能:該命令用於查詢模組當前的ip地址。

示例:

+CGPADDR:0,10.44.108.10
OK

3. 基於 UDP 協議連接遠程服務器通信實例

3.1. 禁用IoT平台的注冊功能

由於NB-IoT模組可以直接對接IoT平台,所以在單獨測試使用UDP連接時,需要在激活網絡成功之后,在獲取ip地址之前,關閉IoT平台注冊功能

使用如下命令禁止該功能:

AT+QREGSWT=2

3.2. 搭建遠程UDP服務器

首先我們需要搭建一個UDP服務器,有兩種方式:

  • 在服務器上使用Python、Java、C#等語言自行編寫服務器程序;
  • 在本地PC上使用網絡調試助手開啟UDP服務器;

因為 NB-IoT 模組直接注冊的是公網ip地址,所以這里我們使用第一種方式,在Linux服務器上運行一個Python編寫的UDP測試服務器:

本地PC使用的是局域網,公網不可以直接根據ip地址訪問到本PC,需要進行內網穿透,不推薦使用。

這里的Python程序如下:

# udp-server.py
from socket import *

host = ''
port = 8000

# 創建server socket
server_socket = socket(AF_INET,SOCK_DGRAM)

# 綁定socket監聽地址
server_addr = (host,port)
server_socket.bind(server_addr)

print('UDP Server Start...')

# 處理連接請求
while(True):
    # 接收客戶端的數據
    data, addr = server_socket.recvfrom(1024)
    print("Receive from %s:%s" % addr % data)
    if data == b"quit":
        server_socket.sendto(b"Good bye!\n", addr)
        continue
    server_socket.sendto(b"Hello,udp client!\n", addr)

運行:

python3 udp-server.py

效果如下:

UDP服務器程序

3.3. 模組與服務器通信

創建Socket

使用AT命令連接UDP服務器,首先需要創建一個 UDP 類型的 Socket,創建socket的指令如下:

AT+NSOCR=<type>,<protocol>,<listen port>

其中第一個參數是socket類型,DGRAM表示UDP,STREAM表示UDP;第二個參數表示協議類型,UDP 為 17, UDP 為 6,最后一個參數指定socket使用的本地端口,如果為0則表示隨機分配。

所以創建UDP socket的示例如下:

AT+NSOCR=DGRAM,17,0

1

OK

模組向服務器發送消息

指令:

AT+NSOST=<socket>,<remote_addr>,<remote_port>,<length>,<data>

其中第一個參數是由 AT+NSOCR 返回的 Socket 編號,第二個參數是UDP服務器ip地址,也可以使用域名,第三個參數是UDP服務器開啟監聽的端口,第四個是發送數據的長度,最后一個是要發送的十六進制數據。

注意:該命令僅限UDP scoket連接服務器使用,並且所有參數均無引號!

示例:

AT+NSOST=1,122.51.89.94,8000,4,30313233

1,4

OK

發送之后,在服務器端也可以看到:

服務器收到消息成功

模組接收服務器消息

模組發送數據到服務器后,服務器會自動發送消息,模組會打印出收到信息的提示:

+NSONMI:1,18

該信息表示編號為1的socket收到了18字節的數據。

可以使用如下命令查看收到的數據,第一個參數是socket編號,第二個參數是查詢的數據長度:

AT+NSORF=<socket>,<req_length>

查看剛剛收到的數據:

AT+NSORF=1,18

1,122.51.89.94,8000,18,48656C6C6F2C75647020636C69656E74210A,0

OK

其中收到的數據為倒數第二個參數,是十六進制格式:

48656C6C6F2C75647020636C69656E74210A

使用在線工具將數據轉化為字符串即可:

轉換結果

關閉scoket

通信完畢之后,可以使用下面的命令關閉最開始創建的socket:

AT+NSOCL=<socket>

示例:

AT+NSOCL=1

OK


免責聲明!

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



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