是否可以使用python通过串口将值传递给microbit?

问题描述 投票:0回答:2

与您可能推荐的其他问题不同,我并不是试图让 microbit 向我发送信息,而是试图将信息发送到 microbit。

我的目标是将列表中的三个整数发送到微位,特别是通过串行端口,因为我试图尽快发送这些变量。

我完全不知道我在这里做什么,因为我能找到的所有 microbit 指南都只是从 microbit 获取信息。

我尝试进入 TeraTerm 并从那里调整变量,但 microbit 似乎无法理解变量何时通过 TeraTerm 程序更改。例如:

单位:

serial.redirect_to_usb()
colour == 0
if colour == 1:
display.show(display.HAPPY)

在 Tera Term 中,我输入:

colour = 1

什么也没发生。然而,当我输入:

colour == 1

它回复“True”。

有没有办法通过python将我的变量发送到我的microbit?我指的不仅仅是通过 TeraTerm,而是通过 python 主动自动化任务。

我目前使用的是 python 3x 和最新版本的 TeraTerm。

python variables serial-port bbc-microbit
2个回答
0
投票

您收到的回复表明您与 Microbit 已成功通信。您已将 Microbit 的 Python 提示符(又名 REPL(读取-评估-打印循环))连接到终端,并且您在其中键入的任何内容都将由 Microbit 执行。你的第一个命令

colour = 1 

将变量

colour
设置为 1,这不会返回任何响应,您的第二个命令是表达式
colour == 1
,Microbit 会计算它并告诉您是
True

你的问题是你的代码

if colour == 1:
    display.show(display.HAPPY)

仅在您最初运行时执行一次。此时

colour
为 0,因此
if
块未被调用。您所追求的是每次更改参数时再次运行该代码的方法。

做你想做的事情的最简单的方法可能是定义一个你可以调用的函数:

def update(colour):
    if colour == 1:
        display.show(display.HAPPY)

现在在终端你可以做

update(1)

并且显示将会更新。您可以扩展此

update
函数以获取更多参数并根据其值采取更多操作,和/或定义其他函数来执行不同的操作。

请注意,这些函数中的变量不会在一次调用和下一次调用之间存储。如果您需要在一次调用期间存储某些内容并在稍后的调用期间读取它,那么您将需要使用全局变量

如果您希望 Microbit 持续执行某些操作,但在串行端口侦听新数据并在数据到达时更新操作,那就有点复杂了,我认为您需要使用 Microbit

uart
对象。如果是这样,请提出另一个问题,具体描述您需要如何操作。


0
投票

此 micropython 代码使 micro:bit v1 能够响应在连接到 micro:bit 的 PC 上的串行终端上进行的按键(a、b、c)。我使用 tio 串行终端。我使用在线编辑器对 micro:bit 进行了编程: https://python.microbit.org/v/3

from microbit import *


# Code in a 'while True:' loop repeats forever
display.show(Image.CONFUSED)
while True:
    data = uart.readline()
    if data == b'a':
        display.show(Image.ARROW_E)
    if data == b'b':
        display.show(Image.ARROW_N)
    if data == b'c':
        display.show(Image.ARROW_W)
    sleep(500)

来自串口的数据以字节形式接收,因此需要使用语法指定:

b'a'

识别从串行终端发送的'a'字符。

© www.soinside.com 2019 - 2024. All rights reserved.