Я повторил ваши результаты, используя python 3.5 на Linux и микробите.
Я немного изменил код Python. Пожалуйста, найдите это ниже:
import serial
import serial.tools.list_ports as list_ports
def find_microbit_comport():
ports = list(list_ports.comports())
for p in ports:
if (p.pid == 516) and (p.vid == 3368):
return str(p.device)
if __name__ == '__main__':
print('running code')
ser = serial.Serial()
ser.baudrate = 115200
ser.timeout = 1
ser.port = find_microbit_comport()
ser.open()
ser.write('hello there\n')
ser.close()
ser.open()
text = ser.readline()
while (1):
print(text.decode('utf-8'))
text = ser.readline()
ser.close()
Попробуйте это как микро python на вашем микробите:
from microbit import *
uart.init(baudrate=115200)
msg_str = 'out: '.strip()
while True:
new_byte = (uart.read(1))
if new_byte == None:
continue
new_char = str(new_byte, 'UTF-8')
msg_str += new_char
if ("\n" in msg_str):
print(msg_str)
msg_str = ''
Вывод:
running code
out:hello there
Это читает один байт в то время, пока символ новой строки не будет найден, добавляя каждый байт к выходной строке. Опасность заключается в том, что символ перевода строки удаляется при передаче через последовательный порт. Это надежно по проводному соединению. При использовании беспроводной передачи символы легко повреждаются или пропускаются.
Я хотел бы настроить параметр тайм-аута uart.init, чтобы убедиться, что это решит проблему. Это не доступно в микро python на микробите в настоящее время.