3

将新设备引入 MicroBlocks

 2 years ago
source link: http://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/new-device-microblocks-library/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

grow.png

阅读本文的你可能有这样的需求:你刚在网上买了个新设备,颜色传感器、可编程书包或者 24 路舵机控制板之类的东西。 你在 MicroBlocks 内置的积木库里,怎么也没找到这个新设备的驱动库,可你又想使用 MicroBlocks 对新设备进行编程,怎么办呢?

别着急, 这篇文章正是为你写的。

写驱动库很难吧?

为新设备写驱动库,听起来是一件吓人的事。在大多数硬件编程平台中,你需要进入 “底层” 去工作,这些平台会把用户界面打扮的漂漂亮亮,可等你一旦进入 “底层”,会发现它简直混乱得像你的卧室。

他们将材料一块块胡乱堆在一起,然后用石灰岩做外墙,使其外表光鲜 – Alan Kay 《软件: 艺术,工程,数学还是科学?》

当你在"底层"写驱动,你就不再能够使用之前学到的技能来编程,因为你现在可是在"底层"工作!今天的大多数图形化编程系统都如此,无论是 MakeCode、Scratch、node-red,还是 Mind+、慧编程、Kittenbot…

用户怎么看待这件事呢? 用户似乎应该抱怨这类平台的可扩展性很差,抱怨系统设计者没有能力打造更加一致的系统,抱怨他们根本没有理解终端用户编程的含义…

可用户通常被"底层"开发者教导说,那才是真正的编程。他们好像在说你之前用的东西只是糊弄小孩的玩意儿。这是今天计算机文化相当可悲的一面。 Bret Victor 在 The Future of Programming 里对所谓 “真正的编程” 这种无知和傲慢做了相当辛辣的讽刺。

可生长的系统

一个系统,如果希望随着时间的流逝,帮助用户成长,并且与用户一起成长,它应该认真对待可扩展性和可生长性,它应该支持终端用户轻松扩展它(Hypercard 是这类系统中的典范)。用户社区应该掌控这个系统,而不能指望工作在"底层"的开发者(他们就像垄断"识字"的"神职人员")。

MicroBlocks 正是这样可由用户轻松扩展的可生长系统。在架构设计时,它充分考虑了可生长性和可扩展性。

MicroBlocks 允许你在图形化环境构建驱动库!(另一个拥有强大扩展能力的图形化系统是伯克利的 Snap!)

你不需要进入"底层",在普通用户的编程界面里,就可直接构建新的驱动库,来驱动的新设备。

下面,我们进入操作环节。

具体而言,将新设备引入 MicroBlocks ,可分为以下三步:

  1. 弄清楚新设备使用的硬件通信协议。
  2. 在 IDE 创建自定义积木(通常是对通信协议的包装)。
  3. 将自定义积木移入新创建的库(根据需要分发它)。

接下来,让我们开始逐一讨论。

1. 弄清楚新设备使用的硬件通信协议

如果你购买的新设备有在线文档,通过查阅文档可以快速弄清通信协议。设备厂商通常会开放出主流平台的驱动(诸如 Arduino、MicroPython、JavaScript(MakeCode)), 只需要将这些驱动翻译到 MicroBlocks 中即可。顺便一提,Adafruit 开放了大量优秀的 Arduino/MicroPython 驱动库: Adafruit Github

以恩孚科技的游戏手柄(Joystick:bit V2)为例。

joystick_v2_01.png

通过查阅文档, 可以发现它简单使用了模拟信号和数字信号。它的 JavaScript(MakeCode) 驱动在这里

2. 在 IDE 创建自定义积木

弄懂了通信协议,我们就可以在 MicroBlocks IDE 创建自定义积木了。

先在设置中开启 显示高级积木:

show-adcanced-blocks.png

文档JavaScript 驱动 可以获知振动马达连接在 Pin 16 接口。

让我们创建一个自定义积木来控制震动马达。

首先点击 IDE 左侧的 我的积木:

my-blocks.png

可以看到有两个选项:

  • 新建命令积木(输出, 用于控制执行器)
  • 新建报告积木(输入,用于从传感器获取数据)

控制震动马达属于第一种。

创建命令积木, 给积木库起一个名字,并且指定它接收的参数(默认为100),这和在 Scratch 中创建自制积木几乎一样。

my-blocks-1.png

接下来,让我们参考设备文档和驱动的说明,给积木赋予实际功能:

my-blocks-2.png

至此,我们就完成了第一个自定义积木,点击它就可以让你的游戏手柄震动!

在 MicroBlocks IDE 创建自定义积木的好处是,可以复用过去在 MicroBlocks 中的所有经验。也可使用 MicroBlocks 强大的实时调试能力!这带来极大效率提升,更重要的是,整个过程非常有趣,just for fun :-)

同样道理,你可以创建新的自定义积木,来驱动游戏手柄的其他功能。

3. 将自定义积木移入新的库

当你完成驱动新设备所需的自定义积木,可能会想如何分发这些积木给其他用户,就像分发一个软件库。

将自定义积木移入新的库即可。

首先让我们在 IDE 里创建一个新的库(确保你已经开启 显示高级积木) :

new-library-1.png

我们给它起名叫 “Joystick”。

我们需要给这个新的库设置一些信息。

填写完库信息后,点击保存。

new-library-2.png

不同的颜色代表不同类型的设备,游戏手柄通常被视为一种传感器(输入设备),从用户那儿获取输入信息。当然它可能也有输出功能(诸如震动,但这不是它的主要功能)。所以我们选择紫色(输入)。

创建完 “Joystick” 库后,我们就可以把之前创建的自定义积木拖入库中:

new-library-3.png

完成后,在 “Joystick” 库里就能看到你的积木:

new-library-4.png

至此,你就为新硬件写完驱动了。

导出驱动库

你可以将驱动库分发给更多用户。 右键点击驱动库,导出为 ubl 文件,把这个文件发给需要的人即可。

export-ubl.png

如果你获得一个 ubl 文件,想要导入它,只需要将文件直接拖到 IDE 里即可。

import-ubl.png

更多分发方法

通常你不需要直接分发积木库。如果你的项目中使用到新的驱动库,当你分享你的项目时,驱动库会一并存在于项目文件(udp)和项目 URL 里。

如果你想让驱动库内置在 MicroBlocks 平台里,你可以将它提交给 MicroBlocks 官方仓库(确保你的驱动库是采用英文写的,这样全球用户才能使用它)。

如果你的驱动库,采用中文来写,只打算给中文社区使用,欢迎提交到 中文社区仓库

如果你想学习更多关于编写驱动库的知识,查看 MicroBlocks 平台内置的驱动库是个好办法。目前已经有很多驱动库内置在 MicroBlocks 里

libraries-catelog.png

右键感兴趣的积木,点击``,就可以学习它是怎么做的了:

blocks-show-definition.png

有些内置的驱动库是我提交的(也列出了它们使用的硬件通信协议):

  • AI/AILens

  • Kits and Boards/哪吒扩展板

  • Kits and Boards/悟空扩展板

  • Network/MQTT
  • Other/Joystick_bit (本文例子的完整版)
    • 数字信号/模拟信号
  • Robots/酷比特小车

  • Robots/Sphero-RVR

我对这几个库比较熟悉,如果你在阅读这些积木库的过程中遇到什么疑惑,欢迎与我讨论。

我的博客文章里也记录了一些编写驱动库的经验, 供大家参考。

目前 IDE 支持哪些硬件通信协议

  • 数字/模拟信号

comm-catelog.png

这些硬件通信协议足以涵盖主流的绝大多数传感器/执行器。

如果你的新设备,不是采用这些硬件通信协议,那么你可能无法在 IDE 里接入它,如果你不知如何将你的新设备接入到 MicroBlocks,提一个 issue吧,MicroBlocks 团队会给你合适的指引。

如何让 MicroBlocks 支持新的编程主板

MicroBlocks 目前支持 这些主板

如果你想让 MicroBlocks 支持新的编程主板或芯片模组 ,需要在在虚拟机(VM)层面工作。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK