MicroBlocks 与其他编程语言的互操作

5,406 阅读5分钟

MicroBlocks 和其他编程语言之间进行消息通信,以达到互操作的目的。

简单演示

先来看一个简单的视频演示。

Sorry, your browser doesn't support embedded videos.

视频演示涉及的程序如下:

以上演示了 MicroBlocksScratch 如何通过消息通信来互操作,具体而言:

  1. 先在 MicroBlocks 中编程,完成后断开连接
  2. 之后将设备连接到 Scratch 的 MicroBlocks 插件。
    • 对你的心智模型来说,就好像你可以在 Scratch 和 MicroBlocks 中相互广播和接收消息。

这个互操作是通用的,意味着可以在 Scratch 里控制 MicroBlocks 已经支持的数十种设备(还在持续增多)!

MicroBlocks 不仅可以与 Scratch 进行互操作,也可以与大多数编程语言互操作。文末记录了目前已经实现互操作库的编程语言(MicroBlocks 社区优先关注在教育领域重要的编程语言)

消息流向图

以下是 MicroBlocks 与 Scratch 进行消息通信的消息流向图:

具体使用,参考 CodeLab Scratch MicroBlocks 插件文档

为何要让 MicroBlocks 与其他编程语言进行互操作

我们以 MicroBlocks 与 Scratch 的互操作为例,阐述这样做的意义,其中的道理也适用于 Scratch 之外的其他编程语言。

我们将分别从以下两个角度来讨论互操作的意义。

对 MicroBlocks 的意义

MicroBlocks 专注于硬件编程/物理计算,它让板子可以离线运行,这对于许多实际应用和竞赛(如巡线赛车)是必要的。这使得 MicroBlocks 更多考虑"下位机"编程。

通过 MicroBlocks 与 Scratch 的互操作,Scratch 可以成为硬件设备的"上位机", 对设备进行"指挥"。 由于 Scratch 运行在电脑里,没有内存和计算性能的限制,在Scratch里制作控制界面(GUI程序)是非常容易的。

这样一来,我们就可以利用 Scratch 的优势,为 MicroBlocks 设备提供出色的 GUI 界面。(同样的道理,也可以利用 Python 的深度学习生态来增强 MicroBlocks 程序)

对 Scratch 的意义

图形化编程领域喜欢魔改 Scratch 来支持硬件编程,这导致许多灾难性的后果,这个糟糕的策略破坏了可理解性,让学习者陷入云里雾里。 我在CodeLab 纪事比较图形化硬件编程平台 做了批评。

MicroBlocks 的创始人,也正是 Scratch 的联合创始人兼首席架构师 John Maloney 并未采用扩展 Scratch 的思路来支持硬件编程,他深知这里边的陷阱和天花板,所以 John Maloney 启动了新项目 MicroBlocks 作为图形化硬件编程的解决方案。

MicroBlocks 因其出色的设计,拥有极高的灵活性和可扩展性,甚至可以由一个孩子而不是工程师来自由扩展它!目前为止 MicroBlocks 社区已经支持了丰富的编程板、传感器和执行器, 几乎涵盖主流领域的大多数类别!

image.png

由于互操作是完全通用的(只是广播消息), 意味着 MicroBlocks 生态的海量硬件都可以直接为 Scratch 所用(发消息即可!)。 未来新加入 MicroBlocks 生态的任何设备,也都可以直接在 Scratch 里使用,不需要任何额外工作!

它是如何工作的?

基于消息通信的互操作是如何工作的呢?

这主要是得益于 MicroBlocks 出色的架构设计。 它的虚拟机支持强大的消息协议: Microblocks Serial Protocol (version 2.09), 该协议描述了消息如何在开发板 与 Microblocks IDE 流动,以及消息的其他可能流向。

MicroBlocks IDE 就是基于这个消息协议与硬件设备(虚拟机)通信的。 所以理论上,我们可以在任何编程语言中做到 MicroBlocks IDE 做到的所有事情, 包括但不限于: 将脚本下载到板子; 启动/停止脚本; 跟踪脚本的运行状态; 广播消息...

因此,你不只可以让其他编程语言与 MicroBlocks 进行互操作,甚至可以设计一个新的编程语言来与虚拟机交互,新的语言可以采用文本代码而不是积木块。只需将你设计的文本语言翻译成 MicroBlocks 虚拟机指令,然后通过消息其发送到板子即可。 MicroBlocks 的架构设计为我们打开了巨大的可能性空间!

更多细节可参考:

一些有趣的方向

  • Adapter microbit radio迁移到 MicroBlocks,在相同的功能下,可以移除对 Adapter 的依赖,这样能很好地提高开箱可用性,只需要一个浏览器即可!
    • 制作有趣的魔杖 🪄 : 将"魔杖 micro:bit" 的陀螺仪信息实时发给"中转站 microbit", Python 与"中转站 microbit" 实时互操作,这样就可以利用 Python 社区的深度学习库来实时计算"魔杖 micro:bit" 的手势!
    • 制作 Scratch 演讲翻页笔(或者通过 pyautogui 库控制 PPT),而这个演讲装置本身又是很好的话题,用于在演讲中引出编程的实际作用。
  • 在你最喜欢的编程语言中,制作通信库,来让它与 MicroBlocks 互操作,可参考我的 Python 实现: MicroBlocks Python 库
  • ...

更多编程语言

MicroBlocks 与 Python 的互操作

消息流向图

具体使用,参考 MicroBlocks Python 库

MicroBlocks 与 Snap! 的互操作

具体使用,参考 MicroBlocks and Snap! Communication with Messages

FAQ

Scratch(或 Python) 与 MicroBlocks 互操作时,是否总是要连接数据线

是的。

现阶段进行互操作时,必须连接数据线。未来有可能通过蓝牙或 wifi 提供无线支持。(理论上可行)

如果你希望使用无线的方式让 Scratch(或 Python) 与 MicroBlocks 交互, 可以考虑 MQTT 库(需要板子支持wifi,推荐 ESP32)。MicroBlocksCodeLab Scratch 都已支持 MQTT 协议。

参考