Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;AT+;CGPSINFO“;命令可用于Socat,但不能用于PySerial_Python_Serial Port_Pyserial_Socat - Fatal编程技术网

Python &引用;AT+;CGPSINFO“;命令可用于Socat,但不能用于PySerial

Python &引用;AT+;CGPSINFO“;命令可用于Socat,但不能用于PySerial,python,serial-port,pyserial,socat,Python,Serial Port,Pyserial,Socat,以下Socat命令根据需要返回GPS数据: echo 'AT+CGPSINFO' | socat - /dev/ttyUSB3,crnl +CGPSINFO: 5100.505778,N,11404.437214,W,031120,175538.0,1076.7,0.0,348.0 OK 现在我想用PySerial在Python中做同样的事情,但是我得到了一个错误 from serial import Serial import time def sleep_for_x_seconds(

以下Socat命令根据需要返回GPS数据:

echo 'AT+CGPSINFO' | socat - /dev/ttyUSB3,crnl

+CGPSINFO: 5100.505778,N,11404.437214,W,031120,175538.0,1076.7,0.0,348.0

OK
现在我想用PySerial在Python中做同样的事情,但是我得到了一个错误

from serial import Serial
import time

def sleep_for_x_seconds(sleep_secs=0.25):
    print(f"Sleeping for {sleep_secs} seconds...")
    time.sleep(sleep_secs)

def write_to_modem(modem, to_write, sleep=True, sleep_secs=0.25, readlines=True):
    print(f"Writing {to_write}...")
    modem.write(to_write)
    if sleep:
        sleep_for_x_seconds(sleep_secs)
    if readlines:
        print(modem.readlines())

sleep_secs = 0.25
port = "/dev/ttyUSB3"
print(f"Initializing modem on port '{port}'...")
modem = Serial()
modem.port = port
modem.timeout = 1  # How long to wait when reading lines
modem.writeTimeout = 1
sleep_for_x_seconds(sleep_secs)

print("Opening modem and flushing input and output...")
modem.open()
modem.flushInput()
modem.flushOutput()
sleep_for_x_seconds(sleep_secs)

# This first command returns [b'\r\n', b'OK\r\n']
write_to_modem(modem, b"AT\r\n", sleep=True, sleep_secs=sleep_secs, readlines=True)

# This second command returns [b'\r\n', b'ERROR\r\n'] for some reason... why?
write_to_modem(modem, b"AT^CGPSINFO=1\r\n", sleep=True, sleep_secs=sleep_secs, readlines=True)

modem.flushInput()
modem.close()
以下是运行上述程序的完整输出日志(为了可读性增加了换行符):

为什么在运行PySerial时,在Socat中运行以下命令时会出现错误“[b'\r\n',b'error\r\n']”

echo 'AT+CGPSINFO' | socat - /dev/ttyUSB3,crnl

+CGPSINFO: 5100.505778,N,11404.437214,W,031120,175538.0,1076.7,0.0,348.0

OK

正如@meuh在评论中所显示的,我使用的是
^
而不是
+
,因此将其更改为
b“AT+CGPSINFO=1\r\n”
解决了问题…

程序正在发送
AT^CGPSINFO=1
,这与
echo AT+CGPSINFO
不同?@meuh是的,这绝对是个问题。我一定是从某处复制并粘贴了^。。。多么简单的解决方案——谢谢!
echo 'AT+CGPSINFO' | socat - /dev/ttyUSB3,crnl

+CGPSINFO: 5100.505778,N,11404.437214,W,031120,175538.0,1076.7,0.0,348.0

OK