ブラウザからGPIOを使ってみる

lighttpdインストール

$ sudo apt install lighttpd

http://raspberrypi.local/ にアクセスしてページ表示を確認

lighttpdの設定ファイル複製しておく
$ sudo cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.org

cgiを有効にする。

$ sudo lighttpd-enable-mod cgi
lighttpdを再起動
$ sudo service lighttpd force-reload

cgi設定

10-cgi.conf を修正

/etc/lighttpd/conf-available/10-cgi.conf

オリジナルを保存しとく
$ sudo cp /etc/lighttpd/conf-available/10-cgi.conf /etc/lighttpd/conf-available/10-cgi.conf.org

下記を修正

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign =( ".py" => "/usr/bin/python" )
        alias.url += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
}

lighttpdを再起動

いろいろ参考にして

いろいろなページを参考にさせていただいて

〇index.html

$ sudo vi /var/www/html/index.html

cgiプログラム

$ sudo vi /usr/lib/cgi-bin/formcgi.py

を作りました。

ランタイムエラー

GPIOのところはRPi.GPIOを使用しているのですが、CGIを呼ぶと ランタイムエラー が表示されました。

RPi.GPIOとか使うにはroot権限が必要らしい。

ユーザー www-data をgpioグループに追加

$ sudo adduser www-data gpio

ラズパイを再起動したら動きました。

正しいやり方なのか?

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>RasPi GPIO TEST</title>
</head>

<body>

<h1>GPIO 送信テスト</h1>

<form action="/cgi-bin/formcgi.py" method="post">
    <input type="submit" value="ON" name="onpb">
    <input type="submit" value="OFF" name="offpb">
</form>

</body>
</html>

formcgi.py

#!usr/bin/python

import cgi
import cgitb
import RPi.GPIO as GPIO

cgitb.enable()

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

form = cgi.FieldStorage()

if (form.getvalue('onpb')):
    GPIO.output(18, True)
    str1=('ON')

if (form.getvalue('offpb')):
    GPIO.output(18, False)
    str1=('OFF')
    GPIO.cleanup()

print("Content-Type: text/html")
print()
htmlTxt = '''
<html>
<head>
<meta charset="utf-8">
<title>Get PB Submit</title>
</head>
<body>
<h1>受信ボタン : {getmsg}</h1>
<a href="../index.html">戻る</a>
</body>
</html>
'''.format(getmsg = str1)
print(htmlTxt)