Python如何向串口写入十六进制的数据(实测OK)

在与一些仪器设备进行通讯时,有些时候需要写入十六进制的命令,是不能直接发送字符串的方式,那么我们如何向端口写入十六进制的bytes数据呢?

写入十六进制数据

  • 如果只是已知的少数几个命令,我们可以hardcode方式去写入串口, 如下:
import serial

# Connect to Device.
device = serial.Serial(
    port='/dev/cu.usbserial-FTAWJMLQ',
    baudrate=57600,
    bytesize=8,
    parity='N',
    stopbits=1,
    timeout=5,
    write_timeout=5,
)

# Set DTR home.
device.write(bytearray([0x00, 0x10, 0x02, 0x01, 0x13]))

注意:
上面使用的bytearray()方法接受的这个数组,数组内容必须是十六进制的数,而不是十六进制的字符串,否则就会抛出类型出错的异常


  • 如果存在很多个命令,上面的方式就会带来很多不便;而且我们最常用到的命令类型都是字符串,那么我们就需要将十六进制的字符串先转换成十六进制的bytes,然后再写入,如下:
... # init device as before
hexStr = "0010020113"

# convert hex to bytes
bytes_hex = bytes.fromhex(hexStr)

device.write(bytes_hex)

# Alternative method
device.write(bytearray(bytes_hex))

为什么上面两个方法,一个写入的是bytes,另外一个写个的是bytearray,这两种方式都可以呢?

因为bytes是byte的序列,bytearray除了显示的类型和bytes是不一样的,数据是一致的,serial.write()方法发送data,并返回发送字节数。如果bytes和bytearray可用,则接受其作为参数;否则接受str作为参数。所以bytes和bytearray写到串口结果是一样的。

  • 2
    点赞
  • 13
    收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 11

打赏作者

Felix-Zhao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值