从我的计算机发送到 Raspberry Pi 的字节数组在传输后发生变化

Byte Array sent from my computer to Raspberry Pi changes after transmission

我正在尝试将字节数组数据从我的计算机发送到我的 Rpi,我必须使用字节数组来完成这项任务。如下图第一行代码(我私人计算机中的代码)所示,我创建字节数组并使用 ttyUSB0 发送它。我还在我的计算机中解码了相同的数据包,它给出了预期的结果。下图中给出了预期的答案。在我的 RPi 中,我使用 ser.read 来读取我发送的行,但如最后一张图片所示,当我发送数据时,整个包都发生了变化。当我在 RPi 上复制它时,我希望看到与第一张图片相同的输出。

import struct
import serial

ser = serial.Serial('/dev/ttyUSB0')
packet = bytearray()  # Creating the canvas of the packet
packet.append(0xA9)  # Header parameter
packet.append(0x01)  # Valid value
zero_array = bytearray(4)  # To compensate taken data

elements_array = [3.0, 4.0, 5.0, 6.0, 1.0]

for element in elements_array:  # Place data in packet
            if element != 0.0:
                print(element)
                out = bytearray(struct.pack("f", element))  # Convert float value to byte
                print(out)
                packet.extend(out)  # Place packet canvas
            else:
                packet.extend(zero_array)
                print(":")
packet.append(0xB8)  # Footer parameter


ser.write(packet)
print(packet)
print(struct.unpack('b', packet[(0):(1)]))
print(struct.unpack('b', packet[(1):(2)]))
print(struct.unpack('f', packet[(2):(6)]))
print(struct.unpack('f', packet[(6):(10)]))
print(struct.unpack('f', packet[(10):(14)]))
print(struct.unpack('f', packet[(14):(18)]))
print(struct.unpack('f', packet[(18):(22)]))
print(struct.unpack('b', packet[(22):(23)]))


import time
import serial
import struct
import ctypes
import numpy as np

from struct import *


ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 57600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout = 10

)

packet = ser.read(23)
if(packet):
print(packet)
print(struct.unpack('b', packet[0:1]))
print(struct.unpack('b', packet[1:2]))
print(struct.unpack('f', packet[2:6]))
print(struct.unpack('f', packet[6:10]))
print(struct.unpack('f', packet[10:14]))
print(struct.unpack('f', packet[14:18]))
print(struct.unpack('f', packet[18:22]))
print(struct.unpack('b', packet[22:23]))

正如其他人在评论中所建议的,我的波特率有问题。为了解决这个问题,我添加了以下行:

ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 57600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout = 10

我发件人的脚本解决了这个问题。确保两台计算机具有相同的值。