介绍 OctoStudio

OctoStudio 改变了年轻人使用手机和平板电脑的方式,使他们能够随时随地创作自己的故事和游戏。孩子们可以拍照和录制声音,用编码块将它们变为现实,并将他们的项目发送给朋友和家人。

OctoStudio 由 MIT Media Lab 终身幼儿园研究小组开发;这个小组还创建了 Scratch: 世界上最流行的儿童编程语言。 OctoStudio 完全免费,没有任何广告。

创始团队在新闻稿里提到他们的初衷:

在世界各地,越来越多的儿童和青少年可以使用移动设备,但许多人花费大把时间被动观看视频和社交媒体。相比之下,OctoStudio 邀请年轻人使用手机和平板电脑创造性地表达自己,并在此过程中学习计算和解决问题的技能。

“我们设计 OctoStudio 的目的是为年轻人提供随时随地创建项目的机会” 负责 OctoStudio 项目的研究科学家 Natalie Rusk 说道 “让他们有机会发展自己的兴趣、表达自己的想法并与他人分享。”

就我而言,OctoStudio 是迄今为止第一个让我愿意在手机里编程的应用。OctoStudio 使得在手机上编程变得简单而充满乐趣。它充分利用了手机的特点,又通过出色地设计,让用户得以轻松愉快地使用这些功能。

OctoStudio 让我觉得 “哇 这就是使用手机编程的方式!"。而不是 “我没有电脑,只好暂时迁就手机这个笨拙的替代品”,大多数手机上的编程产品都是后者。

破解它 !

Information wants to be free – wiki

OctoStudio 如此有趣,以至于我们迫不及待把玩它的各种功能,想突破它的极限。

黑客们有这样一种怪癖,当他们对一个系统着迷,而这个系统又不开放时,黑客们首先想到的是: 破解它。通过破解给予系统自由,好像解救一个被束缚的人。这是他们表达敬意的一种方式,黑客从不花时间去破解三流系统,甚至连脚本小子都不屑这样做,不然就会被其他人瞧不起。

思路

破解之前,需要观察和把玩目标系统,寻找切入点。

在 OctoStudio 的 ... 分类里,有这样两块积木:

  • beam to phones (给手机发送信号)
  • wait for beam (等待信号)

使用这两块积木,可以让不同手机上的 OctoStudio 互相发送消息。

如果你之前使用过 micro:bit, 它有点像 micro:bit radio

如果我们能够弄懂这两块积木是如何工作的(很容易猜到是基于蓝牙), 我们就能够让其他系统(诸如Python、MicroBlocks)与之通信,互相发消息, 做到这点,就能极大扩展 OctoStudio 的能力: Python、MicroBlocks 生态的所有的软硬件都能够被 OctoStudio 指挥调度,而 OctoStudio 接管的所有手机功能,也能够被 Python、MicroBlocks 使用!

先玩起来吧 !

提醒: 本文基于桥接器的方法比较旧, 更推荐 MicroBlocks ❤️ OctoStudio: 将手机用作 MicroBlocks 的传感器与执行器

尽管我迫不及待想与你分享我是如何与 OctoStudio 斗智斗勇, 在这个过程中 ChatGPT 又如何慷慨地为我承担脏活累活…

但是,有些读者只是想知道 “具体怎么做”, 而不想要听我絮叨一个黑客的英雄之旅。

先玩起来吧!感兴趣的读者可以阅读之后的破解过程,对技术细节没兴趣的读者,读完这部分,就不用往下读啦!

让我们一起来实现视频中的案例:

在这个案例中,摇晃手机将切换风扇的开关(如果没有风扇,可以控制其他的开关,诸如开关 MicroBlocks 中的用户 LED )。

这个案例包含 3 个方面的工作:

  1. 在 OctoStudio 中编程 (目前仅支持 iPhone 和 iPad)
  2. 在 MicroBlocks 中编程
  3. 运行桥接器(它是通用的,无需编程)

1. 在 OctoStudio 中编程

使用 OctoStudio 编写了一个程序: 当手机摇晃时,发送 “爱心”(heart) 信号。

国外的 MicroBlocks 用户可能会阅读这篇文章, 以下分别提供程序的中文和英文版本:

你可以自己编写这个程序,也可以点击下载 到 OctoStudio。

2. 在 MicroBlocks 中编程

需要一块支持 wifi 功能的板子, 我使用的是 ESP32, 但是任何支持 wifi 功能的板子都行(m5stack, pico w…)

程序等待接收 wifi Radio 信号,当收到 OctoStudio 发出的 “爱心” 信号时,切换风扇的开关。

OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号? 下边的第 3 部分会讲到。

以下是 MicroBlocsks 程序的中文和英文版本:

3. 运行桥接器

前边提到:

OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号

我们制作了一个 OctoStudio-MicroBlocks bridge, 这个桥接器是一个 Python 库,它会把 OctoStudio 发出的信号转为 MicroBlocks Wifi Radio 信号。

以下是运行运行桥接器的步骤:

  1. 确保你的电脑开启蓝牙
    • Windows 需要 Windows10 或者 Windows11
  2. 确保你的电脑上装有 Python (Python 3.10 或者更高版本)
  3. 使用 Python 安装桥接器库(octostudio) : python -m pip install octostudio
    • MacOS 系统对权限的管理非常严格, 确保 Python (terminal) 可以访问到蓝牙。
  4. 在命令行中运行桥接器: octostudio-microblocks-bridge

桥接器是通用的,不需要对它编程,只需运行起来即可。

局域网里只需要有一台电脑(诸如树莓派)运行了桥接器,它就能够转发给局域网里的所有 MicroBlocks 设备!

现在可以开始玩啦, 修改 OctoStudio 和 MicroBlocks 中的积木,去探索你的奇思妙想吧。

提醒:

  1. octostudio 是普通的 Python 库,也可以将其用于 Python 与 OctoStudio 的通信,具体使用方式参考项目页面

分析与破解 OctoStudio

以下部分记录破解的过程。

目前只做到了解码 OctoStudio 往外发出的消息

还做不到往 OctoStudio 里发送消息,但这方面已经取得了不错的进展,我会在这里会分享目前掌握的一些信息。

以下是我分析 BLE 信号, 使用的一些工具,感兴趣的读者可以使用它们自行探索:

OctoStudio 往外发出的消息

对应 OctoStudio 的 beam to phones (给手机发送信号) 积木。

要解码 beam to phones 往外发出的信号,我们需要找到工具来接收这个信号,然后观察它的模式。通过与 ChatGPT 交流,我们知道它很可能基于 BLE(低功耗蓝牙) 广播。于是我打算采用 bleak 来观察 BLE 蓝牙信号。

具体的实现参考这段脚本

往 OctoStudio 里发送消息

对应 OctoStudio 的 wait for beam (等待信号) 积木。

基本的想法是,模仿 OctoStudio 往外发出的消息。既然不同手机上的 OctoStudio 能够发送蓝牙消息,我们伪装成其中的一台设备发送消息就好了。

目前这部分我直接实现在了 MicroBlocks 中(暂未在桥接器里实现,在微控制器中实现比在电脑上实现简单很多。如果你想与 OctoStudio 进行双向通信,参考MicroBlocks ❤️ OctoStudio

最小原理演示参考beam-to-phone.ino

兼容性问题

如果你遇到兼容性问题,无法使用,欢迎提 issue

以下是我的测试环境, 供调试时参考:

  • iPhone X(iOS 16.1) 运行 OctoStudio (1.0.1)
  • Android 10(MI 8) 运行 OctoStudio (1.0.0)
  • MacOS(MacBook Air M1, 2020, MacOS 13.4.1)
    • Python 3.10.10
    • Python 依赖库:
      • bleak==0.21.1
  • Windows 11
    • Python 3.11.6
      • bleak==0.21.1

更多

OctoStudio & Python

安装依赖:

pip install octostudio

1
2
3
4
5
6
7
8
from octostudio import OctoStudio

def on_message(shape_id):
    print(shape_id)

octo = OctoStudio()
octo.on_message = on_message
octo.start()

OctoStudio & Scratch

安装依赖:

pip install paho-mqtt octostudio

在命令行里,运行桥接器: octostudio-scratch-bridge

打开示例项目

OctoStudio & Snap!

安装依赖:

pip install paho-mqtt octostudio

在命令行里,运行桥接器: octostudio-snap-bridge

打开示例项目

参考