2017年3月5日日曜日

Scratch 1.4からLinuxコマンドを使う

前回では、ServoBlasterと言う限られた条件化で動かしたが、
少しだけ書き換えて、Linuxコマンド全般を使えるようにしてみる。

※言うまでもないですが、Scratchの改造・シェルスクリプトの実行は自己責任で!※
通常は、直接Linuxコマンドを動かすためのブロックは用意されていないので、
ScratchをSmalltalkのレベルで改造する必要があり、以下を参考にして、
ブロックの追加を行った。情報を公開してくださった方々に感謝。
参考
http://itpro.nikkeibp.co.jp/article/COLUMN/20111019/371085/
http://oohito.com/nqthm/archives/2243
http://d.hatena.ne.jp/minekoa/20080314/1205484707


ブロックの追加。

('shell %s' #- #shell: '')

メソッドで、保存するファイル名を変更。
(ホームディレクトリは私の環境の場合なので、そこは御自分の環境に読み替えて下さい)

shell: t1 
    | file |
    file _ FileStream fileNamed: '/home/o10yan/Scratch/shell'.
    file nextPutAll: t1.
    file close.
    (Delay forMilliseconds: 100) wait


シェルスクリプトの指定ファイルも変更。
読み込んだ文字列(コマンド)をそのまま"eval"で評価して実行。

#!/bin/bash

if [ ! -e /home/o10yan/Scratch/shell ]; then
    touch /home/o10yan/Scratch/shell
fi

while inotifywait -e modify /home/o10yan/Scratch/shell; do
    text_line=$(cat /home/o10yan/Scratch/shell)

    if [ -n '$text_line' ]; then
         echo '' > /home//o10yan/Scratch/shell
         eval $text_line
    fi
done

Scratchから"gpio readall"を送って見たところ
SLを走らせてみた

まとめ
やってることは非常に単純。
Scratchから文字列をファイルに保存する。
シェルスクリプトで、文字列をコマンドとして実行する。

現実的には、「遠隔センサー接続」を利用したり、scratchClient と言うソフトで
できるようなので、そちらを使った方が楽だと思います。
が、実験としては、面白かったです。

0 件のコメント :

コメントを投稿