当前位置: 首页 > 知识库问答 >
问题:

使用PySerial从串行/usb转换数据

秋建义
2023-03-14

我有一个UBlox接收器连接到我的电脑,我试图阅读它使用PySerial,但我是新的python,希望得到一些澄清/帮助了解数据。

我的代码如下所示:

import serial
# open the connection port
connection = serial.Serial('/dev/ttyACM0', 9600)
# open a file to print the data. I am doing this to make
# sure it is working
file1 = open('output_file', 'wb+')
# All messages from ublox receivers end with a carriage return
# and a newline 
msg = connection.readline()
# print the message to the file
print >> file1, msg

我在文件中得到什么,当我打印msg的“类型”时,它是一个列表:

\x3\x3\x10 10 10 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\x10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 \ \ \x10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#\xe0\x07\x01\x17\x15237\x04\x00\x00\xd6\xb9\xff\xff\x03\x01\n']

[“\x1a\x0c\x04\x19'y\x00$\xf7\xff\xff\x1a\x1d\x04\x01\x00\x007\x00\x00\x00\x02\x1f\x0c\x01\x00:\x00\x00\x00\x00\x00\x00\x00\x01\r\x07

为了解释/解码ublox消息,有两种格式类型。一些消息采用NMEA格式(基本上以逗号分隔)

$MSG, 1, 2, 3, 4

其中其他消息是直十六进制的,其中每个字节或一组字节代表一些信息

[AA BB CC DD EE]

所以我的问题是:有没有一种方法可以将数据从串行连接解释/转换为可读或更可用的格式,这样我就可以实际处理消息了。正如我所说,我对python是新手,更习惯于C风格的字符串或字符数组

'

共有1个答案

卓致远
2023-03-14

典型的解析任务。在这种情况下,使标记化分为两个阶段可能是最简单的:

  • 读取数据,直到您遇到消息边界(您没有提供关于如何识别它的足够信息)
  • 将已读消息拆分为有意义的部分
    • 对于类型1,可能是re.split (", *",文本)
    • 对于2型,不需要

    关于为什么serial.serial.readline返回一个列表。我查阅了源代码-serial.serialreadline委托给io.IOBase,它的源代码确实表明它应该通过testring返回

    因此,该函数可能会在代码中被某些内容覆盖。例如,print connection.readlineprint serial.serial.readline显示什么?

 类似资料:
  • 如标题所示,我使用的是一个Arduino,它沿串行端口输出数据。它的产出如下: 120 1.23 170 2.54 210 2.32 左栏是以毫秒为单位的时间,右栏是0到5V之间的电压值。它们被一个空格隔开。编辑:似乎stackoverflow不允许我以表格形式打印,所以为了清楚起见,我有120个空间1.23\换行符170个空间2.54等等。我正在使用的Arduino草图: 现在在python方面

  • 我想先写串口。为此,我使用usb到串行ftdi电缆。电缆连接到COM4。运行64位Windows 7 a) 使用RXTX项目。http://rxtx.qbang.org/wiki/index.php/Main_Page 为了使用RXTX,我试着按照这些说明去做 下载rxtx-2.1-7-bins-r2。zip 解压缩它 复制RXTX序列。dll转换为c:\program files\java\jr

  • 问题内容: 我将Arduino连接到运行循环的计算机,每100毫秒通过串行端口将值发送回计算机。 我想制作一个Python脚本,该脚本仅每隔几秒钟从串行端口读取一次,因此我希望它仅查看Arduino发送的最新消息。 您如何在Pyserial中做到这一点? 这是我尝试的无效代码。它顺序读取行。 问题答案: 也许我误会了您的问题,但是由于它是一条串行线路,因此您必须按顺序读取Arduino发送的所有内

  • 我正在进行转换,在我将输入定义为数组之前,它工作正常。我当前的(工作!)示例是:INPUT 使用此JOLT规范: 输出是: 这很完美,但是:我真正期望的输入是这样的: 我需要这样的输出: 我将在每个数组对象中接收“trainerName”,但我只需要使用一个。 你能帮我找出解决办法吗?我正在寻找几种解决方案,但找不到适合此示例的解决方案。 非常感谢提前!贝斯!

  • 问题内容: 我有一个Python程序,该程序通过 PySerial 模块从串行端口读取数据。我需要牢记的两个条件是:我不知道会有多少数据到达,并且我也不知道何时需要数据。 基于此,我提出了以下代码段: 因此,此代码将永远循环以从串行端口获取数据。我们最多可以存储500个字符,然后通过设置一个标志来警告主循环。如果没有数据,我们将回到睡眠状态并等待。 该代码正在运行,但是我不喜欢5s超时。我需要它是

  • 我有一个表,它有一个主键列“gid”,它的类型是“Integer NOT NULL”。我想把它转换成“Serial NOT NULL”,这样我就可以在这个表中插入一些值。我使用以下命令将其转换为串行: 此命令将整数转换为串行。但是,当我在表中输入一些数据时,出现了以下错误: 错误:重复的键值违反唯一约束“pk_测试”。 请帮我解决这个问题。是否有其他方法将整数转换为串行?