【问题标题】:send bitstring through serial port通过串口发送位串
【发布时间】:2018-10-27 21:08:05
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x arduino bitstring


    【解决方案1】:

    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")
    

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 2011-06-15
      • 2013-09-09
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多