在Python中发送AT命令通常涉及通过串口(Serial Port)与调制解调器或其他通信设备进行交互,AT命令是调制解调器通信的标准指令集,用于控制设备功能,如拨号、短信发送、网络配置等,Python可以通过pyserial
库实现串口通信,该库提供了打开串口、发送数据、接收响应等功能,是处理AT命令的核心工具。

需要安装pyserial
库,可通过命令pip install pyserial
完成安装,编写Python代码实现AT命令的发送与接收,基本步骤包括:初始化串口、发送AT命令、读取设备响应,并根据响应结果判断操作是否成功,以下是一个简单的代码示例:
import serial def send_at_command(port, baudrate, command, timeout=1): try: # 打开串口 ser = serial.Serial(port, baudrate, timeout=timeout) # 发送AT命令(需添加回车换行符) ser.write((command + '\r\n').encode()) # 读取响应 response = ser.read_all().decode() ser.close() return response except Exception as e: return f"Error: {str(e)}" # 示例:发送AT命令检查模块是否在线 response = send_at_command('COM3', 9600, 'AT') print(response)
代码中,send_at_command
函数接收串口号、波特率、命令和超时时间作为参数,通过serial.Serial
打开串口,发送命令后读取全部响应并返回,需要注意的是,不同设备的波特率和串口号可能不同,需根据实际情况调整。
在实际应用中,AT命令的响应可能包含多行数据,需解析响应内容以获取关键信息,发送AT+CSQ
(信号质量查询)后,响应可能为+CSQ: 15,99
,需提取其中的信号强度值,部分命令可能需要多次交互或等待特定响应,可通过循环或正则表达式优化处理。
以下是常见AT命令及其功能的简要说明:

命令 | 功能描述 | 示例响应 |
---|---|---|
AT | 测试模块连接 | OK |
AT+CSQ | 查询信号质量 | +CSQ: 15,99 |
AT+CGMM | 查询模块型号 | SIM7600CE |
ATD<号码>; | 拨打电话 | OK |
AT+CMGS | 发送短信 | > [输入内容后Ctrl+Z] |
在处理复杂场景时,需考虑错误处理和超时机制,若设备未响应,可通过设置超时时间避免程序卡死;若响应包含错误信息(如ERROR
),需记录并重试命令。
相关问答FAQs:
-
Q: Python发送AT命令时,如何处理设备返回的多行响应?
A: 可通过ser.readlines()
或循环读取串口缓冲区,直到遇到特定结束符(如OK
或ERROR
)。response = "" while True: line = ser.readline().decode().strip() if line == "OK" or line == "ERROR": break response += line + "\n"
-
Q: 为什么发送AT命令后设备没有响应?
A: 可能原因包括:串口号或波特率错误、设备未正确初始化、命令格式不正确(如缺少回车换行符),建议先使用串口调试工具(如Tera Term)手动发送AT命令验证设备是否正常工作,再检查Python代码中的参数设置。(图片来源网络,侵删)