前言
虽然Arduino问世以久,但是身为这波自创浪潮的元老之一,Arduino仍有相当的重要性。Arduino官方虽然一直都有提供功能完整的IDE,然而因为使用C++做为开发语言,因此造成不少人上手时的门槛。尤其对非英语系国家的青少年来说,在学习的路上更是难上加难。也因此,这几年陆陆续续发展出了许多不同的积木式编辑器,可做为学习时的敲门砖,甚至用来开发一般的项目也不成问题。
在这篇文章中,我将讨论选择编辑器的考察事项,并对市面上众多的积木式编辑器做一个摘要与整理,以作为选择时的参考。
考察事项
Scratch是否并不重要,一切回到需求
在这些众多的编辑器当中,有不少跟Scratch有一定程度的关系,不管是透过外挂的方式、改写、甚至是受到启发。不过身为一个使用者,这倒不是我们最需在意的一点。虽然对于学习过Scratch的人来说,直接在熟悉的环境或操作方式下操控Arduino是很符合直觉的选择,但是其实这些编辑器大多与Scratch有类似的设计方式,不至于需要太多熟悉的转换时间。反倒是编辑器本身能否满足我们的需求才是最值得考察的重点。
教学vs项目制作
既然满足需求才是选择编辑器的最主要考察,那我们就来看看需求是甚么。
如果是以教学或学习为出发点,当然就是尽量以积木功能以及支持周边元件的数量为主要考察。此外,中文化与否、安装复杂度、以及稳定性也是很重要的考察项目。对于某些现场教学来说,是否支持离线版可能也是必须考察的重点。
如果是项目制作呢?当然就是先把项目所需的功能与元件完整列出来,然后找寻最为匹配的编辑器。基本上,一般模拟、数位脚位的输出入功能都是必备的积木,所以重点应放在需要特殊处理的周边元件的支持度。举例来说,如果项目需要用到RGB Led灯泡,那么直接提供RGB Led灯泡控制积木的编辑器就会是比较方便的选择。当然,RGB Led灯泡的控制其实不难,直接控制不同脚位的输出就可以达到同样的目的,所以实务上不一定要如此考察,往往直接使用最为熟悉的编辑器即可。不过有时候某些硬件需要搭配特定的编辑器,此时我们就没有太多的选择。好在这些编辑器的设计方式都大同小异,只要有相关操作经验,在程序编辑上不会有太多的困难。比较麻烦是安装步骤差距甚大,甚至很容易卡关。
独立与否很重要
除了周边元件是否直接支持外,还有一个常常被忽略却更为重要的考察,那就是是否支持程序刻录的选项。简单来说,Arduino的程序设计可分为两大分类,一类是操控Arduino时必须由两个程序搭配而成,一个是执行在Arduino的特殊固件程序,另外一个则是执行在电脑上的控制程序。在这种模式下,Arduino就像一个魁儡一样,没有自己的自我意识,完全受控制程序的摆布。电脑上的控制程序必须持续对Arduino下达控制指令才能产生作用,一旦电脑上的控制程序停止后Arduino就不会再产生任何反应。我将这种模式称为魁儡模式,运作方式可参考下图:
问题来了,Arduino怎么会自愿成为魁儡呢?电影里的坏人,如果想要控制好人使其言听计从,常常使用注射听话药剂这种方式。在这里我们可以利用一样的概念,先将听话药剂(特殊固件程序)注射(刻录)到Arduino里。这种特殊固件程序通常是Firmata/FirmataPlus,但是也可能是自行开发的特殊固件。我们修改上图,加上刻录的步骤:
基本上,以Scratch为基础的编辑器大多是这样的运作方式。在这种模式下主要的运算由电脑上的控制程序加以执行,因此比较容易完成复杂的功能,但是另一方面却也使得Arduino无法摆脱USB线的束缚,而且还必须完全依赖控制程序的指令。使用WiFi或蓝牙等无线功能虽然可以让Arduino摆脱USB线的束缚,但是却依旧必须受限于控制程序,因此不管在构架上或是应用时都会受到不少限制。
如果要完全摆脱控制程序,则必须将我们写好的程序直接刻录至Arduino。这一类编辑器将积木程序转成Arduino IDE所支持的C++程序语言,然后进行编译并刻录至Arduino。透过这种方式,Arduino上的固件程序可以独立运作,而不需要依赖额外的控制程序。我将这种模式称为独立模式,运作方式可参考下图:
严格来说,魁儡模式与独立模式都需要进行程序的刻录,只不过傀儡模式下刻录的是用来接受控制指令的特殊固件,而独立模式下则是刻录我们所撰写的程序。
这两种模式之间并没有哪种比较优秀的问题,只有合适不合适。也就是说我们必须从项目的整体构架来考察,如果需要或适合搭配控制程序,那就选择魁儡模式的编辑器。如果需要独立运作,那就选用独立模式的编辑器。
最后,有些独立运作的Arduino程序仍可以接受外部来的设定与控制。举例来说,我们可以利用无线控制的方式来设定前述示例中LED灯泡的亮度。尽管如此,LED灯泡的亮不亮以及所需亮度,仍需由Arduino上的程序做出最后决定,因此依旧属于独立模式开发方式。
结论
甚么!明明都还没有讲到任何的积木式编辑器,怎么就直接做结论了?因为可供选择的编辑器实在太多,为了避免看到文章后面精神不济,所以我们把结论搬到前面。
综合来说,WFduino(尤其是新版的WFduino 2)与motoBlockly是目前两个最适合使用的积木式编辑器。WFduino支持 WF8266R,可以无线控制Arduino。不过WFduino仅支持魁儡模式,而使用独立模式的motoBlockly正好可以相互搭配。再加上可直接编辑C++程序,对学习Arduino的C++程序来说相当方便。即使遇到现成积木没有支持的周边元件,也可以透过Arduino IDE进行程序的功能扩充。
此外,Webduino Blockly则是用来制作物联网的优先选择。至于Transformer也是可以考虑的选项,不过目前还不知道Transformer是否会支持新版的Scratch 3,而且仅限于社群的应用也是必须考察的要点。想较于许多已经不再更新的编辑器,这几个编辑器的功能与开发状况都值得我们优先考虑使用。而且这几个编辑器刚好都是*团队所开发,中文的支持当然也都不成问题。
尽管积木式编辑器选择众多,而且可以支持不同需求的构架,但是积木式编辑器对周边元件的支持度仍远低于Arduino官方IDE,所以对于复杂的项目亦可考虑使用Arduino IDE搭配其他程序语言一起完成项目的构架。
积木式编辑器摘要
S4A
可说是最老牌的Arduino积木式编辑器,以Scratch 1.x版本进行修改,稳定度高但是直接支持的周边元件数量不算多,除了操作基本脚位外,仅支持马达的控制。此外,Scratch 1.x的功能比起Scratch 2、甚至是Scratch 3来说都还是较为缺少些。积木本身没有中文化,也是美中不足的地方。
S2A
以Scratch 2外挂的方式与Arduino互动,从s2a演变为s2a_fm,现在最新改版为s2aio。除了操作基本脚位外,还支持伺服马达、音调拨放等功能。界面支持中文,但是安装过程颇为复杂,需要安装Python以及相关套件,而且必须自行刻录Arduino所需的固件,对大多数新手来说是一个不小的门坎。
Transformer
为宇宙机器人团队所研发的软件,严格来说Transformer并不是一个积木式编辑器。但是透过Transformer,可以直接开启S4A与S2A的编辑器,并可自动刻录Arduino所需的固件,大幅减少安装以及使用S4A/S2A时的复杂度,对教学或学习的人可说是一大福音。不过要注意Transformer社群版不可以用在营利目的,使用时必须多加注意。
ScratchX外挂
ScratchX提供各式各样的Scratch 2外挂,当然也包含Arduino的操控。除了一般性的积木外,ScratchX Arduino外挂还支持事件型的积木,可以写出更简洁的互动程序。Arduino端采用Firmata固件,积木名称则未支持中文。不过因为ScratchX使用者众,因此仍是不少人使用的设计环境。
mBlock
玩过mBot自走车的朋友对于mBlock一定不陌生,两者都是深圳市创客工场科技有限公司所推出的产品。mBlock 3以Scratch 2为基础,除了可以用来操控mBot,还可以用来连接Arduino。因为是中国公司的产品,中文(简体)的支持自然不成问题。而mBlock最特别之处就是可以同时支持两种模式,也就是可以直接控制Arduino,或是将程序刻录至Arduino。不过这两种模式可以使用的积木是不一样的,不少积木仅能在傀儡模式下使用。此外在独立模式下,虽然可以看到积木所对应出的C++代码,但是却无法直接进行修改。必须复制到Arduino IDE中才能进行修改,如此一来才可以使用积木所不支持的功能。而最新版的mBlock 5以Scratch 3为基础,但是却以支持自的硬件产品为主,而不再支持Arduino,着实可惜。
BlockyDuino
BlockyDuino编辑器使用独立模式,产生的C++程序必须自行复制到Arduino IDE进行编译与刻录,使用方便性稍嫌不足。虽然透过额外的arduino_web_server.py可以自动进行刻录,但是安装步骤却有些繁琐。BlockyDunio与arduino_web_server.py没有中文界面,而且已经许久未更新,再加上支持的周边多以Grove元件为主,因此通常可考虑其他更为合适的选择。
ArduBlock
以外挂的方式替Arduino IDE加上积木式编辑功能,但是因为久未更新,因此在新的Arduino IDE 1.8.x系列无法正常运作,仅能使用旧版的Arduino IDE 1.6,因此通常可考虑其他更为合适的选择。
miniBloq
miniBloq同样多年未更新,而且使用方式与其他积木式编辑器有不小的差异,因此有相当的上手难度。再加上无法正常运行在Windows 10的环境下,因此通常可考虑其他更为合适的选择。
Modkid Micro
Modkid Micro同样是一个已经不再维护的编辑器,开发商已经转为开发Modkit for VEX,成为支持自家硬件的付费软件。
motoBlockly
为慧手科技motoduino 所研发的在线积木式编辑器,属于独立模式。编辑时除了可以看到对应的C++档案,甚至可以直接进行修改。而且提供额外的代理程序,可以自动将编辑好的程序刻录至Arduino。同时提供繁体中文与英文界面,上手门坎可谓相当的低。
Webduino Blockly
Webduino Blockly算是一个蛮独特的产品,透过专属的Arduino无线网络扩充版Webduino Fly达到远端遥控的功能。而Webdunio Blockly开发出来的程序属于网页的形式,也就是说我们可以从世界各地来控制Arduino,以达到物联网的概念。
WFduino
WFduino有点类似Transformer,透过转介的方式支持多种编辑环境或硬件元件。新版的WFduino 2可使用的编辑环境包含Scratch 2与Scratch 3,而硬件部分除了支持Arduino、DiFi外,还支持WF8266R进行远端遥控。WFduino 2提供许多Scratch 3的外挂,大幅提升Scratch 3与Arduino的互动能力。唯一可惜的是,WFduino仅支持魁儡模式,而无法进行程序的刻录。