pyserial 中的 ser.write() 函数

Posted

技术标签:

【中文标题】pyserial 中的 ser.write() 函数【英文标题】:ser.write() function in pyserial 【发布时间】:2017-12-20 10:59:40 【问题描述】:

我正在尝试使用 pyserial 库将图像文件的字节数组发送到 Arduino。我正在 Arduino 中逐字节接收数据。但似乎我无法检索 Arduino 上的字节。例如它发送一串'255' Arduino 接收字节为'2'。

Python 代码:

import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, bytesize=8, timeout=0, parity=serial.PARITY_EVEN, rtscts=1)
f = open('image.jpg','rb')
l = f.read()
b = bytearray(l)
for i in range(1,len(b)):
  ser.write(str(b[i-1]))
ser.flush()
ser.close()

Arduino 代码:

char buffer ; // for incoming serial data
int length = 1;
void setup() 
  Serial.begin(115200); // opens serial port, sets data rate to 9600 bps


void loop() 
  Serial.readBytes(&buffer, length) ;
  Serial.println(buffer);

【问题讨论】:

试试你的loop函数:while(Serial.available() > 0) buffer = Serial.read(); Serial.print(buffer); 在 Python 中,您将字节 255 转换为字符串“255”,而在 Arduino 端,您尝试打印非 nul 终止的字符串。 【参考方案1】:

您的 Python 代码将数字作为 ASCII 字符串发送,而不是发送字节(这是您的 Arduino 代码所期望的......)。相反,这样做:

for i in range(1,len(b)):
  ser.write(b[i-1])

【讨论】:

以上是关于pyserial 中的 ser.write() 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pyserial 发送整数

使用pyserial发送二进制数据

PySerial 在脚本中不起作用

菜鸟之路——Python学习之串口通信(与STC89C51)源码及打包发布试水

python的串口close()函数关闭不成功

什么是 pyserial 中的 inter_byte_timeout (interCharTimeout)?