Armadillo-640/IoT(A6)をネットワーク経由で、Webブラウザの画面から制御する方法です。
ここでは、lighttpd+php-cgiを使用します。
例として、WebブラウザからArmadillo-640/IoT(A6)の赤/緑LEDを制御します。
1. lighttpd、php-cgiのインストール
Armadillo-640/IoT(A6)をインターネットに接続可能なネットワークに接続します。
下記のコマンドを実行して、必要なパッケージをインストールします。
root@armadillo:~# apt-get update
root@armadillo:~# apt-get install lighttpd
root@armadillo:~# apt-get install php-cgi
2. lighttpdにphp-cgiを設定
lighttpdでphp-cgiの設定を行います。
設定ファイルは /etc/lighttpd/lighttpd.conf です。
/etc/lighttpd/lighttpd.confの設定箇所
server.modules = (
"mod_indexfile",
"mod_access",
"mod_alias",
"mod_redirect",
"mod_fastcgi", # この行を追加
)
# ファイルの末尾に
# 以下の行から
fastcgi.server = ( ".php" =>
( "localhost" =>
(
"socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/bin/php-cgi",
)
)
)
# 以上の行までを追加。
設定ファイルを書き換えた後、Webサーバー(lighttpd)を再起動します。
root@armadillo:~# systemctl restart lighttpd
3. PHPでLEDを制御するプログラムを記述
下記の内容で/var/www/html/led.phpファイルを作成します。
/var/www/html/led.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>led php</title>
</head>
<body>
<basefont size="5">
<hr>
<h1>LED Control</h1>
<?php
if(isset($_POST['red'])){
$red = $_POST['red'];
if($red == "on"){
system("echo 1 > /sys/class/leds/red/brightness");
}
elseif($red == "off"){
system("echo 0 > /sys/class/leds/red/brightness");
}
}
if(isset($_POST['green'])){
$green = $_POST['green'];
if($green == "on"){
system("echo 1 > /sys/class/leds/green/brightness");
}
elseif($green == "off"){
system("echo 0 > /sys/class/leds/green/brightness");
}
}
?>
<table border=1><tr><td>
<p style="font-size:30pt;color:red">RED LED</p>
<form action="led.php" method="post">
<input type="submit" name="red" value="on" style="font-size:30pt">
<input type="submit" name="red" value="off" style="font-size:30pt">
</form>
</td>
<td>
<p style="font-size:30pt;color:green">GREEN LED</p>
<form action="led.php" method="post">
<input type="submit" name="green" value="on" style="font-size:30pt">
<input type="submit" name="green" value="off" style="font-size:30pt">
</form>
</td></tr></table>
<hr>
<h1>LED Status</h1>
<?php
$red_status = null;
$green_status = null;
$retval = null;
exec("cat /sys/class/leds/red/brightness", $red_status, $retval);
exec("cat /sys/class/leds/green/brightness", $green_status, $retval);
$string = "{\"RED\":\"".$red_status[0]."\", \"GREEN\":\"".$green_status[0]."\"}\n";
file_put_contents("/var/www/html/led_status.txt", $string);
?>
<p style="font-size:30pt">
<?php
include "led_status.txt";
?>
</p>
</body>
補足)
赤/緑LEDの制御は、
/sys/class/leds/[red|green]/brightness
に"0"/"1"を書き込むことで、消灯/点灯を行います。
赤/緑LEDの状態は、
/sys/class/leds/[red|green]/brightness
の値を読み出して、JSON形式にして、
/var/www/html/led_status.txt
というファイルに出力し、このファイルの内容を表示します。
4. ファイルの権限の変更
上述の/sys/class/leds/[red|green]/brightness、/var/www/html/led_status.txtを
ネットワーク経由でアクセスしたユーザーからも読み書きできるように権限を変更します。
root@armadillo:~# chmod 666 /sys/class/leds/red/brightness
root@armadillo:~# chmod 666 /sys/class/leds/green/brightness
# /var/www/html/led_status.txtは、新規作成します。
root@armadillo:~# touch /var/www/html/led_status.txt
root@armadillo:~# chmod 666 /var/www/html/led_status.txt
5. 動作確認
Armadillo-640/IoT(A6)とネットワーク接続されたPCのWebブラウザで、下記のようにアクセスします。
http://[ArmadilloのIPアドレス]/led.php
Webブラウザに表示された画面で、Armadillo-640/IoT(A6)の赤/緑LEDを制御できます。
補足)curlコマンドによる制御
Webブラウザの画面を使わずに、curlコマンドで制御することも可能です。
赤LEDを点灯するコマンド例
curl http://[ArmadilloのIPアドレス]/led.php -X POST -d "red=on" -sS -o /dev/null
緑LEDを消灯するコマンド例
curl http://[ArmadilloのIPアドレス]/led.php -X POST -d "green=off" -sS -o /dev/null
赤/緑LEDの状態(led_status.txtの内容)を取得するコマンド例
curl http://[ArmadilloのIPアドレス]/led_status.txt
# 実行結果
{"RED":"1", "GREEN":"0"}