RaspberryPi 機能別早見表 – 操作系(初級) – 活用例2

QR2080

QR2080

Raspberry Pi で CGI プログラムを利用するには Web サーバのインストールが必要である。Web サーバのインストールとCGIを利用するための設定は「Raspberry Pi で CGI(bash)を動かす」を参照してもらいたい。

また、スイッチの状態を読み出すために wringPi を利用している。wringPi のインストールと使い方は「wiringPi のインストール」や「wiringPi gpio コマンドの使い方」にて解説している。

CGIプログラムでLEDを点滅させる

電工作塾流操作系の作法に従った LED 点滅は、点灯・ 消灯の要求を POST メソッドで送って行う。

具体的な流れ

リクエスト

POST /PATH/TO/CGI-PROGRAM/api-led.cgi
pin=4&level=1

レスポンス

[ {“result”: “OK”, “pin”: “4”, “level”: “1”} ]

  • クライアントは POST コマンドを送る
  • クライアントは続けて要求内容を送る(GPIO 4 番に繋がれている LED を 1(=ON) にせよ)
  • サーバは LED を点灯させた後、要求通りに実施した旨を JSON で伝える

実際の CGI プログラム

30行程度のシェルスクリプトで実装できる。 簡単な GPIO 操作には wiringPi が、POST デー タの解釈には Open usp Tukubai の併用が便利。

#!/bin/sh

tmp=/tmp/$$
rm -f $tmp-*

dd bs=${CONTENT_LENGTH} |
cgi-name -i_ -d_ > $tmp-name

if [ “$(cat $tmp-name)” = “” ]; then
echo “Content-type:application/json”
echo “”
echo ‘[ {“result”: “NG”} ]’

rm -f $tmp-*
exit 0
fi

pin=$(nameread pin $tmp-name)
level=$(nameread level $tmp-name)

gpio -g mode $pin out
gpio -g write $pin $level
level=$(gpio -g read $pin)
gpio -g mode $pin down

echo “Content-type:application/json”
echo “”

echo ‘[ {“result”: “OK”, “pin”: “‘$pin'”, “level”: “‘$level'”} ]’

rm -f $tmp-*
exit 0