Python pyserial变量

2024-10-01 07:48:15 发布

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

我正在向设备发送一个字节(“\x2b”),并将接收1个echo字节加上3个字节的数据(“\x2b\x??\x??\x??)。我使用.replace(“2b”,“”,4)来去除回显字节。我需要将接收到的3个十六进制字节更改为int(16),并将它们命名为3个不同的变量,以便在计算中一次分别调用一个。这是我到目前为止的情况。在

    import serial
    import os

    ser = serial.Serial(port="COM17", baudrate=9600)
    ser.open()
    ser.write("\x2b")
    print int(ser.readline(4).encode("hex").replace("2b", "", 4), 16)
    ser.close()

    os.system("pause")

Tags: 数据importecho字节osportserial情况
2条回答

没有“自然”转换来将3字节流转换为3(?)int16(又名short)数字。在

所以你必须更加具体:

  • 是否要将字节转换为int8?当然,将得到的数字视为int16(因为它们将适合)
  • 是否要有符号/无符号输出?在
  • 如果你确实有多字节数(例如int16),你是用大的还是小的?在

在任何情况下,struct包可以为您进行转换:

import struct

# read 4 bytes, discard the first one, so we get a list of 3 bytes
inputdata = ser.readline(4)[1:]

# the following parses 'inputdata' as 3 `uint8` numbers
a,b,c = struct.unpack('BBB', inputdata)

使用struct模块从字节字符串中检索任意二进制数据:

import serial
import os
import struct

ser = serial.Serial(port="COM17", baudrate=9600)
ser.open()
ser.write("\x2b")
response = ser.readline(4)
echo, a, b, c = struct.unpack("4B", response)
print ("Response numbers: {:02x}, {:02x}, {:02x}".format(a, b, c))
ser.close()

附带说明:避免在程序中使用os.system("pause")。这是一些人的一个可怕的习惯,当程序运行完毕时,Windows-DOS提示符会保持打开状态,但这是(1)对于一个在macosx和Linux上运行的程序来说,它是(1)只在Windows上运行,(2)为一个普通的操作创建一个完整的其他进程。在

您可以在Python中添加一个简单的input调用,要求用户改为按<enter>

(最后一行):

^{pr2}$

相关问题 更多 >