MIT Scratch-like visual programming on Microcontrollers (survey continued).
先日、こんな記事を書かせて頂きました。
今回は、さらにその続きです。やはり、多くの方がいろいろなプロジェクトに取り組んでいらっしゃることが分かりました。前回は Arduino プログラミング環境(Sketch)に準じたものを中心に紹介しましたが、今回は JavaScript ベースのものと、MicroPython ベースのものの紹介です。
Espruino
プロジェクトサイトはこちらです。ベースとなる言語は JavaScript です。
- 提供形態: ウェブアプリケーション, Node.js によるデスクトップアプリケーション
- 対応 OS: 問わず
- ソースコードの提供: あり(GitHub)
- 対応マイコンボード: STM32, nRF5x, ESP32 など
このプロジェクトは、MIT Scratch 風のビジュアル(ブロック型)プログラムを JavaScript に変換し、マイコンボード上で動かすものです。ツールソフトウェアは無償で利用できますし、市販の多くのマイコンボード上で動作するようになっていますが、「良かったら、うちで売っている専用の Espruino ボードを買うか、あるいは寄付をお願いします」という運営形式になっています。ちょっと好感を覚えました。
さっそく、手持ちの Espressif ESP32-DevKitC V4 を用意し、ファームウェアを書き込んで試してみました。なかなか良さそうな雰囲気だったのですが、組込プログラミングで一般的な「L チカ(LED の点滅)」を用意してみて、いきなりつまずいてしまいました。こんなブロックプログラムです。
これを JavaScript に変換してマイコンが動くのですが、出力される JavaScript コードは、こんな感じになります。
// Code from Graphical Editor
while (true) {
digitalWrite(D0, 1);
setTimeout(function() {
digitalWrite(D0, 0);
setTimeout(function() {
}, 1000*1);
}, 1000*1);
}
…これはちょっと、プログラミングの入門者には辛いのではないかな、と思いました。JavaScript は、基本的にイベント駆動の非同期設計となるらしいので(私は JavaScript は門外漢ですので、突っ込みは御容赦ください)、setTimeout() でこのような設計になるというのは分かるのですが、ちょっと難しく感じます。
でも、普段 JavaScript をメインに使われていて、お子さんなどに JavaScript を教えていきたい場合は、良い選択肢かも知れません。ソースコードも公開されていて、ちょっと頑張れば日本語化(ひらがな化)もできそうです。
BIPES
こちらのプロジェクト BIPES は、いままで紹介してきたものに比べると、日本国内での知名度はかなり低そうです。しかし、前回までに紹介した、さまざまな組込向けブロック型プログラミングの環境の中では、非常に良い設計なのではないかと感じました。
BIPES がベースとしている言語は MicroPython です。
- 提供形態: ウェブアプリケーション(Google Chrome など、Web Serial が使えるもの)
- 対応 OS: 問わず
- ソースコードの提供: あり(GitHub)
- 対応マイコンボード: ESP32, STM32, Raspberry Pi Pico など
こちらも、Espressif ESP32-DevKitC V4 を用意して試してみました。書き込むファームウェアは MicroPython オリジナルが利用できます(これは、実は重要なポイントで、結果として、MicroPython が動作するマイコンであれば、ほぼ問題なく利用できるのではないかと思います。)。私は今回 MicroPython 1.19.1 版を利用しました。
続いて、BIPES のウェブアプリケーションをこちらから開きます。こんな画面になります。
最初にデバイス(ESP32)を選択し、通信ポート(cu.SLAB_USBtoUART)へのアクセスを許可します。(私はブラウザの設定上、英語になっていますが、日本語設定であれば日本語で表示されると思います。)
さて、今回はこんなプログラムを用意しました。
続いて、メニュー画面の Files タブを選択し、Blocks to code の下に表示される「なんとか.bipes.py」という項目を選択すると、MicroPython コードが表示されます。こんなのです。
from machine import Pin
import time
def gpio_set(pin,value):
if value >= 1:
Pin(pin, Pin.OUT).on()
else:
Pin(pin, Pin.OUT).off()
for count in range(10):
gpio_set((0), True)
time.sleep(0.5)
gpio_set((0), False)
time.sleep(0.5)
組込プログラミングに慣れた人には自然なコードで、これならお子さんに説明することも十分できそうです。
最後に、このような実行ボタンをクリックすると、プログラムが動作します。
ちなみに BIPES の秀逸な点は、デバイスへのファイルのアップロードが非常に簡単だという点です。GUI 画面の上部にある Files というタブを開き、画面右上の Save a copy というボタンをクリックすると、MicroPython の REPL という機能を使ってファイルをアップロードしてくれます。逆に、デバイスに既に書き込まれているファイルを閲覧したり、ダウンロードしたりするもの容易です。
付記(2022年11月20日)
BIPES の優れていると思う点(感心する点)として、ドキュメントが親切だということがあります。特に次の 2点です。
Arduino と比べて
さて。今回は Espruino とBIPES という 2つのプロジェクトを紹介してきましたが、前回紹介した Arduino 環境(Sketch プログラミング)と比較して大幅に有利だと思った点は、次のようなものです。
- コンパイルの必要がないので、プログラムの編集からアップロードまでが迅速です。待ち時間が少ないので、特にお子さん向けの教育に向いていると思いました。
- ボードと開発環境の間が、共通のインターフェイス(Espruino では JavaScript REPL、BIPES では MicroPython REPL)で閉じているので、パソコン上に Arduino IDE や Arduino Create Agent をインストールしたりする必要がありません。Web Serial に対応したウェブブラウザだけがあれば良いので、例えば講習会に参加する生徒さんの負担は大幅に減ると思います。(USB シリアルアダプタのドライバインストールは必要かも知れません。)
今日はここまで。
MicroBlocks(加筆: 2023/2/28)
最近、CNX Software で紹介されたのが、MicroBlocks です。もはや、直接的には Arduino でも MicroPython でもないのですが、良くできていそうなので紹介させて頂きます。
MicroBlocks は、Scratch 風のウェブサイトから、以下のような各種マイコンをブロックプログラミングで制御できるサービス、および PC アプリケーションです。
- Micro:bit
- Adafruit Circuit Playground Express
- M5Stack-Core
- Raspberry Pi Pico
- 一般的な ESP32, ESP8266
ウェブアプリケーション以外に、以下のプラットフォーム用のアプリをダウンロードできるようです。
- Chromebook
- Windows
- macOS
- Linux
動作の仕組ですが、マイコン上には「virtual machine」と呼ばれるファームウェアを書き込み、ブラウザや PC アプリからは、web serial を使って通信する、というもののようです。
virtual machine のソースコードは、以下で公開されています。
ウェブアプリのソースコードも、あるようです。(詳細は未調査)
なお、実際のマイコンボードがなくても、Boardie という仮想ターゲットを使って、動作を確認できます。
おそらく、将来的にはビジネスを狙っているのだと思いますが、かなりの部分を無償で利用でき、ソースコードも(全てではないかも知れませんが)見られます。