ブラウザから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)