You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PySerial发送字节数组?求Python版Kotlin类似实现

Python通过PySerial向Arduino发送字节数组的正确方法

现有代码问题分析

你提供的代码存在几个不符合需求的地方:

  • ser.write(json.dumps(data) + '\n'):发送的是JSON格式的字符串(比如"[49,56,48]"),而非原始字节数组,Arduino需要额外解析JSON才能获取数值,这不是直接发送字节的方式。
  • ser.write(str('R').encode()):虽然能发送正确的字节(b'R'),但str('R')属于冗余操作,直接用b'R'或'R'.encode()更简洁。
  • ser.write(str(80).encode()):发送的是字符串"80"的字节(b'80'),如果你的需求是发送十进制80对应的单个字节(即ASCII字符'P'),这就不符合预期;若只是发送"80"字符串则没问题,但通常控制Arduino需要的是单个字节指令。

对应Kotlin写法的Python实现

1. 直接构造字节数组(对应Kotlin byteArrayOf(49,56,48))

Python中直接将整数列表转为bytes对象即可,这是PySerialwrite()方法接受的buffer类型:

data = [49, 56, 48]
ser.write(bytes(data))  # 发送的是字节序列b'180',对应十进制[49,56,48]

2. 单个字符转字节(对应Kotlin byteArrayOf('O'.code.toByte()))

有两种简洁方式:

# 方式1:直接用字节面值
ser.write(b'O')  # 等价于发送十进制79对应的字节

# 方式2:通过字符编码转换
ser.write(bytes([ord('O')]))  # ord('O')获取字符的ASCII码,再转为字节

3. 字符串转字节数组(对应Kotlin "70".toByteArray())

如果是将字符串转为字节序列,直接用字符串的encode()方法或字节面值:

ser.write(b'70')  # 等价于发送十进制[56,48]的字节
# 或
ser.write("70".encode())

如果是将数字转为对应的单个字节(比如数字70对应ASCII字符'F'),则用:

ser.write(bytes([70]))  # 发送十进制70对应的字节

修正后的完整代码示例

import serial

ser = serial.Serial('/dev/tty.usbmodem14401', 9600)

# 发送整数列表对应的字节数组
data = [49, 56, 48]
ser.write(bytes(data))

# 发送单个字符'R'对应的字节
ser.write(b'R')

# 发送数字80对应的单个字节(ASCII 'P')
ser.write(bytes([80]))

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:19:54