RAPIRO(ラピロ)をWebサーバにしてスマホやPCから制御する

さて、Pythonを使ってWebサーバを立ててみようと思います。これがなんとなくラピロの制御には相性良さそうなので。

まず、Pythonは2.x系と3.x系で色々変わっているらしいので、とりあえずバージョンを確認。

$ python -V

現時点(11/22時点)でRaspbianにデフォルトで入っているのは、Python 2.7.3の模様。これから使おうとしているWebフレームワーク”bottle“は2.5以上なら動くそうなので、問題なし。

次に、適当なディレクトリを作成&移動してから、bottleをとってきます。

$ wget http://bottlepy.org/bottle.py

1ファイルだけなので、とても楽。

次に、bottle.pyと同じ場所にサンプルソースを作成。

from bottle import route, run

@route('/hello')
def hello():
  return "Hello World!"

run(host='192.168.xxx.xxx', port=10080, debug=True)

hostのところは、Raspberry Piに割り当てられているIPアドレスを設定。

作成できたら、以下で実行。

 $ python rapiro_server.py
Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://192.168.xxx.xxx:10080/
Hit Ctrl-C to quit.

同じローカルネットのPCやスマホのブラウザで”http://192.168.xxx.xxx:10080/hello”にアクセスしてみて、”Hellow World!”が表示されれば成功です。

…うーん、node.jsの10倍、Tomcatの100倍ぐらい簡単だった気がします。

次に、rapiro_server.pyをもうちょっとだけ改造して、ラピロをブラウザから動かしてみます。

from bottle import route, run
import serial

com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10);

@route('/hello')
def hello():
  com.write("#M5")
  return "Hello!"

@route('/stop')
def stop():
  com.write("#M0")
  return "OK, Stopped."

run(host='192.168.xxx.xxx', port=10080, debug=True)

これだけ。

“http://192.168.xxx.xxx:10080/hello”で両手を挙げて頭を振り、”http://192.168.xxx.xxx:10080/stop”で止まるはず。

…うわあ、node.jsとTomcatの苦労は何だったんだ、と思うぐらいに簡単にできてしまった。

HTTPリクエストさえ発行できれば、発行元はプログラムでもブラウザでも何でもありだし、PCからだろうがスマホからだろうが何でもありなので、これができればスマホリモコンなんかは簡単に作れると思います。HTML+CSS+JavaScriptあたりでブラウザアプリを作り込んでいくことになるのかなーと思っています。

一個、これを使って、意味はないけど楽しそうな制御の仕方を思いついたので、別記事で試してみます。