Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbian 8.0(NOOBS Ver1.9.2)を使用して開発中。

【スポンサーリンク】

PHP(Webページ)からGPIOを制御する方法(その1)

【スポンサーリンク】

前回、ApachePHPをインストールし、動作確認をするところまで記載しました。今回は目標であった、PHPからRaspbery PiのGPIOを制御する方法を記載したいと思います。PHPからGPIOを制御できれば、Webページの作り方次第でいろいろなユーザーインターフェースを作ることができます。

PHPからGPIOを制御する方法はいくつかあると思いますが、PHPからpythonコード(xxx.py)を実行する方法を紹介したいと思います(WiringPi でも可能です、時間があればWiringPi も記事にしたいと思います)。作成済みのpythonコード(xxx.py)を多く持っている方や、PHP等のWebを作る人と組み込み系のpythonコードを作る人と分業体制で開発している方は、この方法が便利だと思います。

 

それでは実際にWebページを作っていきましょう。以下のような簡単なWebページで動作を確認します。

・WebページのStartボタンを押す ⇒ GPIOに繋がっているLEDが点灯する

・WebページのStopボタンを押す ⇒ GPIOに繋がっているLEDが消灯する

 

phpのコードの作成

Webサーバのルートフォルダの下に、ledTest.phpを新規に作成し、以下のコードを記載します。

sudo vi /var/www/html/ledTest.php

特に難しいことはありません。startとstopボタンを作成し、switch文で

・startボタンが押されたら、LEDを点灯するpythonコードを実行する

・stopボタンが押されたら、LEDを消灯するpythonコードを実行する

というコードになります。

----------ledTest.php----------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LedTest</title>
</head>
<body>
<?php
if(isset($_POST["start"])) {
        echo "LED Light ON";
        $path ='python ./ledStart.py';
        exec($path);

}
else if(isset($_POST["stop"])) {
        echo "LED Light OFF";
        $path ='python ./ledStop.py';
        exec($path);

}

?>
<form method="POST" action="">
<input type="submit" value="start" name="start"> 
<input type="submit" value="stop" name="stop"> 
</form>
</body>
</html>

 

LEDを点灯/消灯させるpythonコードの作成

上記で作成したledTest.phpと同じフォルダ内にledStart.pyとledStop.pyを作成します。LEDを点灯させたり、消灯させたりするコードは、Lチカの記事を参照してください。(ledStart.py ⇒ LED点灯、ledStop.py ⇒ LED消灯)

 

sudo vi /var/www/html/ledStart.py

----------ledStart.py----------

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(37, GPIO.OUT)
GPIO.output(37, True)

 

sudo vi /var/www/html/ledStop.py

----------ledStop.py----------

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(37, GPIO.OUT)
GPIO.output(37, False)

 

これでphpとpythonのコードは作成完了です。

 

動作確認

コードが完了しましたので、動作確認を行いましょう。ブラウザに "http://[Raspberry PiのIPアドレス]/ledTest.php"とアドレスを入力し、Enterキーを押します。Webページにstartボタンをstopボタンが表示されたと思います。startボタンを押すとLEDが点灯すると思ったのですが、点灯せず。。

apacheのエラーログを見ると、エラーが出てますね。この問題の解決方法は次回、記載したいと思います。つづく。。。