2. AT指令基础通信
任务说明
本案例要求通过串口向LTE Cat1/Cat4模块发送标准AT指令,并正确解析模块返回的响应与最终结果码,以此验证模块串口通信链路正常。需要完成的任务闭环为:编写一个可独立运行的串口AT指令交互程序,发送AT与AT+CGMM两条指令,分别验证模块基本响应能力与型号查询功能,并依据返回码判定通信是否成功。
实现方案
采用Python的pyserial库实现串口通信。程序流程为:打开指定串口→发送AT指令→读取并解析响应→根据结果码输出判定结论。AT指令以\r\n结尾,模块返回的最终结果码为OK或ERROR,中间可能包含若干信息行。解析逻辑以空行或结果码为边界提取完整响应。
import serial
import time
def send_at_command(ser, command, timeout=3):
"""发送AT指令并读取完整响应"""
ser.reset_input_buffer()
ser.write((command + '\r\n').encode('ascii'))
time.sleep(0.1)
response = b''
start_time = time.time()
while time.time() - start_time < timeout:
if ser.in_waiting > 0:
response += ser.read(ser.in_waiting)
# 检测到最终结果码则停止读取
if b'OK\r\n' in response or b'ERROR\r\n' in response:
break
else:
time.sleep(0.05)
return response.decode('ascii', errors='replace')
def parse_at_response(response):
"""解析AT指令响应,返回(信息行列表, 结果码)"""
lines = response.strip().split('\r\n')
info_lines = []
result_code = None
for line in lines:
line = line.strip()
if not line:
continue
if line in ('OK', 'ERROR'):
result_code = line
else:
info_lines.append(line)
return info_lines, result_code
def main():
# 串口配置 - 根据实际模块连接修改
PORT = 'COM3' # Windows示例;Linux下如'/dev/ttyUSB0'
BAUD = 115200 # 常用AT指令波特率
try:
ser = serial.Serial(PORT, BAUD, timeout=1)
print(f'已打开串口 {PORT} @ {BAUD}')
except serial.SerialException as e:
print(f'串口打开失败: {e}')
return
# 测试1: 基础AT指令
print('\n--- 测试1: 发送 AT ---')
resp1 = send_at_command(ser, 'AT')
info1, code1 = parse_at_response(resp1)
print(f'原始响应: {repr(resp1)}')
print(f'信息行: {info1}')
print(f'结果码: {code1}')
# 测试2: 查询模块型号
print('\n--- 测试2: 发送 AT+CGMM ---')
resp2 = send_at_command(ser, 'AT+CGMM')
info2, code2 = parse_at_response(resp2)
print(f'原始响应: {repr(resp2)}')
print(f'信息行: {info2}')
print(f'结果码: {code2}')
# 判定结果
if code1 == 'OK' and code2 == 'OK':
print('\n[判定] 两条指令均返回OK,模块通信正常。')
if info2:
print(f'[型号] 模块型号: {info2[0]}')
else:
print('\n[判定] 存在非OK返回,请检查接线、串口号或模块供电。')
ser.close()
print('串口已关闭')
if __name__ == '__main__':
main()
运行与验证
依赖安装:执行pip install pyserial安装串口库。
参数修改:根据实际模块连接的串口号修改PORT变量(Windows为COM口,Linux为/dev/ttyUSB*或/dev/ttyS*),波特率通常为115200或9600,需与模块当前配置一致。
执行方式:在终端运行python at_basic.py,观察输出。
判定标准:若两条指令的解析结果码均为OK,且AT+CGMM返回一行非空信息行(模块型号字符串),则判定模块通信正常,案例通过。若出现ERROR或超时无响应,需检查串口连接、模块供电及AT波特率是否匹配。
AT指令格式说明
AT指令以字符AT开头(可大写或小写),以回车换行(\r\n)结束。模块响应由信息行和最终结果码组成,结果码OK表示指令执行成功,ERROR表示失败。本案例中AT指令用于测试串口链路是否畅通,AT+CGMM用于查询模块型号标识。若模块返回ERROR,常见原因包括:指令格式错误、模块未注册网络(部分查询指令需要网络就绪)、或当前AT命令集不支持该指令。