原文地址: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. Eclipse删除switch workspace下多余的workspace

    第一步:修改org.eclipse.ui.ide.prefs 文件 打开Eclipse目录的\configuration\.settings目录,找到org.eclipse.ui.ide.prefs ...

  2. JavaScript -- 猜数、遍历

    ----- 004-猜数.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv="Co ...

  3. Java虚拟机(三):JVM垃圾回收机制

    概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...

  4. Linux-(chgrp,chown,chmod)

    /etc/group Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件. Linux /etc/group文件 ...

  5. nginx学习笔记(7)Nginx如何处理一个请求---转载

    如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...

  6. 动态创建table表格页面出现undefined原因以及修改

    源代码: var html: if(lists) { html += '<a href="https://www.4001149114.com/NLJJ/member/sharecel ...

  7. 每天一道剑指offer-二叉树的下一个结点1

    题目 每天一道剑指offer-二叉树的下一个结点https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&a ...

  8. Golang 并发Groutine实例解读(二)

    go提供了sync包和channel机制来解决协程间的同步与通信. 一.sync.WaitGroup sync包中的WaitGroup实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就 ...

  9. Linux进程管理 简介

    何为进程,我想这个问题大家再熟悉不过了吧,无非就是"执行中的程序"! 概念性的东西本文暂时忽略或者略微一提,详细信息还需要阅读相应的blog或专业书籍.(博主收藏了计算机相关的大量 ...

  10. centos6.5下yum安装mysql5.5

    第一步就是看linu是否安装了mysql,经过rpm -qa|grep mysql查看到centos下安装了mysql5.1,那就开始卸载咯 2 接下来就是卸载mysql5.1了,命令:rpm -e ...