Python 如何在Raspberry pi中处理串行读取值
我一直在尝试在raspberry和我的STM32板之间进行串行通信(固件使用MBEDOS) 现在,我能够从我的树莓到微控制器进行串行写入,并且成功了 然而,我想尝试从微控制器写入一些东西到树莓,树莓应该处理它。但是,它似乎没有做到这一点 树莓的代码非常简单:Python 如何在Raspberry pi中处理串行读取值,python,raspberry-pi,serial-port,serial-communication,mbed,Python,Raspberry Pi,Serial Port,Serial Communication,Mbed,我一直在尝试在raspberry和我的STM32板之间进行串行通信(固件使用MBEDOS) 现在,我能够从我的树莓到微控制器进行串行写入,并且成功了 然而,我想尝试从微控制器写入一些东西到树莓,树莓应该处理它。但是,它似乎没有做到这一点 树莓的代码非常简单: import time import serial ser = serial.Serial( port='/dev/ttyUSB0', baudrate = 9600, parity=serial.PARITY_NO
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while 1:
x=ser.readline()
if x[2] == "e":
break
print x
print("stop")
对我的代码做一点解释,我想做的是当我的微控制器发送一个“e”时,它应该从循环中断。我使用了x[2],因为我注意到当我们打印串行数据时,它会打印:
b'eeeeeee\n'
因此,我决定使用x[2]
在微控制器部分,我使用了:
if(butn == 1) {
// raspi.putc('e');
raspi.printf("eeeeeee");
swo.printf("e is printed");
}
其中butn是用户按钮。我已经试过使用.putc('e'),但它也是一样的
我如何处理这个问题
谢谢 代码中的问题是
Serial.readline()
返回一个bytes
对象,而不是字符串。这就是为什么打印时会看到b
现在,使用bytes对象进行索引不会计算字符串中出现的b和
代表性;因此,如果需要第一个字符,应该使用x[0]
。但是,当您在bytes对象中使用索引时,您将无法获得字符,您将获得所请求的特定字节的数字表示形式
x = b'eeeee'
print x[0]
>>> 101
令人惊奇的是,101是“e”的ascii码
您需要将x[0]强制转换为角色。结果将是:
while 1:
x=ser.readline()
if chr(x[0]) == "e":
break
print x
嗨,巴勃罗!非常感谢你的解释!我现在明白了,我的代码现在运行良好。干杯