【问题标题】:Sending hexadecimal or ASCII value stored in a variable using pyserial使用pyserial发送存储在变量中的十六进制或ASCII值
【发布时间】:2016-03-12 06:11:02
【问题描述】:

我试图使用 pyserial 通过串口发送一个包含十六进制值的字节。十六进制值必须在一个变量中(以便我可以在发送之前进行一些操作)。示例代码将解释我的意图:

import serial  
com=serial.Serial('COM1')  
a_var=64
a_var=a_var+1
com.write(a_var)  #This of course throws error

我想在另一边收到“A”或 0x41。我可以使用

发送十六进制
    com.write(b'\x41') 

但不使用变量。将其转换为字符串或字符或对字符串进行编码没有帮助。我正在使用 python 3.5。

谢谢

【问题讨论】:

    标签: python serial-port hex ascii pyserial


    【解决方案1】:

    起初,您的变量名称选择不是最佳的。 input 是一个内置函数,你可以隐藏它。

    有很多方法可以将bytes 放入变量中:

    to_send = b'A'
    to_send = b'\x41'
    to_send = bytes([65])
    

    您将了解如何使用 ASCII 字符、十六进制数字的转义序列和整数列表。

    现在通过发送

    com.write(to_send)
    

    【讨论】:

    • 这个变量名只是一个例子。我用过另一个。无论如何,我会编辑它。
    • 但这并不能达到拥有变量的目的。我想在发送之前对数据做一些加法和减法。然而 bytearray([x]) 成功了。它是可变的。我更改了索引 0 处的值。
    【解决方案2】:

    bytearray 可用于发送字节(作为 hex 或 ascii)。它们是可变的,因此可以进行数值操作。可以使用它发送任意数量的字节。

    import serial
    
    com=serial.Serial('COM2')
    elements=[65,67,69,71]      #Create an array of your choice
    a_var=bytearray(elements)   #Create byte array of it
    com.write(a_var[0:3])       #Write desired elements at serial port
    
    a_var[0]=a_var[0]+1         #Do your mathematical manipulation
    
    com.write(a_var[0:1])       #Write again as desired
    com.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多