キーボードでの難しげなプログラム&黒い画面での設定なし。マウス操作だけでRaspberry PiのGPIOが操作できるPi_Scratchの使い方。
プログラミング初心者でもRaspberry PiのGPIO(汎用入出力)を使う方法(インストール編)からの続きです。インストールがまだ済んでない方は、上記をご参照下さい。
Pi_Scratchの使い方
Pi_Scratchは、Scratchと言う”キーボードではなく、マウスの操作でブロックを組み合わせて”プログラムを作るプログラム言語を使います。Scratchそのものの使い方はココでは省きますが、全く触ったことがなければドットインストールや書籍が便利です。
- ドットインストール Scratch入門 (全15回)
http://dotinstall.com/lessons/basic_scratch_v2 - 書籍
小学生からはじめるわくわくプログラミング (Amazon)
基本操作
何故か分厚い公式マニュアルに綺麗に書かれていませんが、Scratchの「制御」→「○○を送る」でGPIOに命令を送ります(GPIO番号で指定します)。
GPIOピンXXを出力にする | 例) g10out | |
GPIOピンXXを入力にする | 例) g10in | |
GPIOピンXXをHigh(on)にする | 例) g14on | |
GPIOピンXXをLow(off)にする | 例) g14off | |
入力時に値を更新する | ||
ファイルオープン時 自動起動する |
GPIOの入力か出力かを決める
ピンIDではなく、GPIO番号で指定します。
ちなみにGPIO2,3,14,15番はOUT、IN共に設定できません。
GPIO出力
GPIO XX番を出力にする
High(ON)にする
Low(OFF)にする
GPIO入力
GPIO XX番を入力にする
入力値を更新する(updateを送らないと値は更新されません)
まとめるとこんな感じ。GPIO XX番を入力にし、0.5秒づつupdateを送り、値を見ます。
※waitを入れないとハンドラーが落ちます(0.1秒とかでも可)
gXXinを送ってから、updateを送ると、「調べる」→「○センサーの値」が出てきます。
Pi_Scratchを使った作例
これ意外にも沢山の作例がマニュアルに載っていますので、是非 組み合わせて遊んでみてください。
スイッチを押すとLEDがつく
GPIO10につながったスイッチを押すと、GPIO11につながったLEDをつける
回路図
プログラム
1-Wire DS18B20温度センサーの値を読む
回路図
プログラム
MCP3002 ADコンバータ(照度センサー)
回路図等
- 部屋の明るさを取得するフォトトランジスター編
http://lchikaamazon.hatenablog.com/entry/2014/12/02/111022
プログラム
赤外線(人感)センサーでLEDを光らせて「!!」と言う
回路図
プログラム
その他の作例
他のセンサー、回路図など詳しくは公式マニュアル(pdf)に書かれています。
- Pi_Scratch User Manual
http://www.pridopia.co.uk/pi-doc/Pi-Scratch%20User%20Manual-v273-B.pdf
その他の設定
必須ではありませんが、便利に使う方法など(※黒い画面を使ったりします…)。
Raspberry Piの起動で自動実行させる
下記の組み合わせで、モニタ、キーボード、マウス、LANが無い状態でも予め作ったプログラムの実行が可能です。
- Scratch上で「startupを受け取ったとき」と言うブロックを使うと、ファイルを開いたときに自動的にそのブロックが実行されます。
- ~/.config/autostart/Scratch-File(デフォルトでは、/root/.config/autostart/Scratch-File)を編集すると、Scratchで作った任意のプログラムを自動実行できます。
他のPCから操作する
x11vnc等のVNCサーバをインストールするとWindowsやMac等 他のPC(Raspberry Piには電源とLAN/Wifiのみ接続する)からの使用が可能です(現在のディスプレイに接続できないtightvncserverでは動作しません)。
- Raspberry Piを別のPCからリモート操作 @RS-Online
http://www.rs-online.com/designspark/electronics/blog/JPN-raspberrypi-x11vnc-remote-desktop
Pi_ScratchとScratchGPIOの同居
何らかの理由でScratchGPIOを入れる場合、普通にインストールしただけではScratchGPIOが正常に動作しません。※下記設定を行っても同時に使用はできません。
上記の手順(イメージファイルからのインストール)で入れた場合、Scratchのプログラムが書き換わってしまっています。バックアップされているオリジナルのScratchを戻し、pi_scratch用のScratchをリネーム、pi_scratch起動スクリプトをリネームしたものに変更します。
root@raspberrypi:/home/pi# cd /usr/bin/ root@raspberrypi:/usr/bin# ls -la scratch* -rwxr-xr-x 1 root root 2335 1月 30 08:07 scratch -rwxr-xr-x 1 2625 2625 2489 12月 11 2013 scratch.old root@raspberrypi:/usr/bin# mv scratch pi_scratch root@raspberrypi:/usr/bin# mv scratch.old scratch root@raspberrypi:/usr/bin# chown root.root scratch root@raspberrypi:/usr/bin# leafpad /root/.config/autostart/Scratch-File Exec=pi_scratch --document "~以下同一~"
また、Pi_Scratch、ScratchGPIO共にScratchでGPIOを使う為の中継サーバを起動しますが、ScratchGPIOはScratchGPIOを終了しても中継サーバ(ハンドラー)が終了されないため、再起動(or プロセスをkill)するまでPi_Scratchが動作しません。
ScratchGPIOのハンドラーだけ起動→閉じると終了するスクリプトを作成します。
ScratchGPIO7のディスクトップアイコン右クリック→設定
lxterminal –title=”ScratchGPIO7″ –command=”sudo python /scratchgpio7/scratchgpio_handler7.py 127.0.0.1 standard”
へ変更。
最後に&お願い
できることは若干制限されていますが、特に面倒な操作無くRaspberry PiのGPIOをあれこれできるのは、Raspberry Pi + GPIOを使う”とっかかり”には簡単で楽だなぁと感じました。
あとは任意のLinuxコマンドが実行ができれば、特定の値になったらmailコマンドでメールを出す、グラフ画面を外部のキャプチャソフトで取ってhttpサーバで表示、WebAPIをcurlで叩いて返値を使う など、かなりできる事の幅が広がるのになぁ… と思ってpythonのソースを見た(&ちょっとだけ挑戦してみた)のですが、私の実力では直ぐにはできませんでした。
外部シェルコマンドの実行(任意のコマンドを送って実行/返値を取得?)をやってみたよーって方いらっしゃいましたら是非方法を教えてください。僕と多くのプログラミング初心者が喜びます。
- Pi_Scratchソース
http://www.pridopia.co.uk/pi-pgm/Pi_Scratch_v276.rar
追記 —-
pythonを利用した外部シェルコマンドの実行やってみました。
- ScratchとPythonをつなげて顔認識やメール・Slackを送ったりする話
ScratchとPythonをつなげて顔認識やメール・Slackを送ったりする話Scratch1.4とPythonをつなげてScratchの値を送受信。ScratchではできないメールやSlackの送信、画像認識やWeb連携、データをテキスト出力、OSコマンドの実行などをする話。
コメント
[…] ここまでできたら、さっそく使ってみましょう。 プログラミング初心者でもRaspberry PiのGPIO(汎用入出力)を使う方法(使い方編)へ続きます。 […]
大変参考になります。有難うございます。
1点お教えください。温度センサーの「TEMPB20を送る」とGPIO4はどのように関連付けたらよいでしょうか。1-wireの温度センサーを取り付け、デバイスとして認識はしていますが、Scratchの「調べる」のセンサーとして表示されずに困っています。
よろしくお願いします。
手元に環境がないのですが、センサーの真ん中のピンをGPIO4に入れれば、プログラム上でGPIO04と関連付ける必要はなく(GPIO04固定です)、「TEMPB20を送る」を実行すると、調べるの中にTemp18B20が出てきます。
詳しくはpi-scratchマニュアルのP93-94にかかれています。でも、このプログラム随分更新が止まっていますね…