【问题标题】:Converting Serial data format using python使用python转换串行数据格式
【发布时间】:2017-05-15 01:51:35
【问题描述】:

我是 python 新手,目前正在从事从微控制器读取串行端口以捕获传感器数据的项目。我收到的串口数据是这样的:

[5;17H 0.029[5;40H 0.736[5;63H 9.557[7;17H 0.038[7;40H 0.001 [7;63H 0.008[9;17H-34.199[9;40H 25.800[9;63H 13.799[14;17H -4.623[14;40H 0.597[14;63H218.920[19;14H

这个串行数据实际上在左括号之前有转义序列“x1b”。我如何摆脱它们,转义序列和文本格式(5;17H ..),并逐行打印传感器数据 x、y、z 格式。谁能帮帮我..谢谢..

我用的是python序列号:

import serial
ser = serial.Serial('COM9', 115200, bytesize=8, timeout=0)

while True:
  data = ser.read(size=8).decode("utf-8")
  s = str(data)
  print(data)

ser.close() 

【问题讨论】:

  • 你能证明自己任何努力解决这个问题吗?
  • 我用 str.strip 解决了,但没有一个是可行的。将尝试使用正则表达式 .. 但不确定是否读取编码 utf-8 格式。这样做的最佳解决方案是什么?

标签: python serialization


【解决方案1】:

传感器数据记录以\033开头,例如在此拆分:

data_list = data.split('\033')
for v in data:
    print (v)

【讨论】:

  • 不,传感器数据记录在 [5;17H 和 \x1b(转义字符)之间。我确实尝试过 data.split 但它打印 ['63H211.']['5']['52\x1b', '19;'] .. 它将传感器数据字符拆分在一起......
  • UARTprintf("\033[5;17H%3d.%03d", i32IPart[0], i32FPart[0]); UARTprintf("\033[5;40H%3d.%03d", i32IPart[1], i32FPart[1]); UARTprintf("\033[5;63H%3d.%03d", i32IPart[2], i32FPart[2]); 这是来自微控制器的示例 c++ 代码打印数据。
  • 更新了我的答案以处理\033
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2023-03-08
  • 2015-01-10
  • 2020-12-15
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多