Raspberry Pi で CGI を使えるようになったので、次はブラウザ経由でLチカをしてみたいと思います。
GPIOをコントロールするために、Python からも使える WiringPi というライブラリをインストールします。WiringPi はインストール時にコンパイルされるため、あらかじめ Python開発用ライブラリをインストールしておきます。
WiringPi を Python のPip インストーラーを使ってインストールします。
GPIOをコントロールする Python ファイルを "~/cgi-bin"に gpio.py として作ります。
さて、これを動かすとどうなるでしょうか?
うーん、怒られてしまいました。しかし、CGI経由なので root になりようがありません。いろいろ調べてみたところ、セットアップで呼ぶ関数を代えればよさそうです。
PiSetupGpio を PiSetupSys に代えています。これはGPIO設定をGPIOコントロール関数ではなくシステム設定を使いますよ、というおまじないです。なので pinMode もなくなっています。
GPIOの設定は、 CGIHTTPServer を起動する前に行う必要があります。この例では GPIO18 を外部からコントロールできるようエキスポートし、かつ出力に設定しています。
無事に動いたようです。少し見苦しいですが、動いている様子を撮ってみました。
さて、次はサーボモーターをコントロールしてみようかな。
(^_^)/~
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 "<html><body>"
print "<h1>GPIO 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 "<html><body>"
print "<h1>GPIO 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
OSOYOO(オソヨー) DIY センサーモジュール キット 常用20個 for Arduino/raspberry ボード 学生実験に最適
- 出版社/メーカー: vership
- メディア: