Scratch ふうな組込プログラミング、さらに続き

投稿者: | 2022/11/20

MIT Scratch-like visual programming on Microcontrollers (survey continued).

先日、こんな記事を書かせて頂きました。

  1. Scratch(ぽい)ESP32 マイコン・ネットワークプログラミング
  2. Scratch ふうな Arduino プログラミングまとめ

今回は、さらにその続きです。やはり、多くの方がいろいろなプロジェクトに取り組んでいらっしゃることが分かりました。前回は 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点です。

  • BIPES プロジェクトからのフォーク(派生)や、BIPES への貢献に関して、分かりやすい説明があること。
  • BIPES に独自のブロックを追加する方法について、具体的な説明があること。

Arduino と比べて

さて。今回は Espruino とBIPES という 2つのプロジェクトを紹介してきましたが、前回紹介した Arduino 環境(Sketch プログラミング)と比較して大幅に有利だと思った点は、次のようなものです。

  • コンパイルの必要がないので、プログラムの編集からアップロードまでが迅速です。待ち時間が少ないので、特にお子さん向けの教育に向いていると思いました。
  • ボードと開発環境の間が、共通のインターフェイス(Espruino では JavaScript REPL、BIPES では MicroPython REPL)で閉じているので、パソコン上に Arduino IDE や Arduino Create Agent をインストールしたりする必要がありません。Web Serial に対応したウェブブラウザだけがあれば良いので、例えば講習会に参加する生徒さんの負担は大幅に減ると思います。(USB シリアルアダプタのドライバインストールは必要かも知れません。)

今日はここまで。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。もし返答が届かない場合、何らかの事情でメールが不達となっている可能性がございます。大変お手数ですが、別のメールアドレス等で督促頂けますと幸いです。

このページが更新されたらメール通知を受け取ります