So-net無料ブログ作成
検索選択

Raspberry Pi でブラウザーからLチカしてみる [Raspberry Pi]

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


DSC04589.JPG


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

Raspberry Pi 2 Server Essentials

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



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

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

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