初心者向けRaspberry Pi GPIOの美味しい食べかた(使い方編)

スポンサーリンク

キーボードでの難しげなプログラム&黒い画面での設定なし。マウス操作だけでRaspberry PiのGPIOが操作できるPi_Scratchの使い方。

プログラミング初心者でもRaspberry PiのGPIO(汎用入出力)を使う方法(インストール編)からの続きです。インストールがまだ済んでない方は、上記をご参照下さい。

スポンサーリンク

Pi_Scratchの使い方

Pi_Scratchは、Scratchと言う”キーボードではなく、マウスの操作でブロックを組み合わせて”プログラムを作るプログラム言語を使います。Scratchそのものの使い方はココでは省きますが、全く触ったことがなければドットインストールや書籍が便利です。

基本操作

何故か分厚い公式マニュアルに綺麗に書かれていませんが、Scratchの「制御」→「○○を送る」でGPIOに命令を送ります(GPIO番号で指定します)。

gxxout GPIOピンXXを出力にする 例) g10out
gxxin GPIOピンXXを入力にする 例) g10in
gxxon GPIOピンXXをHigh(on)にする 例) g14on
gxxoff GPIOピンXXをLow(off)にする 例) g14off
update 入力時に値を更新する
startup ファイルオープン時 自動起動する

GPIOの入力か出力かを決める

gxxout gxxin

ピンIDではなく、GPIO番号で指定します。

ちなみにGPIO2,3,14,15番はOUT、IN共に設定できません。

2015-06-03_09h17_19

GPIO出力

GPIO XX番を出力にする
gxxout
High(ON)にする
gxxon
Low(OFF)にする
gxxoff

GPIO入力

GPIO XX番を入力にする
gxxin

入力値を更新する(updateを送らないと値は更新されません)
update

まとめるとこんな感じ。GPIO XX番を入力にし、0.5秒づつupdateを送り、値を見ます。
※waitを入れないとハンドラーが落ちます(0.1秒とかでも可)

gpio_in

gXXinを送ってから、updateを送ると、「調べる」→「○センサーの値」が出てきます。

初回&更新にはupdateを送る

初回&更新にはupdateを送る

snapshot7

ちゃんと命令が送られていると、こんな画面が裏に出ています(17 set to IN / Pin: 17 -> 0の部分)

Pi_Scratchを使った作例

これ意外にも沢山の作例がマニュアルに載っていますので、是非 組み合わせて遊んでみてください。

スイッチを押すとLEDがつく

GPIO10につながったスイッチを押すと、GPIO11につながったLEDをつける

20150603_160223-001

 

回路図

ledとスイッチ2

プログラム

snapshot12

1-Wire DS18B20温度センサーの値を読む

回路図

温度センサー

プログラム

snapshot13

対応センサーだとこれだけ。TEMPB20はGPIO4につなぐ必要有り。26.6度。

MCP3002 ADコンバータ(照度センサー)

回路図等

プログラム

snapshot8

画像では0ですが、ちゃんと値は取れてました

赤外線(人感)センサーでLEDを光らせて「!!」と言う

回路図

モーションセンサー2

プログラム

snapshot14

LEDがGPIO10、人感センサーがGPIO11

その他の作例

他のセンサー、回路図など詳しくは公式マニュアル(pdf)に書かれています。

その他の設定

必須ではありませんが、便利に使う方法など(※黒い画面を使ったりします…)。

Raspberry Piの起動で自動実行させる

下記の組み合わせで、モニタ、キーボード、マウス、LANが無い状態でも予め作ったプログラムの実行が可能です。

  1. Scratch上で「startupを受け取ったとき」と言うブロックを使うと、ファイルを開いたときに自動的にそのブロックが実行されます。

    snapshot9

    Startupの場合、「緑の旗がクリックされたとき」は動きません

  2. ~/.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のソースを見た(&ちょっとだけ挑戦してみた)のですが、私の実力では直ぐにはできませんでした。

外部シェルコマンドの実行(任意のコマンドを送って実行/返値を取得?)をやってみたよーって方いらっしゃいましたら是非方法を教えてください。僕と多くのプログラミング初心者が喜びます

追記 —-
pythonを利用した外部シェルコマンドの実行やってみました。

コメント

  1. […] ここまでできたら、さっそく使ってみましょう。 プログラミング初心者でもRaspberry PiのGPIO(汎用入出力)を使う方法(使い方編)へ続きます。 […]

  2. Hiroshi Imura より:

    大変参考になります。有難うございます。
    1点お教えください。温度センサーの「TEMPB20を送る」とGPIO4はどのように関連付けたらよいでしょうか。1-wireの温度センサーを取り付け、デバイスとして認識はしていますが、Scratchの「調べる」のセンサーとして表示されずに困っています。
    よろしくお願いします。

    • もやし工房 より:

      手元に環境がないのですが、センサーの真ん中のピンをGPIO4に入れれば、プログラム上でGPIO04と関連付ける必要はなく(GPIO04固定です)、「TEMPB20を送る」を実行すると、調べるの中にTemp18B20が出てきます。
      詳しくはpi-scratchマニュアルのP93-94にかかれています。でも、このプログラム随分更新が止まっていますね…

タイトルとURLをコピーしました