为什么需要Scratch Link
从我之前的一些二次开发文章可以看出,Scratch 3.0不论是在线版本还是离线的桌面版都是一个Web App,出于安全性等等因素的考虑,Web App对系统接口的访问有着非常严格的限制,比如硬件文件读写、蓝牙或串口外设等等。
那要连接Wedo等外设怎么办呢?Scratch的解决方案是这样的,另准备一个本地程序,这个程序可以使用系统API来访问蓝牙以及串口外设,同时,它又是一个服务器程序,可以通过wss协议与Web app通信,这样它就成了Scratch 与 外设的桥梁(所谓的wss,就是安全的WebSocket通信协议)。下图是一个简单的示意图:
(实际上新版的Chrome浏览器已经支持 Web Serial API 和 Web Bluetooth API,所以或许再过一段时间就不需要蹩脚的Scratch Link了)
为什么安装了Scratch Link还是用不了
这是因为在scratch-vm的代码设定的wss通信地址是:wss://device-manager.scratch.mit.edu:20110/scratch/ble,也就是需要通过scratch官网旅游一圈再回到我们的Scratch Link,但是 scratch.mit.edu 已经被墙了,没梯子这路就断了。
所以网络可以看到一些修改host的方案,把device-manager.scratch.mit.edu 解析到本地127.0.0.1
怎么解决
从二次开发的角度来说,代码是直接暴露给开发人员的,完全没有必要再用device-manager.scratch.mit.edu:20110 这样的地址,直接改成 127.0.0.1 它不香吗。
Kidsline就是这么做的,同时为了避免与官网Scratch Link端口冲突,我们把通信端口改为了20111
Kidsline的一些小细节
Scratch link编译后的运行文件很小 1M+,通常是需要单独安装的,在整 Kidsline 时,我把Scratch Link直接打包到了Kidsline的安装包中,取名为Kidslink,这样一次安装即可搞定,也省了什么版本不匹配等等的问题。
同时,我在菜单栏里增加了一个启动项,需要时点击菜单就好。
想折腾直接修改源码,不想折腾的可以下载我们的Kidsline。点这里下载页