我有以下示例代码:
import serial
ser = serial.Serial('/dev/ttyUSB1', 115200, timeout=5)
ser.write("AT\r")
response = ser.readline()
ser.write(chr(26))
ser.close()
print response
我的目标是发送 AT 命令并获得答案确定。
PySerial readline()的文档说明了在找到换行符之前读取收到的数据,问题是我的打印件什么也没有返回。
我确定在 AT 命令后,3G调制解调器发送给我的响应为确定。有人知道你无法找到答案的原因吗?
PS:使用像CuteCom这样的程序,我得到了设备正常工作的确认,并且它响应了AT命令。
答案 0 :(得分:3)
为了补充问题评论,请尝试此操作,看看是否有任何变化:
import serial
ser = serial.Serial('/dev/ttyUSB1', 115200, timeout=5)
ser.write("AT\r")
response = ser.read(2)
print response
ser.close()
如果一切正常,则将“\ r”添加到write()并将ser.read(2)
替换为ser.readline()
,并将超时值再次设置为零。
答案 1 :(得分:3)
收到代码问题:
import serial
ser = serial.Serial(port='COM1', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonoff=False, rtscts=False, dsrdtr=False)
cmd="AT\r"
ser.write(cmd.encode())
msg=ser.read(64)
print(msg)
输出没问题:)
答案 2 :(得分:1)
它是多行输出调制解调器返回到您的应用程序的内容。将需要多个readline调用来收集所有输出(OK不是第一个响应行,也不是第二个响应行,如果readline调用太快将丢失消息的尾部)。请考虑使用以下代码(答案var将是完整的调制解调器回复占位符):
`
import serial, time
modem = serial.Serial(port='/dev/ttyHS0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonoff=False, rtscts=False, dsrdtr=False)
cmd = "AT\r"
modem.write(cmd.encode())
answer = ""
read_timeout = 0.1
quantity = modem.in_waiting
while True:
if quantity > 0:
answer += modem.read(quantity)
else:
# read_timeout is depends on port speed
# with following formula it works:
# 0.1 sec + 1.0 sec / baud rate (bits per second) * 10.0 bits (per character) * 10.0 times
# example for 115200 baud rate:
# 0.1 + 1.0 / 115200 * 10.0 * 10.0 ~ 0.1 sec
time.sleep(read_timeout)
quantity = modem.in_waiting
if quantity == 0:
break
`