Raspberry Pi でブラウザーからLチカしてみる [Raspberry Pi]
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
- メディア:
コメント 0