MIT Scratch-like visual programming on Arduino (survey).
以前に、こんな記事を書かせていただきました。
今回は、前回に引き続き Scratch(スクラッチ)ふうなビジュアルプログラミング(ブロックプログラミング)環境のまとめです。
調べていくと、実に多くの方が似たような試みをされていることが分かりました。そこで、これらプロジェクトを紹介する上で、少し条件を絞り込んでみることにしました。
- お子さんが利用することを前提としていること
- 一般の Arduino 製品上で Scratch ふうのプログラミングができること(ある企業のハードウェア製品限定でないこと)
- 無料であり、できたらソースコードが提供されていること
いつもの長い前書き(TL; DR)
もう一つ。なぜ多くのプロジェクトが試みられながら、業界標準の決定打的なものがないのか、考えてみました。私なりの理解としては、「Arduino 製品」上でのブロックプログラミングを実現する上で障壁となるのは、次のようなことではないかと思います。
- 「Arduino 製品」と一口に言っても、ハードウェアが非常に多岐にわたること
Arduino の名前を冠した、いわゆる標準製品だけでも、Arduino Uno、Arduino Zero、Arduino Micro、Arduino MKR など多数で、搭載している MCU も、AVR マイコンから SAMD21 マイコンなど、さまざまです。 - Arduino ユーザーが利用しているシールド製品、センサ製品も多岐にわたること
例えば、温度センサを I2C インターフェイスで接続したとします。多くの I2C センサがサードパーティの Arduino 用ライブラリでサポートされていますが、それらライブラリ全てにビジュアルプログラミング用のブロック、またその機能まで設計して提供するのは、至難の業です。
結局、どこかで妥協する必要があるため、これら Scratch ふうプログラミング環境の開発者は、自分が想定している利用シーンを限定し、ある程度絞り込むことになります。結果として、どんな利用シーンでも、どんな Arduino 製品でも、どんなシールド製品、センサ、アクチュエータ等にも対応したブロックプログラミング環境というものは無く、プロジェクトが多岐にわたってしまった、ということではないでしょうか。
それでもいくつか試してみました
まずはこちらから行きましょう。
MPY Blockly
ウェブサイトはこちらです。このプロジェクトでは、ハードウェアのターゲットを ESP32 に絞り、また、実際には Arduino ではなくて MicroPython ベースの設計になっています。ESP32 を搭載した多くのマイコンボードに対応し、ディスプレイやセンサ製品への対応も、かなり充実しています。
ま、MicroPython でもいいかな、と思ったので、以下にその他の特徴をまとめておきます。
- 提供形態: 無償の PC アプリケーション
- 対応 OS: Windows のみ
- ソースコードの提供: 不明
- 対応マイコンボード: 各種 ESP32
Ardublockly
いくつかのフォーク(派生プロジェクト)があるようですが、オリジナルはこちらのようです。以下、特徴です。
- 提供形態: 無償の PC アプリケーション
- 対応 OS: Windows, macOS, Linux
- ソースコードの提供: あり(GitHub)
- 対応マイコンボード: Arduino IDE が標準サポートしているものの多く
この Ardublockly は実際に試してみました(バージョン 0.1.2)。macOS 版は、シリアルポートの選択ができないという問題で動きませんでしたが、Windows 版は動作しました。確認した Arduino IDE は 1.8.19 で、ボードは Arduino Uno です。注意点として、Arduino IDE の言語設定が英語(English)になっていないとダメなようです。
以下がフォークのプロジェクト例です。
- Ardublockly ESP8266/ESP32 Micropython Fork: ESP32 マイコンで動作するもの(言語は Arduino スケッチでなく、MicroPython のようです)
BlocklyDuino
これも多くのフォークがあるようですが、オリジナルはこれだと思います。
- 提供形態: ウェブアプリケーション + Python サーバー
- 対応 OS: Windows, macOS, Linux
- ソースコードの提供: あり(GitHub)
- 対応マイコンボード: Arduino IDE が標準サポートしているものの多く
Python サーバーを手元の PC で動作させておくと、Arduino IDE を背後で動かして、プログラムを自動的にボードに書き込むことができるようです(これは、Ardublockly に似ている)。
なお、Python サーバーによる自動書き込み機能を使わなくても、出力される Arduino スケッチコードをコピペして Arduino IDE で動作させる、という使い方もできます。これならば、Arduino IDE で対応のボードのほとんど(ESP32 など、非標準マイコンを含む)で動作するのではないかと思います。ある意味、非常に割り切ったシンプルな設計です。
フォークとしては、このようなものがあります。
- NeilFraser/BlocklyDuino
- makewitharduino/BlocklyDuino: これは日本人の方が改良なさっているもので、日本語(ひらがな版を含む)による操作が可能です。こちらに詳しい説明があります。
- Blockly@rduino: こちらに詳しい説明があります。かなり凝った設計のようですが、Arduino Create Agent と呼ばれるエージェントをインストールしたり、ブラウザのプラグインをインストールしたりする必要があるようで、ちょっとハードルが高いかな、という印象です。
mBlock(バージョン 3 までのもの)
最後の紹介はこちらです。この mBlock は、上で紹介してきたものと少し異なり、Scratch 2.0 ベースとなっています。つまり、ActionScript、Adobe Flash ベースとなっており、現在はちょっと使いづらい状態です。
- 提供形態: 無償の PC アプリケーション
- 対応 OS: Windows, macOS, Linux, ウェブバージョン
- ソースコードの提供: あり(GitHub)
- 対応マイコンボード: 不明
ちなみにこちらの mBlock はバージョン 5 から商用製品となっていて、Makeblock という企業が、ハードウェアとソフトウェアを合わせて、子供の教育ビジネスを展開しています。(たぶん、ソースコードの提供はないと思います。)
ま、ビジネスになるのは喜ばしいことだと思うのですが、一般利用者が手軽に触れるのは難しくなってしまったようで、個人的にはちょっと寂しいです。
今日はここまで。
後記(2022年11月20日)
また続きを書きました。Arduino プログラミング環境(Sketch)ではなく、JavaScript ベースのものと、MicroPython ベースのものです。いずれもしっかりしたツールで、お試し頂く価値があると思います。御参考ください。