Skip to content

Python 环境入门

SPIKE App 内置 Python 编辑器,hub 上跑的是 MicroPython(精简版 Python)。本篇讲清环境和"第一个 Python 程序",以及和 Word Blocks 的关系。

为什么升级到 Python

Word BlocksPython
上手需要学语法
循环速度较慢快(巡线采样更密,更稳)
函数My Blocks,无返回值真函数,有返回值
数学运算积木嵌套,写复杂公式很痛苦一行表达式
PID、数据结构勉强自然
版本管理二进制项目文件纯文本,可以用 git

建议路线:Word Blocks 打完基础(理解马达/传感器/控制流)再来,概念全部通用,只是换个写法。

新建 Python 项目

SPIKE App → 新建项目 → 选 Python。左边是代码编辑器,右边控制台(Console)会显示 print() 输出和错误信息——这是 Word Blocks 没有的调试利器。

本站使用 SPIKE App 3 的 API

乐高在 SPIKE App 3 里重写了 Python API(import motor 风格)。网上很多旧教程用的是 SPIKE 2 的 from spike import PrimeHub 风格,两者不兼容。跟着本站学,认准 import motor / from hub import port 的写法。

第一个程序

python
import runloop
from hub import light_matrix, sound

async def main():
    await light_matrix.write("Hello")   # 滚动显示文字,显示完才继续
    sound.beep(440, 300, 100)           # 440 Hz 响 0.3 秒
    print("done")                       # 输出到控制台

runloop.run(main())

点运行,灯光矩阵滚动 "Hello",响一声,控制台打印 done。

必须理解的骨架:async / await / runloop

SPIKE 3 的 Python 是异步风格,每个程序都是同一个骨架:

python
import runloop

async def main():
    ...   # 你的程序写在这里

runloop.run(main())

三条规则,现在先记住,进阶篇再深究原理:

  1. 程序主体写在 async def main(): 里。
  2. "做完才继续"的动作(转够度数、显示完文字)前面加 await
  3. 最后一行 runloop.run(main()) 启动程序。

await motor.run_for_degrees(...) = Word Blocks 里的阻塞积木"转动 x 度";去掉 await ≈ "启动"积木,马达照样开始转,只是程序不等它。注意这只适用于 LEGO 原生 API——你自己定义的 async 函数不加 await 是不会执行的,进阶篇细讲。

python
value = 42
print("reflection =", value)

控制台能连续打印传感器读值,比灯光矩阵显示数字高效得多:

python
import runloop, color_sensor
from hub import port

async def main():
    while True:
        print(color_sensor.reflection(port.C))
        await runloop.sleep_ms(100)

runloop.run(main())

标定阈值从此不用盯着 5x5 点阵认数字了。

练习

  1. 跑通第一个程序。
  2. 故意把 light_matrix 拼错,运行,读一遍控制台的报错信息——学会读错误是 Python 第一技能。
  3. 用上面的循环打印你的颜色传感器黑/白读值,和 Word Blocks 时代标定的值对比。

下一课:API 基础,Python 的语法速成 + SPIKE 模块总览。