【发布时间】:2020-01-06 20:48:13
【问题描述】:
我正在尝试在 Raspberry 上使用 Python3 与串行设备进行通信。协议如下:
- 主机发送命令字节(包含地址和数据类型)
- 设备回显命令字节
- 主机发送操作数字节(更多数据类型信息)
- 设备回显操作数字节以及数据的第一个字节
- 主机回显数据的第一个字节。设备发送第二个字节的数据。重复直到 5 个总数据字节
设备应该只接收和发送二进制文件(根据我一直在参考的过时手册),但是当我要求第二个数据字节时,我得到“\t”或其他一些奇怪的字符。命令、操作数和第一个数据字节似乎都可以正常工作。但在那之后,我开始得到一些意想不到的角色。
设备实际上是否以二进制以外的方式进行通信?
我的编码天赋仍处于初级阶段,因此请忽略过度使用打印命令。我是新手,请随意挑剔..
import serial
import time
import binascii
ser = serial.Serial(
port='/dev/ttyUSB0',\
baudrate=9600,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout = 2)
command=b"\x92"
operand =b"\x02"
sleepy = 0.2
data = bytearray()
while True:
ser.write(command) #send command byte
time.sleep(sleepy)
print(ser.read(1)) #recieve command byte
time.sleep(sleepy)
ser.write(operand) #send operand byte
time.sleep(sleepy)
echo = ser.read(2)#recieve operand byte & first data byte
print(echo)
time.sleep(sleepy)
data.append(echo[1])
ser.write(bytearray([echo[-1]])) #send first data byte echo
time.sleep(sleepy)
echo = ser.read(10) #recieve second data byte
print(echo)
time.sleep(sleepy)
data.append(echo[-1])
print(echo[-1])
ser.write(bytearray([echo[-1]])) #send second data byte echo
time.sleep(sleepy)
echo = ser.read(10) #recieve third data byte
print(echo)
time.sleep(sleepy)
data.append(echo[-1])
print(echo[-1])
ser.write(bytearray([echo[-1]])) #send third data byte echo
time.sleep(sleepy)
echo = ser.read(10) #recieve fourth data byte
print(echo)
time.sleep(sleepy)
data.append(echo[-1])
print(echo[-1])
ser.write(bytearray([echo[-1]])) #send fourth data byte echo
time.sleep(sleepy)
echo = ser.read(10) #recieve 5th data byte
print(echo)
time.sleep(sleepy)
data.append(echo[-1])
print(echo[-1])
print(data)
ser.close()
例如,当我运行它时,我得到数据数组“(b'\x04\x08hT^')”。 我总是得到第一个 \x04 但之后的字符是随机的。
【问题讨论】:
标签: python raspberry-pi binary pyserial serial-communication