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

本文介绍了在Python中如何向串口写入十六进制的bytes数据,包括使用bytearray直接写入固定命令和通过转换十六进制字符串为bytes数据再写入。两种方法都可以实现向串口发送十六进制命令,因为bytes和bytearray在写入串口时效果相同。
摘要由CSDN通过智能技术生成

在与一些仪器设备进行通讯时,有些时候需要写入十六进制的命令,是不能直接发送字符串的方式,那么我们如何向端口写入十六进制的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写到串口结果是一样的。

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值