原文地址:https://blog.everlearn.tw/arduino/arduino-%E7%A9%8D%E6%9C%A8%E5%BC%8F%E7%B7%A8%E8%BC%AF%E5%99%A8%E7%B8%BD%E6%95%B4%E7%90%86

前言

虽然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 积木式编辑器整理的更多相关文章

  1. MySQL隐式转化整理

    MySQL隐式转化整理 前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮 ...

  2. TurnipBit—MicroPython开发板:从积木式编程语言开始学做小小创客

    编程.建模.制作动画和游戏--这些当初我们默认只有成年人玩得转的事情,现在早已经被无数小孩子给颠覆甚至玩出新境界了.热爱科技和动手的"创客"(Maker)现在在全世界都炙手可热.今 ...

  3. 积木式编程——自制app点灯

    技术:51单片机.串口.蓝牙.积木式编程   概述 这里简单入门了积木式编程,做了个简易APP用来开灯关灯,当然你可以继续添加内容,可以做智能家居.遥控汽车和环境监控等等. 详细 代码下载:http: ...

  4. 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放~ ...

  5. MySQL的隐式类型转换整理总结

    当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion). 比如下面的例子:   1 2 ...

  6. vue响应式原理整理

    vue是数据响应性,这是很酷的一个地方.本文只为理清逻辑.详细请看官方文档 https://cn.vuejs.org/v2/guide/reactivity.html vue的data在处理数据时候, ...

  7. Learn sed using these command on Linux(流线式编辑器——sed)

    是对文件中的每一行进行处理,不会对源文件进行修改 sed --version sed '11d' sed_file sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打 ...

  8. 使用Rainbond打包业务模块,实现业务积木式拼装

    背景 每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计 ...

  9. Linux实用命令整理

    说明 点击标题可进入详细讲解的章节 0. 基本命令 linux 基本命令整理 1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar. ...

随机推荐

  1. web前端之css快速入门

    css简介 css概述 CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与 ...

  2. __name__ == "__main__"的作用是什么?

    问题: __name__ == "__main__" 的作用是什么? # Threading example import time, thread def myfunction( ...

  3. Nodejs学习笔记(十一)—数据采集器示例(request和cheerio)

    写在之前 很多人都有做数据采集的需求,用不同的语言,不同的方式都能实现,我以前也用C#写过,主要还是发送各类请求和正则解析数据比较繁琐些,总体来说没啥不好的,就是效率要差一些, 用nodejs写采集程 ...

  4. ANTLR4权威指南 - 第7章 通过特定应用程序代码解耦语法

    第7章 通过特定应用程序代码解耦语法 到目前为止,我们已经知道了怎么用ANTLR的语法来定义语言了,接下来我们要给我们的语法注入一些新的元素了.就语法本身而言,其用处并不大,因为它只能告诉我们一个用户 ...

  5. lucene源码分析(7)Analyzer分析

    1.Analyzer的使用 Analyzer使用在IndexWriter的构造方法 /** * Constructs a new IndexWriter per the settings given ...

  6. funny alphabet

    1.A Boy Can Do Everything For Girl 2. He Is Just Kidding 3. Love Must Need Our Patience

  7. Mybatis中同时使用shardbatis和pagehelper插件冲突问题

    在一次使用mybatis的插件,分表shardbatis+分页pagehelper共同使用的时候,会抛出以下异常: java.lang.NoSuchMethodError: net.sf.jsqlpa ...

  8. SQL2008无法连接到(local),该账户当前被锁定,所以Sa用户登陆失败

    1 安装小结 换了电脑,很多软件都得重装,期间报了很多问题,比如说先装vs2008再装sql server2008r2会报一个“存在2008早期版本”,通过查找,百度一系列的坑爹之路后,我还是把vs2 ...

  9. C语言中内存管理规范

    一.内存申请 1.建议使用calloc申请内存,尽量不要使用malloc. calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据. 2.申请内存大 ...

  10. C# 使用/配置Log4Net

    1.首先在项目中添加Nuget程序包... 2.然后在NuGet窗体中搜索Log4Net,然后点击安装<安装过程可能会持续几分钟,请耐心等待> 3.在项目中添加一个Config文件,如已有 ...