使用pySerial读取响应AT命令

时间:2014-05-08 03:06:43

标签: python pyserial

我有以下示例代码:

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命令。

3 个答案:

答案 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

`