ラズパイのLEDをブラウザで操作してみた

環境
Raspberry Pi3 ModelB+
Webサーバー: Apache2
制御: Python3
操作: PHP(ブラウザ)
GPIOインターフェース

大したことはやってないですが、色々と苦労したので残しておきます。

pin配置はGPIO21-Ground

GPIO配置:
https://webofthings.org/2016/10/23/node-gpio-and-the-raspberry-pi/

httpでGPIO操作ができるようにする

sudo gpasswd -a www-data gpio
sudo service apache2 restart

LED制御用Pythonスクリプト

# led.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import sys

# コマンドライン引数取得
args = sys.argv

# 仕様ポート(BCM)
led_port = 21

# 設定
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_port, GPIO.OUT)

# LED切り替え
if args[1] == "on":
	GPIO.output(led_port, True)
else:
	GPIO.output(led_port, False)

LED状態取得のPythonスクリプト

# status.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import commands as cmd

# ポートの状態を取得 => 0 or 1
status = cmd.getoutput("gpio -g read 21")

print(status)

コントロールパネルPHP

<?php // control_panel.php
if(isset($_GET["light_flg"])) {
    $light_flg = htmlspecialchars($_GET["light_flg"]);
    // 念のためコマンドインジェクション対策
    if($light_flg == "on") {
        $light_flg = "on";
    } else {
        $light_flg = "off";
    }
    // led.py 切り替え
    exec("python led.py {$light_flg}", $switching_res, $switching_status);
    $switching_status = $switching_status ? "失敗" : "成功";
}
// status.py 状態取得
exec("python status.py", $status_res);
$status_status = $status_res[0] ? "点灯中" : "消灯中";
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Conttol Panel</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <h1>Control Panel</h1>
    <div class="status_status"><?php print $status_status; ?></div>
    <div class="switching_status"><?php print $switching_status; ?></div>
    <div class="switching_form">
        <form action="" method="get">
            <label>ON:<input type="radio" name="light_flg" value="on"></label>
            <label>OFF:<input type="radio" name="light_flg" value="off"></label>
            <input type="submit">
        </form>
    </div>
</body>
</html>
The present writer kazz.

関連記事

+「これ1冊でできる!ラズベリーパイ超入門」を読んで
+コマンドで画面の明るさをコントロールする
+PHPで簡易LINEBotを作ってみた
+LINE BOTでPUSH送信
+LINEBOTを楽に実装できるPHPライブラリ作った