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


ブロックの追加。

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

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

  1. shell: t1
  2. | file |
  3. file _ FileStream fileNamed: '/home/o10yan/Scratch/shell'.
  4. file nextPutAll: t1.
  5. file close.
  6. (Delay forMilliseconds: 100) wait


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

  1. #!/bin/bash
  2.  
  3. if [ ! -e /home/o10yan/Scratch/shell ]; then
  4. touch /home/o10yan/Scratch/shell
  5. fi
  6.  
  7. while inotifywait -e modify /home/o10yan/Scratch/shell; do
  8. text_line=$(cat /home/o10yan/Scratch/shell)
  9.  
  10. if [ -n '$text_line' ]; then
  11. echo '' > /home//o10yan/Scratch/shell
  12. eval $text_line
  13. fi
  14. done

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

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

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

0 件のコメント :

コメントを投稿