How2CherryPy
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
このページの内容は初代Raspberry piのRaspbian GNU/Linux 9....
*CherrypyをRaspberrypiにインストールしてGPIOを使う [#jf43...
RaspberryPiのGPIOをpythonから使うのは簡単です。Lチカは簡...
次に、これをネットワーク越しに実現したいところです。それ...
そこで、ネットワーク越しに別のマシンからGPIOを操る方法を...
Pythonでwebサーバを簡単に作れるフレームワークがあるらしい...
**Cherrypyで何ができる? [#rb2aa220]
- Pythonで書いたwebサーバが簡単に作れる。
- CGIとしても呼び出せるらしい。
**インストール方法 [#d6b28289]
インストール方法がこちらに書いてありました。
- http://kzky.hatenablog.com/entry/2014/11/08/CherryPyま...
RaspberryPiにCherryPyをインストールします。Rasbianが動い...
$ sudo apt-get install python-cherrypy3
*文字を返すだけのwebサーバを作る [#k890ec59]
まずは、文字を返すだけの簡単なプログラムから試して、動作...
サーバとして稼働するので、curlコマンドやwebブラウザで文字...
**簡単なサンプル [#yd36e53b]
Wikipediaに書いてあった簡単な例です。
- https://ja.wikipedia.org/wiki/CherryPy
#!/usr/bin/env python
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
とても簡単。
class名はなんでも良いです。最後にそのクラス名をサーバとし...
これを起動するとサーバとして動き出します。アドレスはデフ...
同じマシンからcurlすると以下のようになります。
$ curl http://127.0.0.1:8080/index
Hello World!
indexは特別な名前で、省略することもできます。index.htmlみ...
$ curl http://127.0.0.1:8080
Hello World!
他のマシンからも見られるようにするには、RaspberryPiに割り...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
他のマシンからwebブラウザで見ると以下のようになります。
http://is.ocha.ac.jp/~siio/gyazo/4abd1abdfd32cca6141898fd...
**コマンドを増やす [#kbfe9936]
コマンドというか、webサーバでしたらhtmlファイル類を増やす...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def LED(self):
return "LED!"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
これでいろんなコマンドが使えます。上記の例では、以下のよ...
$ curl 192.168.0.80:8080/LED
LED!
**引数を増やす [#h8138de4]
?で引数を増やすには以下のようにします。例えば、LED?turn=o...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def LED(self,turn):
if turn == "on":
return "LED ON"
if turn == "off":
return "LED OFF"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
結果はこうなります。
$ curl 192.168.0.80:8080/LED?turn=on
LED ON
$ curl 192.168.0.80:8080/LED?turn=off
LED OFF
*GPIOを接続する [#a69582ed]
GPIOの14番にLEDを接続しました。これでLチカをします。
http://is.ocha.ac.jp/~siio/gyazo/8c1345157378530d2f849052...
GPIOを制御する関係のコマンドを追加します。エラーメッセー...
#!/usr/bin/env python
import cherrypy
import RPi.GPIO as GPIO
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
#dont bug me with warnings
GPIO.setwarnings(False)
# to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BCM)
# set up GPIO output channels
GPIO.setup(14, GPIO.OUT)
class HelloWorld(object):
def LED(self,turn):
if turn == "on":
GPIO.output(14, GPIO.HIGH)
return "LED ON"
if turn == "off":
GPIO.output(14, GPIO.LOW)
return "LED OFF"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
これを動かせば、以下のURLアクセスによりLEDがon/offします。
$ curl 192.168.0.80:8080/LED?turn=on
LED ON
$ curl 192.168.0.80:8080/LED?turn=off
LED OFF
**一つのメソッドでGETとPOSTの両方に対応している [#yd3b0cd3]
ところでwebサーバにアクセスするプロトコルにGETとPOSTがあ...
(他にもあるらしいですが、ほとんど使われていないそうです)
上記の例で、
http://192.168.0.80:8080/LED?turn=on
というURLを使い、turn=onという情報をサーバに送りました。...
同じようにturn=onという情報をサーバに送るために、POSTプロ...
GETプロトコルは、
元々はWEBサーバから情報を取得するための目的で作らました。...
GETで何かの情報をサーバに送付したい場合は、URLの中で、?に...
複数送る場合は&で区切って列挙します。
これで、本来のサーバからGETするという意味からかけ離れて、...
一方で、サーバに情報を送りつける本来のプロトコルは、POST...
GETとかPOSTをするために最初に数行の「リクエストヘッダ」を...
ヘッダの部分にはURLなどが書かれますので、GETの場合は、送...
POSTの場合は、ヘッダの後に空行を置いて、その後に「リクエ...
例えば、URLの部分は、
http://192.168.0.80:8080/LED
にしておいて、リクエストヘッダの後に、空白行をおいた後の...
turn=on
と書けば、上のGETの場合と同じデータを送ることができます。
現在では、GETもPOSTも、サーバ向けにデータを送る手法として...
- POSTの方が送付できるデータ容量が多い
- POSTはデータが見えにくいので多少は安全
- GETはテキストのみだけどPOSTはバイナリも送れる
- GETはブックマークできて使いやすい
などの違いはあるものの、
少量 (2kB程度) のテキストデータを送る分にはどちらも可能で...
Cherrypyのすごいところは、このどちらにも対応しているとこ...
なので、GET方式か、POST方式かということを悩む必要がなく、...
def LED(self,turn):
で受け取れます。
終了行:
このページの内容は初代Raspberry piのRaspbian GNU/Linux 9....
*CherrypyをRaspberrypiにインストールしてGPIOを使う [#jf43...
RaspberryPiのGPIOをpythonから使うのは簡単です。Lチカは簡...
次に、これをネットワーク越しに実現したいところです。それ...
そこで、ネットワーク越しに別のマシンからGPIOを操る方法を...
Pythonでwebサーバを簡単に作れるフレームワークがあるらしい...
**Cherrypyで何ができる? [#rb2aa220]
- Pythonで書いたwebサーバが簡単に作れる。
- CGIとしても呼び出せるらしい。
**インストール方法 [#d6b28289]
インストール方法がこちらに書いてありました。
- http://kzky.hatenablog.com/entry/2014/11/08/CherryPyま...
RaspberryPiにCherryPyをインストールします。Rasbianが動い...
$ sudo apt-get install python-cherrypy3
*文字を返すだけのwebサーバを作る [#k890ec59]
まずは、文字を返すだけの簡単なプログラムから試して、動作...
サーバとして稼働するので、curlコマンドやwebブラウザで文字...
**簡単なサンプル [#yd36e53b]
Wikipediaに書いてあった簡単な例です。
- https://ja.wikipedia.org/wiki/CherryPy
#!/usr/bin/env python
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
とても簡単。
class名はなんでも良いです。最後にそのクラス名をサーバとし...
これを起動するとサーバとして動き出します。アドレスはデフ...
同じマシンからcurlすると以下のようになります。
$ curl http://127.0.0.1:8080/index
Hello World!
indexは特別な名前で、省略することもできます。index.htmlみ...
$ curl http://127.0.0.1:8080
Hello World!
他のマシンからも見られるようにするには、RaspberryPiに割り...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
他のマシンからwebブラウザで見ると以下のようになります。
http://is.ocha.ac.jp/~siio/gyazo/4abd1abdfd32cca6141898fd...
**コマンドを増やす [#kbfe9936]
コマンドというか、webサーバでしたらhtmlファイル類を増やす...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def LED(self):
return "LED!"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
これでいろんなコマンドが使えます。上記の例では、以下のよ...
$ curl 192.168.0.80:8080/LED
LED!
**引数を増やす [#h8138de4]
?で引数を増やすには以下のようにします。例えば、LED?turn=o...
#!/usr/bin/env python
import cherrypy
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
class HelloWorld(object):
def LED(self,turn):
if turn == "on":
return "LED ON"
if turn == "off":
return "LED OFF"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
結果はこうなります。
$ curl 192.168.0.80:8080/LED?turn=on
LED ON
$ curl 192.168.0.80:8080/LED?turn=off
LED OFF
*GPIOを接続する [#a69582ed]
GPIOの14番にLEDを接続しました。これでLチカをします。
http://is.ocha.ac.jp/~siio/gyazo/8c1345157378530d2f849052...
GPIOを制御する関係のコマンドを追加します。エラーメッセー...
#!/usr/bin/env python
import cherrypy
import RPi.GPIO as GPIO
cherrypy.config.update({'server.socket_host': '192.168.0...
'server.socket_port': 8080,
})
#dont bug me with warnings
GPIO.setwarnings(False)
# to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BCM)
# set up GPIO output channels
GPIO.setup(14, GPIO.OUT)
class HelloWorld(object):
def LED(self,turn):
if turn == "on":
GPIO.output(14, GPIO.HIGH)
return "LED ON"
if turn == "off":
GPIO.output(14, GPIO.LOW)
return "LED OFF"
LED.exposed = True
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
これを動かせば、以下のURLアクセスによりLEDがon/offします。
$ curl 192.168.0.80:8080/LED?turn=on
LED ON
$ curl 192.168.0.80:8080/LED?turn=off
LED OFF
**一つのメソッドでGETとPOSTの両方に対応している [#yd3b0cd3]
ところでwebサーバにアクセスするプロトコルにGETとPOSTがあ...
(他にもあるらしいですが、ほとんど使われていないそうです)
上記の例で、
http://192.168.0.80:8080/LED?turn=on
というURLを使い、turn=onという情報をサーバに送りました。...
同じようにturn=onという情報をサーバに送るために、POSTプロ...
GETプロトコルは、
元々はWEBサーバから情報を取得するための目的で作らました。...
GETで何かの情報をサーバに送付したい場合は、URLの中で、?に...
複数送る場合は&で区切って列挙します。
これで、本来のサーバからGETするという意味からかけ離れて、...
一方で、サーバに情報を送りつける本来のプロトコルは、POST...
GETとかPOSTをするために最初に数行の「リクエストヘッダ」を...
ヘッダの部分にはURLなどが書かれますので、GETの場合は、送...
POSTの場合は、ヘッダの後に空行を置いて、その後に「リクエ...
例えば、URLの部分は、
http://192.168.0.80:8080/LED
にしておいて、リクエストヘッダの後に、空白行をおいた後の...
turn=on
と書けば、上のGETの場合と同じデータを送ることができます。
現在では、GETもPOSTも、サーバ向けにデータを送る手法として...
- POSTの方が送付できるデータ容量が多い
- POSTはデータが見えにくいので多少は安全
- GETはテキストのみだけどPOSTはバイナリも送れる
- GETはブックマークできて使いやすい
などの違いはあるものの、
少量 (2kB程度) のテキストデータを送る分にはどちらも可能で...
Cherrypyのすごいところは、このどちらにも対応しているとこ...
なので、GET方式か、POST方式かということを悩む必要がなく、...
def LED(self,turn):
で受け取れます。
ページ名: