1

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

这是微比特代码:

from microbit import *

uart.init(baudrate=115200)

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

我的计算机代码,一个带有 pyserial 的 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__':
    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'。我可以编写代码来组合文本,但我可能会失去同步。

4

1 回答 1

1

我在 Linux 和 microbit 上使用 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 中不可用。

于 2020-02-03T16:57:13.323 回答