microbit 串行通信将文本拆分为行

microbit serial communication splits text into lines

我是 microbit 的初学者,我尝试从不同的 tutorials/code 示例中复制一些代码。我只是想在计算机和 microbit 之间建立串行通信。我的计划是让 microbit 只回显它收到的每一行,然后暂时将其发回。但是线条是分开的,我不确定是微比特还是电脑在做分裂。我在两台不同的电脑上试过,结果相同。

这里是微比特代码:

from microbit import *

uart.init(baudrate=115200)

msg_str = ""
while True:
    msg_bytes = uart.readline()
    if (msg_bytes):
        print(msg_bytes)

我的电脑代码,一个 Python 带有 pyserial 的程序:

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__':
    ser = serial.Serial()
    ser.baudrate = 115200
    ser.timeout = 1
    ser.port = find_microbit_comport()
    ser.open()
    ser.write(b'testing')
    text = ser.readline()
    while text != b'':
        print(text.decode('utf-8'))
        text = ser.readline()
    ser.close()

我遇到的问题是它打印出这个:

b'te'

b'sting'

我原以为它会用一个词打印 b'testing'。我可以编写代码来组合文本,但我可能会失去同步。

我在 Linux 上使用 python 3.5 和微比特复制了您的结果。

我稍微修改了 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()

在你的 microbit 上试试这个作为 micropython:

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 超时参数,看看是否可以解决问题。目前在 microbit 上的 micropython 中不可用。