首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >"AT+CGPSINFO“命令适用于Socat,但不适用于PySerial

"AT+CGPSINFO“命令适用于Socat,但不适用于PySerial
EN

Stack Overflow用户
提问于 2020-11-04 02:19:22
回答 1查看 158关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
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语言中做同样的事情,但是我得到了一个错误。

代码语言:javascript
代码运行次数:0
运行
复制
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()

下面是运行上述程序的完整输出日志(为了可读性,添加了换行符):

代码语言:javascript
代码运行次数:0
运行
复制
Initializing modem on port '/dev/ttyUSB3'...
Sleeping for 0.25 seconds...

Opening modem and flushing input and output...
Sleeping for 0.25 seconds...

Writing b'AT\r\n'...
Sleeping for 0.25 seconds...
[b'\r\n', b'OK\r\n']

Writing b'AT^CGPSINFO=1\r\n'...
Sleeping for 0.25 seconds...
[b'\r\n', b'ERROR\r\n']

为什么在Socat中正常运行以下命令时,在运行PySerial时会出现错误"b'\r\n',b' error \r\n'“?

代码语言:javascript
代码运行次数:0
运行
复制
echo 'AT+CGPSINFO' | socat - /dev/ttyUSB3,crnl

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

OK
EN

Stack Overflow用户

回答已采纳

发布于 2020-11-04 07:14:29

正如@meuh在评论中显示的那样,我使用的是^而不是+,所以将其改为b"AT+CGPSINFO=1\r\n"就解决了这个问题……

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64668376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档