You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AT+CSQ读取GSM调制解调器信号强度及输出8原因咨询

问题解答

代码有效性结论

这段代码无法实现GSM调制解调器信号强度/质量的读取。

输出结果为8的原因

pyserial库中ser.write()方法的返回值是成功写入串口的字节总数,和调制解调器返回的信号结果没有任何关系。你发送的字符串AT+CSQ=?编码为ASCII格式后,字符总长度刚好是8,所以打印输出的8仅代表你成功向串口写入了8字节的数据。

现有代码的核心问题

  • AT指令格式不符合规范:所有标准GSM调制解调器的AT指令必须以回车符\r作为指令结尾,设备只有收到结尾符才会判定一条指令接收完成并开始执行,你当前发送的内容没有添加\r,设备根本不会识别响应这条指令。
  • 缺少响应读取逻辑:代码仅实现了向串口写入数据的发送动作,完全没有编写读取串口返回数据的逻辑,自然无法获取设备返回的信号强度结果。
  • 指令使用错误:AT+CSQ=?是AT指令的测试命令,作用是查询设备支持的CSQ参数取值范围,并非查询当前实时信号强度的执行命令;要获取当前信号值,需要发送AT+CSQ指令。

修正参考代码

from time import sleep
import serial

ser = serial.Serial()
ser.port = "COM10"
ser.baudrate = 9600
ser.timeout = 1  # 设置读取超时,避免程序永久阻塞
ser.open()

# 清空串口残留的输入输出缓冲区
ser.flushInput()
ser.flushOutput()

# 发送符合规范的信号查询指令,必须加\r结尾
ser.write('AT+CSQ\r'.encode("ascii"))
# 预留少量时间等待设备响应
sleep(0.5)
# 读取缓冲区中所有的返回数据
response = ser.read(ser.inWaiting()).decode("ascii")
print("CSQ指令返回内容:", response)

ser.close()

正常情况下设备会返回类似+CSQ: 20,0格式的结果,其中第一个数值为RSSI信号强度,取值范围0-31对应不同信号等级,数值越大信号越好,99代表信号无法检测;第二个数值为信道误码率。

内容的提问来源于stack exchange,提问作者Les Jetskii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:03:23