从我的计算机发送到 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
我发件人的脚本解决了这个问题。确保两台计算机具有相同的值。
我正在尝试将字节数组数据从我的计算机发送到我的 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
我发件人的脚本解决了这个问题。确保两台计算机具有相同的值。