如何处理Raspberry pi中的串行读取值

2024-09-24 06:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试在raspberry和我的STM32板之间进行串行通信(固件使用MBEDOS)。在

现在,我可以从我的覆盆子到微控制器进行串行写入,并且成功了。在

但是,我想尝试从微控制器到树莓写一些东西,树莓应该会处理它。但是,它似乎没有做到这一点。在

树莓的密码很简单:

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],因为我注意到当我们打印串行数据时,它将打印:

^{pr2}$

因此,我决定使用x[2]。在

在微控制器部分,我使用了:

if(butn == 1) {
        // raspi.putc('e');
        raspi.printf("eeeeeee");
        swo.printf("e is printed");
    }

其中butn是用户按钮。我已经试过使用.putc('e'),但它也是一样的。在

我该如何处理这个问题?在

谢谢你!!在


Tags: importifserial固件raspberry树莓serraspi
1条回答
网友
1楼 · 发布于 2024-09-24 06:25:26

代码中的问题是Serial.readline()返回一个bytes对象,而不是字符串。这就是为什么打印时会看到b。在

现在,使用bytes对象建立索引不计算出现在其字符串中的b和' 表示;所以如果你想要第一个字符,你应该使用x[0]。但是,当你在bytes对象中使用索引时,你不会得到一个字符,而是你所请求的特定字节的数字表示。在

x = b'eeeee'
print x[0]

>>> 101

令人惊讶的是,101是“e”的ascii码。在

你需要把x[0]投给一个角色。结果是:

^{pr2}$

相关问题 更多 >