やってみたかったことの1つ
web操作でFONのGPIOを制御すること。
ようやくできた。
制御方法はちょっとうさんくさいけど
Lighttpd+CGIで、gpioコマンドを叩いているだけ。。。
PHPとかPerlとかインストールしたいと思ったけど、
なにやらクロスコンパイルで挫折気味だったので、
CGIとしてシェルスクリプト(この場合何シェルっていうんだろう?bash?)を
持ちることにした。
Lighttpd.confに以下を追加・変更して
server.modules
= (
"mod_access",
"mod_cgi"
)
index-file.names
+= (
"index.xhtml",
"index.html", "index.htm", "default.htm",
"index.php","index.cgi"
)
cgi.assign
= (
".cgi"
=> ""
)
メインコンテンツとしてtest.cgiを作成する
#!/bin/sh
echo
"Content-type: text/html"
echo
NET_LED="OFF"
LAN_LED="OFF"
WPS_LED="OFF"
NET_LED=`echo
"$QUERY_STRING" | sed -n 's/^.*netled=\([^&]*\).*$/\1/p'
| sed "s/%20/ /g"`
LAN_LED=`echo
"$QUERY_STRING" | sed -n 's/^.*lanled=\([^&]*\).*$/\1/p'
| sed "s/%20/ /g"`
WPS_LED=`echo
"$QUERY_STRING" | sed -n 's/^.*wpsled=\([^&]*\).*$/\1/p'
| sed "s/%20/ /g"`
#
gpioname NET,LAN,WPS
#
mode off,on,fastbrink,slowbrink
echo
"<html><head><title>FON2405eのGPIOをWEBから操作する</title></head>"
echo
"<body>"
echo
"<h1>GPIOの制御(LEDの点消灯)</h1>"
echo
"<form method='get' action='test.cgi'>"
NET_LED_ON=""
NET_LED_FASTBRINK=""
NET_LED_SLOWBRINK=""
NET_LED_OFF=""
if
[ "$NET_LED" = "ON" ]; then
NET_LED_ON="checked"
gpio
l 12 0 1 0 0 0
elif
[ "$NET_LED" = "FASTBRINK" ]; then
NET_LED_FASTBRINK="checked"
gpio
l 12 1 1 4000 0 4000
elif
[ "$NET_LED" = "SLOWBRINK" ]; then
NET_LED_SLOWBRINK="checked"
gpio
l 12 5 5 4000 0 4000
else
NET_LED_OFF="checked"
gpio
l 12 1 0 0 0 0
fi
echo
"<p>NET-LED"
echo
"<input type='radio' name='netled' value='ON' $NET_LED_ON
>ON"
echo
"<input type='radio' name='netled' value='SLOWBRINK'
$NET_LED_SLOWBRINK >SlowBrink"
echo
"<input type='radio' name='netled' value='FASTBRINK'
$NET_LED_FASTBRINK >FastBrink"
echo
"<input type='radio' name='netled' value='OFF' $NET_LED_OFF
>OFF"
echo
"</p>"
LAN_LED_ON=""
LAN_LED_FASTBRINK=""
LAN_LED_SLOWBRINK=""
LAN_LED_OFF=""
if
[ "$LAN_LED" = "ON" ]; then
LAN_LED_ON="checked"
gpio
l 11 1 0 0 0 0
elif
[ "$LAN_LED" = "FASTBRINK" ]; then
LAN_LED_FASTBRINK="checked"
gpio
l 11 1 1 4000 0 4000
elif
[ "$LAN_LED" = "SLOWBRINK" ]; then
LAN_LED_SLOWBRINK="checked"
gpio
l 11 5 5 4000 0 4000
else
LAN_LED_OFF="checked"
gpio
l 11 0 1 0 0 0
fi
echo
"<p>LAN-LED"
echo
"<input type='radio' name='lanled' value='ON' $LAN_LED_ON
>ON"
echo
"<input type='radio' name='lanled' value='SLOWBRINK'
$LAN_LED_SLOWBRINK >SlowBrink"
echo
"<input type='radio' name='lanled' value='FASTBRINK'
$LAN_LED_FASTBRINK >FastBrink"
echo
"<input type='radio' name='lanled' value='OFF' $LAN_LED_OFF
>OFF"
echo
"</p>"
WPS_LED_ON=""
WPS_LED_FASTBRINK=""
WPS_LED_SLOWBRINK=""
WPS_LED_OFF=""
if
[ "$WPS_LED" = "ON" ]; then
WPS_LED_ON="checked"
gpio
l 14 1 0 0 0 0
elif
[ "$WPS_LED" = "FASTBRINK" ]; then
WPS_LED_FASTBRINK="checked"
gpio
l 14 1 1 4000 0 4000
elif
[ "$WPS_LED" = "SLOWBRINK" ]; then
WPS_LED_SLOWBRINK="checked"
gpio
l 14 5 5 4000 0 4000
else
WPS_LED_OFF="checked"
gpio
l 14 0 1 0 0 0
fi
echo
"<p>WPS-LED"
echo
"<input type='radio' name='wpsled' value='ON' $WPS_LED_ON
>ON"
echo
"<input type='radio' name='wpsled' value='SLOWBRINK'
$WPS_LED_SLOWBRINK >SlowBrink"
echo
"<input type='radio' name='wpsled' value='FASTBRINK'
$WPS_LED_FASTBRINK >FastBrink"
echo
"<input type='radio' name='wpsled' value='OFF' $WPS_LED_OFF
>OFF"
echo
"</p>"
echo
"<input type='submit' value='変更'>"
echo
"</form>"
echo
"</body></html>"
もうかっこ良くかけないものか。
でもシェルよくわかんないし、cgi作るもは初めてだし。。。
とりあえず、以下を参考にがんばった。
なんとか動くものになった。
0 件のコメント:
コメントを投稿