Edited at

Raspberry Pi2にWebサーバを構築し、LEDを点灯させる

More than 3 years have passed since last update.

ブラウザからLEDを点灯させるまでの手順メモ


目標

別PCのブラウザからhttp://192.168.11.75/~pi/cgi-bin/led_high.py にアクセスすることで、

Raspberry Pi2に接続したLEDを点灯させることが目標。

(アドレスやファイル名などは個人の設定に依る)


Apacheのインストール


ターミナル

sudo apt-get install apache2


動作確認

テスト用のhtmlを以下のように作成する


/var/www/html/test.html

<html>

<head>
<title>test</title>
</head>
<body>This page is test page.</body>
</html>


別PCのブラウザからhttp://192.168.11.75/test.html と入力し、以下の画面が出れば成功

(192.168.11.75の部分は各自の環境に応じて変更)

UserDir を有効化する

デフォルトでは、コンテンツの読み込みディレクトリが/var/www/となっている。

/var/wwwだと、sudoしないとファイルの編集が行えないので、

コンテンツの読み取りディレクトリを~/public_html/に対して出来るようにしておく。


ターミナル

$ sudo a2enmod userdir



ターミナル

$ mkdir ~/public_html

$ sudo cp /var/www/html/test.html ~/public_html

再起動


ターミナル

$ sudo service apache2 restart


これで、別PCのブラウザからhttp://192.168.11.75/~pi/test.html でアクセスできるようになる。

(192.168.11.75の部分は各自の環境に応じて変更)


CGIの設定

Pythonスクリプトを実行するためにCGIの設定を行う

まずは、CGIを有効にする


ターミナル

$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load


設定ファイルの変更


/etc/apache2/sites-available/000-default.conf

// 以下のコメントを外す

Include conf-available/serve-cgi-bin.conf

拡張子.pyのCGIが動作出来るように設定する。


/etc/apache2/mods-available/mime.conf

(変更前)

#AddHandler cgi-script .cgi
(変更後)
AddHandler cgi-script .cgi .py

CGIを動かすディレクトリの設定


/etc/apache2/conf-available/serve-cgi-bin.conf

(変更前)

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
(変更後)
ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin
<Directory "/home/pi/public_html/cgi-bin">

再起動


ターミナル

$ sudo service apache2 restart


Pythonスクリプトの準備


~/public_html/cgi-bin/test.py

#!/usr/bin/python


print "Content-type: text/html"
print
print "<html>"
print "<head>"
print "<title>test</title>"
print "</head>"
print "<body>This page is test page.</body>"
print "</html>"

以上の設定を行い、

別PCのブラウザから、http://192.168.11.75/~pi/cgi-bin/test.py にアクセスすると、"This page is test page. "が表示される。


LED点灯

回路はRaspberry PiでLEDの点灯で記載したのもを使用する

pythonコードは以下の通り。


~/public_html/cgi-bin/led_high.py

#!/usr/bin/python


import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)

GPIO.output(25, 1)
time.sleep(2)

GPIO.cleanup()

print "Content-type: text/html"
print
print "<html>"
print "<head>"
print "<title>LEDtest</title>"
print "</head>"
print "<body>LED test success.</body>"
print "</html>"


別PCのブラウザからhttp://192.168.11.75/~pi/cgi-bin/led_high.py にアクセスすると、サーバーエラー(500)となる。

どうも、apacheではGPIOを制御できないのが原因っぽい。

そこで、apacheの実行ユーザーであるwww-dataのグループにgpioを追加してみる。

(apacheの実行ユーザーは、/etc/apache2/envvarsで確認した)


ターミナル

$ sudo gpasswd -a www-data gpio 

ユーザ www-data をグループ gpio に追加
$ sudo service apache2 restart # 再起動が必要

再び、別PCのブラウザからhttp://192.168.11.75/~pi/cgi-bin/led_high.py にアクセスすると、LEDが点灯した!!