Raspberry Pi で CGI を使えるようになったので、次はブラウザ経由でLチカをしてみたいと思います。





GPIOをコントロールするために、Python からも使える WiringPi というライブラリをインストールします。WiringPi はインストール時にコンパイルされるため、あらかじめ Python開発用ライブラリをインストールしておきます。



pi@raspberrypi:~$ sudo apt-get install python-dev


WiringPi を Python のPip インストーラーを使ってインストールします。


pi@raspberrypi:~$ sudo apt-get pip install wiringpi2

Downloading/unpacking wiringpi2
Downloading wiringpi2-2.32.3.tar.gz
... snip...

Successfully installed wiringpi2 wiringpi
Cleaning up...
pi@raspberrypi:~$
 
 
GPIOをコントロールする Python ファイルを "~/cgi-bin"に gpio.py として作ります。


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

import cgi
import wiringpi2

wiringpi2.wiringPiSetupGpio()
wiringpi2.pinMode(18, 1) # sets GPIO18 to output

if (wiringpi2.digitalRead(18) == 1):
wiringpi2.digitalWrite(18, 0)
else:
wiringpi2.digitalWrite(18, 1)

print "Content-type: text/html\n\n"
print "&lthtml>&ltbody>"
print "&lth1&gtGPIO is %d</h1>" % wiringpi2.digitalRead(18)
print "</body></html>"


さて、これを動かすとどうなるでしょうか?


pi@raspberrypi:~$ python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
192.168.2.103 - - [16/Jun/2017 22:15:35] "GET /cgi-bin/gpio.py HTTP/1.1" 200 -
wiringPiSetup: Must be root. (Did you forget sudo?)

 
 
うーん、怒られてしまいました。しかし、CGI経由なので root になりようがありません。いろいろ調べてみたところ、セットアップで呼ぶ関数を代えればよさそうです。


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

import cgi
import wiringpi2

wiringpi2.wiringPiSetupSys()

if (wiringpi2.digitalRead(18) == 1):
wiringpi2.digitalWrite(18, 0)
else:
wiringpi2.digitalWrite(18, 1)

print "Content-type: text/html\n\n"
print "&lthtml>&ltbody>"
print "&lth1&gtGPIO is %d</h1>" % wiringpi2.digitalRead(18)
print "</body></html>"



PiSetupGpio を PiSetupSys に代えています。これはGPIO設定をGPIOコントロール関数ではなくシステム設定を使いますよ、というおまじないです。なので pinMode もなくなっています。

GPIOの設定は、 CGIHTTPServer を起動する前に行う必要があります。この例では GPIO18 を外部からコントロールできるようエキスポートし、かつ出力に設定しています。



pi@raspberrypi:~$ gpio export 18 out
pi@raspberrypi:~$ python -m CGIHTTPServer

Serving HTTP on 0.0.0.0 port 8000 ...
192.168.2.103 - - [16/Jun/2017 23:15:35] "GET /cgi-bin/gpio2.py HTTP/1.1" 200 -
192.168.2.103 - - [16/Jun/2017 23:16:38] "GET /cgi-bin/gpio2.py HTTP/1.1" 200 -
192.168.2.103 - - [16/Jun/2017 23:18:12] "GET /cgi-bin/gpio2.py HTTP/1.1" 200 -

 
 
無事に動いたようです。少し見苦しいですが、動いている様子を撮ってみました。





さて、次はサーボモーターをコントロールしてみようかな。
(^_^)/~





Raspberry Pi 2 Server Essentials

  • 作者: Piotr J Kula
  • 出版社/メーカー: Packt Publishing
  • 発売日: 2016/04/29
  • メディア: ペーパーバック



Raspberry Pi 3 MODEL B 【RS正規流通品】

  • 出版社/メーカー: Raspberry Pi
  • メディア: Tools & Hardware