Как обработать значение последовательного чтения в Raspberry pi - PullRequest
0 голосов
/ 03 декабря 2018

Я пытался установить последовательную связь между Rasberry и моей платой STM32 (я использую MBEDOS для прошивки).

Сейчас я могу выполнять последовательную запись с моей Rasberry на микроконтроллер,и добьются успеха.

Однако я хотел попытаться записать что-то из микроконтроллера в малину, и малина должна обработать это.Но, похоже, что этого не происходит.

Код малины довольно прост:

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")

Небольшое объяснение моего кода, что я хотел сделать, когда мойМикроконтроллер отправляет «е», он должен выйти из цикла.Я использовал x [2], потому что заметил, что когда мы печатаем последовательные данные, он напечатает:

b'eeeeeee\n'

, следовательно, я решил использовать x [2].

В части микроконтроллераЯ использовал:

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

, где butn - кнопка пользователя.Я уже пытался использовать .putc ('e'), но это тоже самое.

Как я могу решить эту проблему?

Спасибо !!

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема в вашем коде в том, что Serial.readline() возвращает объект bytes, а не строку.Вот почему вы видите b, когда он печатается.

Теперь, индексирование с помощью байтовых объектов не учитывает b и ', которые появляются в его строковом представлении;поэтому, если вы хотите первый символ, вы должны использовать x[0].Однако, когда вы используете индексирование в объекте bytes, вы не получите символ, вы получите числовое представление конкретного запрошенного вами байта.

x = b'eeeee'
print x[0]

>>> 101

Неудивительно, что 101 - это выражение для 'e'..

Вам необходимо привести x [0] к персонажу.Результат будет:

while 1:
     x=ser.readline()
     if chr(x[0]) == "e":
         break         
     print x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...