ブログ

Armadillo-640/IoT(A6):Webブラウザの画面から制御(lighttpd+php-cgiを使用)

at_kazutaka.bito
2022年9月5日 9時46分

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"}