通过串口发送比特串

时间:2018-10-27 21:08:05

标签: python python-3.x arduino bitstring

我一直在尝试找出如何使用串行模块通过python 3发送位串。最初,当我尝试进行serial.write时,它发送的是1和0的ascii代码。我是python的新手,尽管发现了很多天并试图了解。我正在尝试通过串行端口将比特串发送到arduino,它将解释它们并将它们显示在LED矩阵上。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

串行仅了解字节的概念,因此您需要在发送之前将位转换为字节。

如果您有位字符串(例如“ 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")