前言

由于科技节项目和 @yinxi 的演示项目都使用到了 Sphero RVR, 于是我想接管 RVR.

CodeLab Adapter 之前已经接入了 RVR (通过蓝牙),windows 下连接蓝牙有时会连不上(跟 RVR 的蓝牙服务本身也有关),体验不好。最近我们都很喜欢 MicroBlocks, 于是我想在 MicroBlocks 里实现 Sphero RVR 驱动.

思路

查看 Sphero RVR 的官方文档, 了解到 Sphero RVR 已经有 MicroPython 驱动MakeCode 驱动了。

于是我打算将 MicroPython 驱动 翻译到 MicroBlocks,然后作为一个库(library) 提交给官方。

阅读 MicroPython 驱动代码,可以发现是通过 UART 来通信。我试着使用 MicroBlocks 的串口积木来实现目标。

困境

结果遇到了困难,在 MicroBlocks 对 micro:bit 编程, 使用串口积木发送的数据,和通过 USB 端口收到的数据(comtool)不一致。 我将问题提交到了 MicroBlocks 项目 issue ,得到 MicroBlocks 几位作者的热心帮助。

热心帮助

从 @Turgut Guneysu 那儿了解到 USB 端口服务于 MicroBlocks IDE 本身的功能(协议细节)。 @John Maloney 提议将 micro:bit V2 的 0/1 pin 用于 UART 引脚,然后直接用引脚接管 RVR(因为树莓派就是这样驱动 RVR 的)。

我采取了 @John Maloney 的建议,顺利在 MicroBlocks 里完成了 Sphero RVR 的驱动。并提了 Pull Request, @John Maloney 说下个 MicroBlocks 版本(Pilot release)会内置我的 RVR 驱动。

意外的是,使用这种方式,比使用 UART over USB 更优!因为不需要反复插拔 USB 来调试,可以一直将板子连在电脑上,实时编程!当然,需要把 RVR 轮子垫高,不然它会跑掉:)

在 MicroBlocks 的下个版本发布之前,如果你想提前使用 Sphero RVR 库,可手动下载: Sphero-RVR.ubl

可以从这里加载自定义的代码库:

硬件连接

硬件连接比较简单,将控制板(我是用的是 micro:bit V2)和 RVR 的 UART 引脚连在一起即可(RX/TX交叉), 可参考以下信息

Sphero RVR 代码库

我将 Sphero RVR 驱动构建为一个 MicroBlocks 代码库(library)

如果你之前用过 MakeCode 或 Scratch,可以把一个 「MicroBlocks 代码库」看作一个 MakeCode/Scratch 扩展(extension)。

但不同在于, MicroBlocks 代码库是在 MicroBlocks 平台上构建的!不需要绕到底层去实现!这是受 Smalltalk 影响产生特质

接入更多硬件

由于接入新硬件工作非常典型(为新的硬件写驱动库),围绕这块我想多写几句。

MicroBlocks 支持主流的硬件协议: I2C、UART、SPI 等 ,所以我们可以把海量硬件接入 MicroBlocks 中。

MicroBlocks 平台还有个非常有趣的特性,大多数驱动是通用的!在无需修改任何代码的情况下,可以运行在多种硬件上!诸如我构建的 Sphero RVR 驱动,不仅可以用于 micro:bit, 也可用于任何已接入 MicroBlocks 且带有 UART 支持的板子。而大多数板子都有 UART 支持!

如果你打算基于这些主流硬件协议,将更多硬件接入到 MicroBlocks,可展开Sphero-RVR.ubl积木块,查看它的定义(无需进入「下层」)。这是在 MicroBlocks 深入学习的极佳方式:

以上代码翻译自 MicroPython 驱动

我在 MicroBlocks 里的大多数技能都是这样学会的,通过理解正在使用的功能块的原理(展开定义)来学习。在同个编程环境中,可以进入到不同的抽象层里学习!这同样源自Smalltalk 的理念:

如果一个系统要为创造精神服务,它必须能被个体完全理解。

小技巧

MicroBlocks 代码的积木形式和文本形式可以精确地双向转化。所以你愿意,也可以使用代码编辑器编辑文本代码。

当我想导出 Sphero-RVR.ubl 时,想调整积木顺序,发现目前积木 IDE 里做不到。我是在文本代码里做的。

演示

我们来看看使用 Sphero RVR 代码库驱动的 demo:

@John Maloney 很喜欢这个演示,把视频转给了 Micro:bit 基金会的 Katie Henry。

Katie loved the video and asks if it would be okay to share it with other at the Micro:bit Foundation and Sphero team. Is that okay? She can cc you if you like. – John Maloney

很开心大家喜欢这些工作 :)

炫耀

@John Maloney 是我最喜欢的计算机科学家之一。

对计算机抱有跟当前领域不同的愿景, 追随 个人计算(Personal Computing) 的理想, 希望成为 Alan Kay、Daniel Ingalls、John Maloney 和 Bret Victor 的后继者 – 种瓜 aboutme

我跟 John 分享了我在 MicroBlocks 上做的更多项目,很开心得到他的认同。

Your videos are really amazing! Are you a teacher? If so, what ages do you teach? Your blog posts are really amazing! – John Maloney

也很开心 @Bernat Romagosa 喜欢「玩给你看」里的所有视频

WOW! I’ve watched all of your videos and I loved them all. – Bernat Romagosa

几年前设计 CodeLab Adapter 时,想法来源之一就是 @Bernat Romagosa 的 S4A 项目

参考