通过串口发送位串
send bitstring through serial port
我一直在尝试弄清楚如何使用串行模块通过 python3 发送位串。最初,当我尝试 serial.write 它时,它正在发送 1 和 0 的 ascii 代码。我是 python 的新手,尽管进行了研究,但没有找到任何有帮助的答案现在好几天了,试图理解。我正在尝试通过串行端口将位串发送到 arduino,它将解释它们并将它们显示在 LED 矩阵上。任何帮助将不胜感激,谢谢。
Serial只知道,bytes的概念,所以发送前需要把bits转换成bytes。
如果您有一个位串,例如“01000001”作为 python 字符串,您首先需要将其转换为一个 int。您可以使用 int() 构造函数执行此操作,指定基数 2:
as_int = int("01000001", 2) # = 65
然后你可以把它变成一个ASCII字符来发送:
as_character = chr(as_int) # = "A"
然后您可以通过串行连接发送字符。
如果您的位串超过一个字节,则需要先将其分成 8 个一组,然后再将其转换为整数。例如:
bitstring = "0101010001101000011010010111001100100000011010010111001100100000011000010010000001101101011001010111001101110011011000010110011101100101"
string_array = [bitstring[i:i+8] for i in range(0, len(bitstring), 8)]
byte_string = bytes([int(s, 2) for s in string_array])
在这种情况下,我将它组装成字节串而不是普通字符串,因为在 python3 中,pyserial 模块需要一个字节串。
这是一个列表理解较少的版本:
bitstring = "0101010001101000011010010111001100100000011010010111001100100000011000010010000001101101011001010111001101110011011000010110011101100101"
string_array = []
normal_string = ""
for offset in range(0, len(bitstring), 8):
string_array.append(bitstring[offset:offset+8])
for string in string_array:
value = int(string, 2)
normal_string += chr(value)
byte_string = normal_string.encode("ASCII")
我一直在尝试弄清楚如何使用串行模块通过 python3 发送位串。最初,当我尝试 serial.write 它时,它正在发送 1 和 0 的 ascii 代码。我是 python 的新手,尽管进行了研究,但没有找到任何有帮助的答案现在好几天了,试图理解。我正在尝试通过串行端口将位串发送到 arduino,它将解释它们并将它们显示在 LED 矩阵上。任何帮助将不胜感激,谢谢。
Serial只知道,bytes的概念,所以发送前需要把bits转换成bytes。
如果您有一个位串,例如“01000001”作为 python 字符串,您首先需要将其转换为一个 int。您可以使用 int() 构造函数执行此操作,指定基数 2:
as_int = int("01000001", 2) # = 65
然后你可以把它变成一个ASCII字符来发送:
as_character = chr(as_int) # = "A"
然后您可以通过串行连接发送字符。
如果您的位串超过一个字节,则需要先将其分成 8 个一组,然后再将其转换为整数。例如:
bitstring = "0101010001101000011010010111001100100000011010010111001100100000011000010010000001101101011001010111001101110011011000010110011101100101"
string_array = [bitstring[i:i+8] for i in range(0, len(bitstring), 8)]
byte_string = bytes([int(s, 2) for s in string_array])
在这种情况下,我将它组装成字节串而不是普通字符串,因为在 python3 中,pyserial 模块需要一个字节串。
这是一个列表理解较少的版本:
bitstring = "0101010001101000011010010111001100100000011010010111001100100000011000010010000001101101011001010111001101110011011000010110011101100101"
string_array = []
normal_string = ""
for offset in range(0, len(bitstring), 8):
string_array.append(bitstring[offset:offset+8])
for string in string_array:
value = int(string, 2)
normal_string += chr(value)
byte_string = normal_string.encode("ASCII")