Python 环境入门
SPIKE App 内置 Python 编辑器,hub 上跑的是 MicroPython(精简版 Python)。本篇讲清环境和"第一个 Python 程序",以及和 Word Blocks 的关系。
为什么升级到 Python
| Word Blocks | Python | |
|---|---|---|
| 上手 | 快 | 需要学语法 |
| 循环速度 | 较慢 | 快(巡线采样更密,更稳) |
| 函数 | 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 的写法。
第一个程序
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 是异步风格。凡是需要"等一个动作做完"的程序(几乎所有机器人程序都是),都用这个骨架;纯同步的小脚本(只 print、只亮灯)可以不用:
import runloop
async def main():
... # 你的程序写在这里
runloop.run(main())三条规则,现在先记住,进阶篇再深究原理:
- 程序主体写在
async def main():里。 - "做完才继续"的动作(转够度数、显示完文字)前面加
await。 - 最后一行
runloop.run(main())启动程序。
await motor.run_for_degrees(...) = Word Blocks 里的阻塞积木"转动 x 度";去掉 await ≈ "启动"积木,马达照样开始转,只是程序不等它。注意这只适用于 LEGO 原生 API——你自己定义的 async 函数不加 await 是不会执行的,进阶篇细讲。
print 调试
value = 42
print("reflection =", value)控制台能连续打印传感器读值,比灯光矩阵显示数字高效得多:
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 点阵认数字了。
练习
- 跑通第一个程序。
- 故意把
light_matrix拼错,运行,读一遍控制台的报错信息——学会读错误是 Python 第一技能。 - 用上面的循环打印你的颜色传感器黑/白读值,和 Word Blocks 时代标定的值对比。
下一课:API 基础,Python 的语法速成 + SPIKE 模块总览。