ラベル lighttpd の投稿を表示しています。 すべての投稿を表示
ラベル lighttpd の投稿を表示しています。 すべての投稿を表示

2016年4月3日日曜日

AmisとCGIとの接続(名前付きパイプFIFO)

概要
webからの操作で、AmisボードのLEDを操作する準備として
Amisボードと通信するプログラムと、webでユーザー操作を受け持つcgiとの接続を検討した。

構成
dd-Wrt上のLighttpd(Port81)を使ってwebサーバーを立ち上げる
仮にAmiscommServer.cgi とする
Amisボードとの通信プログラムをAmis-Commとする

考え方は以下とか本を参考にした。
http://www.ncad.co.jp/~komata/c-kouza12.htm
C言語による実践Linuxシステムプログラミング

web側はまだ作成中

CSSフレームワークを使うとなんとなくそれっぽくできるから良いね。
foundation.js を使った。



2015年5月9日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(WEB制御)

目的

前回、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。
今回は、コマンドラインの操作をWEBから行えるように変更した。

概要

WEBからクリア、行移動、文字出力を行う。
PICからの受信は次回の課題。




結果



2015年2月9日月曜日

FON2405EのLEDをWEBから制御する


やってみたかったことの1つ
web操作でFONGPIOを制御すること。
ようやくできた。


 
制御方法はちょっとうさんくさいけど
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>FON2405eGPIOWEBから操作する</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作るもは初めてだし。。。
とりあえず、以下を参考にがんばった。

なんとか動くものになった。
 

2015年2月2日月曜日

FON2405EにLighttpdをインストールする


前回RalinkSDKを使ってカスタムファームを導入してみた。
今回はいろいろなアプリケーションをインストールしてみようと思う。
  
その前に、毎回ファームを書き換えるのはめんどくさいので、NFSを使えるようにする
  [Linux Kernel Configuration]→[Networking]→[Networking options --->]
  →[]IP:Kernel level autoconfiguration





  [Linux Kernel Configuration]→[File systems]→[Network File Systems --->]
   Provide NFSv3とかチェック
  [BusyBox Configuration]→[Linux System Utilities]
  [] Support mounting NFS file systems

 
これで、
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
とすれば、/mntに無限の可能性が広がるはず!

つぎに、webからGPIO制御したいなーという願望を持ちつつ、
SDKに付属のGOAHEADをさわろうとして、よくわからなくて。。。
Lighttpdをインストールしてみたいと思う。
 
1.ファームの再構築
  pollってのが必要みたい
  [Linux Kernel Configuration]→[General setup]→[Configure standard kernel feature]→[]Enable eventpoll supportにチェックを入れる


2.Lighttpdのクロスコンパイル
 
本体はここから取得。
 以下のようにしてクロスコンパイルを行う。

PATH="$PATH":/opt/buildroot-gcc342/bin
./configure --host=mipsel-linux CC=/opt/buildroot-gcc342/bin/mipsel-linux-gcc CFLAGS="-I/home/adeno/fongpio/sdk3301/RT288x_SDK/source/linux-2.6.21.x/include" LDFLAGS="-L/home/adeno/fongpio/sdk3301/RT288x_SDK/source/linux-2.6.21.x/lib" --without-pcre --without-zlib --without-bzip2 –disable-ipv6 –prefix=/home/adeno/lighttpd
make
make install
without系のオプションは、configuremakeしたときにエラーになったものを除くため
(あとで、1つづつ検証していこう)
  
その結果できたものを
NFSのディレクトリに保存しておく
lighttpd
lib
sbin
share


3.FON側からマウント

mount -o nolock 10.10.10.3:/var/lib/tftpboot/ /mnt
そして、
mkdir /usr/local
mkdir /usr/local/lib
mount -o nolock 10.10.10.3:/var/lib/tftpboot/lighttpd/lib /usr/local/lib

 
4.設定ファイルの準備
NFSディレクトリに以下を作成
data/www/htdocs コンテンツ保存先
data/www/log   ログ保存先

lighttpd.confの作成
以下を参考に
server.event-handler = "linux-sysepoll" をコメントアウトして
server.event-handler = "poll" を追加する

あとは適当に・・・やって、/mnt/lighttpd.confに保存。

 
5.Lighttpd起動!
  
/mnt/lighttpd/sbin/lightpd -D -f /mnt/lighttpd.conf

これで、10.10.10.254:4080にアクセスすると

やったー!
次はこの環境の永続化を考えよう。