2019年5月21日火曜日

RAPIROをScratchで制御する

5月25日(土)にスクラッチディ 2019 山梨にデモ出展することになりました。

何も準備できていませんが、この秋から予定しているプログラミング塾での教材をデモしようかなと考えています。Scratchでプログラミング可能なLEGO MINDSTORMS NXT(Enchanting)、Edison(EdScratch)、Scratch Jr on Raspberry Piなんですが、それだけでもちょっと寂しいのでRAPIROにMCをやってもらおうかなと考えました。

 Raspbian StretchではScratch 2.0 オフラインエディターが標準でインストールされています。
(注:Scratch3.0のリリースに合わせて2019年1月2日からScratch2.0オンラインエディターの提供が終了しました。)
そしてオフラインエディターには拡張機能があり、独自のブロックを簡単に追加できるようです。
Python で軽量サーバを作って Scratch 2 のHTTP拡張を待ち受けてみる
これで、拡張機能を作ってScratch(RAPIROとは別にRaspberry Pi 3で動かします)でシナリオ通りにRAPIROに喋らせるという魂胆です。確認の為にRaspberry PiでScratch2を立ち上げて、Shiftキーを押しながら「ファイル」を選ぶと「import experimental extension」と表示されるので、行けそうです。

Step1:HTTP拡張機能の作成


参考のページを元に拡張機能を定義しようとしましたが、外部のHTTPサーバへアクセスすることはできないようです。ポート番号は指定できますが、サーバについては指定方法がないようです。

仕方がないので、Bottle+PythonでRAPIROへリクエストを繋ぐ簡易サーバを作成しました。次にJSON 形式の.s2eファイルを作成して、拡張機能を読み込ませようとしましたが、うまく読み込んでくれません。URL を指定するようダイアログが出るので、「file:///.s2eファイルへのパス」で指定しても読み込んでくれません。

ここで、断念かと思いましたが・・・


Step2:Javascript Extensions


拡張機能で検索をしているとこちらのページにたどり着きました。
ここに
The current 2.0 extensions available in the offline editor, like the PicoBoard extension, are Javascript extensions.
とありました。
ということで、Step1で作成したPythonと.s2eファイルをJavaScriptに変換してみました。

Javascriptで拡張機能を作成する詳細仕様はこちらに上がっていますが、Ajaxも使えるようなのでRAPIROへのリクエスト送信も簡単に記述できました。

さて、実際にテストしてみると無事に拡張ブロックが表示されました。
今回は、最低限の機能だけ拡張機能として取り込んだので、今後時間を見てバージョンアップしたいと思います。



Javascriptについてはこちらにアップしてあります。

0 件のコメント:

コメントを投稿

Edisonが故障した一件

 最近またEdisonで遊んでいます。 教育用のデバイスとしてよく出来ているなと思っている Edison ですが、現在3台を所有しています。 最近このうちの1台が調子が悪くなってしましました。具体的にはBeep用のデバイスが壊れたようです。購入時にチェックをしたつもりですが今回久...