ARDUINO 积木式编辑器整理
前言
虽然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怎么会自愿成为魁儡呢?电影里的坏人,如果想要控制好人使其言听计从,常常使用注射听话药剂这种方式。在这里我们可以利用一样的概念,先将听话药剂(特殊固件程序)注射(刻录)到Arduino里。这种特殊固件程序通常是Firmata/FirmataPlus,但是也可能是自行开发的特殊固件。我们修改上图,加上刻录的步骤:
魁儡模式下的Arduino(刻录特殊固件)
基本上,以Scratch为基础的编辑器大多是这样的运作方式。在这种模式下主要的运算由电脑上的控制程序加以执行,因此比较容易完成复杂的功能,但是另一方面却也使得Arduino无法摆脱USB线的束缚,而且还必须完全依赖控制程序的指令。使用WiFi或蓝牙等无线功能虽然可以让Arduino摆脱USB线的束缚,但是却依旧必须受限于控制程序,因此不管在构架上或是应用时都会受到不少限制。
如果要完全摆脱控制程序,则必须将我们写好的程序直接刻录至Arduino。这一类编辑器将积木程序转成Arduino IDE所支持的C++程序语言,然后进行编译并刻录至Arduino。透过这种方式,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仅支持魁儡模式,而无法进行程序的刻录。
ARDUINO 积木式编辑器整理的更多相关文章
- MySQL隐式转化整理
MySQL隐式转化整理 前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮 ...
- TurnipBit—MicroPython开发板:从积木式编程语言开始学做小小创客
编程.建模.制作动画和游戏--这些当初我们默认只有成年人玩得转的事情,现在早已经被无数小孩子给颠覆甚至玩出新境界了.热爱科技和动手的"创客"(Maker)现在在全世界都炙手可热.今 ...
- 积木式编程——自制app点灯
技术:51单片机.串口.蓝牙.积木式编程 概述 这里简单入门了积木式编程,做了个简易APP用来开灯关灯,当然你可以继续添加内容,可以做智能家居.遥控汽车和环境监控等等. 详细 代码下载:http: ...
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~ ...
- MySQL的隐式类型转换整理总结
当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion). 比如下面的例子: 1 2 ...
- vue响应式原理整理
vue是数据响应性,这是很酷的一个地方.本文只为理清逻辑.详细请看官方文档 https://cn.vuejs.org/v2/guide/reactivity.html vue的data在处理数据时候, ...
- Learn sed using these command on Linux(流线式编辑器——sed)
是对文件中的每一行进行处理,不会对源文件进行修改 sed --version sed '11d' sed_file sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打 ...
- 使用Rainbond打包业务模块,实现业务积木式拼装
背景 每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计 ...
- Linux实用命令整理
说明 点击标题可进入详细讲解的章节 0. 基本命令 linux 基本命令整理 1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar. ...
随机推荐
- R语言运算符
运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作. R语言丰富的内置运算符,并提供以下类型的运算符. 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 ...
- rails 过滤掉所有的html标签 strip_tags
strip_tags(html) Strips all HTML tags from the html, including comments. This usesthe html-scanner ...
- (技术分享) 解决 Firefox 显示“已阻止载入混合活动内容”的问题
(摘自http://blog.aizhet.com/Windows/18415.html) 从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警 ...
- Hive集成HBase实践
#step1: create hive table 't_test' hive -e "create table test.t_user(id int,name string,age int ...
- Shell脚本编写2------有关变量
shell脚本中变量定义方式十分简单,直接将值赋值给变量较好例如 :name="tuanzhang"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.变量命名 ...
- api.closeFrame
关闭frame closeFrame({params}) params name: 类型:字符串 默认值:无 描述:(可选项)frame 名字,不传时关闭当前 frame 示例代码 api.close ...
- weixin.com域名易主 传交易价格仅次360.com
据业内人士透露,weixin.com双拼域名今日易主,交易价格在几千万级别,有传闻其交易价格仅次于360.com. 从whois信息查看可知,weixin.com域名信息今日发生变更,目前域名的持有者 ...
- 鼠标样式——css国际组织
w3c国际标准组织提供的鼠标样式: http://css-cursor.techstream.org/
- github上老外做的jQuery虚拟键盘
jQuery官方比较迟滞的更新版本: http://plugins.jquery.com/keyboard/ 最新版本更新官方地址: https://github.com/Mottie/Keyboar ...
- SSH下shiro的基本使用
1.引入依赖 <!-- 权限控制 框架 --> <dependency> <groupId>org.apache.shiro</groupId> ...