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-nameif [ “$(cat $tmp-name)” = “” ]; then
echo “Content-type:application/json”
echo “”
echo ‘[ {“result”: “NG”} ]’rm -f $tmp-*
exit 0
fipin=$(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 downecho “Content-type:application/json”
echo “”echo ‘[ {“result”: “OK”, “pin”: “‘$pin'”, “level”: “‘$level'”} ]’
rm -f $tmp-*
exit 0