如何在Bash/Python中读取串行端口数据并将其转换为人类可读的格式?

2024-10-03 04:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将从串行端口接收的数据转换为人类可读的格式

如果我运行以下命令

stdbuf -o0 cat /dev/ttyS0 >/tmp/ttyS0.log

我明白了

x▒▒x▒▒▒▒▒▒▒xx▒▒x▒▒▒▒▒▒▒xx▒▒x▒▒▒▒▒▒▒xx▒▒x▒▒▒▒▒▒▒xx▒▒

如果我跑

xxd < /dev/ttyS0

我明白了

0000010: 0080 0080 0080 0080 7800 0078 f8f8 7880  ........x..x..x.
0000020: 0080 0080 0080 0080 0080 0080 7800 0078  ............x..x
0000030: f8f8 7880 0080 0080 0080 0080 0080 0080  ..x.............
0000040: 7800 0078 f8f8 7880 0080 0080 0080 0080  x..x..x.........
0000050: 0080 0080 7800 0078 f8f8 7880 0080 0080  ....x..x..x.....
0000060: 0080 0080 0080 0080 7800 0078 f8f8 7880  ........x..x..x.
0000070: 0080 0080 0080 0080 0080 0080 7800 0078  ............x..x
0000080: f8f8 7880 0080 0080 0080 0080 0080 0080  ..x.............
0000090: 7800 0078 f8f8 7880 0080 0080 0080 0080  x..x..x.........
00000a0: 0080 0080 7800 0078 f8f8 7880 0080 0080  ....x..x..x.....
00000b0: 0080 0080 0080 0080 7800 0078 f8f8 7880  ........x..x..x.
00000c0: 0080 0080 0080 0080 0080 0080 7800 0078  ............x..x

我尝试了不同的波特率,但只得到9600的响应

数据来自一个工业体重秤,我没有任何文档

范围是读取数据并将其存储在文件中

任何帮助都将不胜感激

谢谢, 克里斯

乐:我需要以人类可读的形式存储数据。我认为标尺将以测量数量和测量单位(ex-5 kg)的形式返回数据

我试过的代码

import serial
import time
import csv

ser = serial.Serial('/dev/ttyS0')
ser.flushInput()

while True:
    try:
        ser_bytes = ser.readline()
        decoded_bytes = float(ser_bytes[0:len(ser_bytes)-8].decode("utf-8"))
        print(decoded_bytes)
        with open("/tmp/test_data.csv","a") as f:
            writer = csv.writer(f,delimiter=",")
            writer.writerow([time.time(),decoded_bytes])
    except:
        print("Keyboard Interrupt")
        break

代码不返回/存储任何内容

我得到的唯一“结果”是上面的bash命令,但不知道如何将返回的数据转换为人类可读的形式


Tags: csv数据devimport命令bytestime人类