そのボード、僕が積んでおきます。

たくさんの電子工作基板が積みっぱなしになってるので、頑張って工作しようとしていますが、どんどん溜まっていっております。

RaspberryPiで作る、WebSocketセンサーサーバ:デブコミュLTネタ

先日、古巣のCYBIRDさんのエンジニアの社内LTイベント「デブコミュ」にお呼ばれしてきた。というよりは半ば強引に参加させてもらった。イベント的には非常に熱量のある良いものだった。エンジニアが活き活きとやってて、ホント楽しかった。

https://qiita-image-store.s3.amazonaws.com/0/17346/bc1b49d7-de7e-d9a6-002d-6a366a3c73ee.png

その時の発表資料(作成:2時間)と、コード(作成:3時間)をまとめたので公開しておこうと思う。

 

【作ったもの】

RaspberryPiに接続したセンサーの情報を、WebSocket経由でPushするサーバと、それを利用したサンプルJavaScript

f:id:hine:20150317020553j:plain

 

【どうして作ろうと思ったの?】

面倒なハードウェア系の処理のコードを最小限にして、それをWebSocket経由で利用できれば、JavaScriptなどからでも簡単にセンサー情報を利用したアプリケーションが作れるのではないかと思い。センサーを扱いやすくして、センサーアプリケーションを少しでも作りやすくするための環境のプロトタイプとして。

 

【資料など】

当日の資料とコードは、それぞれ色々な環境にアップロードしてある。

 

当日の発表資料(一部更新・変更あり)

www.slideshare.net

 

コード

github.com

 

応用例

jsdo.it

 

【参考にしたもの】

LeapMotion。JavaScriptから利用するのはLeap.jsを使うのだが、実際はLeapMotionのデバイスコントローラがWebSocketサーバーとなっていてJSONでデータが提供される。この方法を真似させてもらった。

 

 【説明】

資料とコードを読んでもらうのが一番いいとして、読んだところで大したこと書いていない気もするので簡単に説明を。

 

サーバーの環境設定

RaspberryPiでI2Cを有効にする。手順はこんな感じ。

[Raspberry Pi]I2Cを使う(設定編)

 

PythonからI2Cを使えるようにする

sudo apt-get install python-smbus

 

Tornadeのインストール

sudo pip install Tornado

 

サーバーの起動

TornadeをインストールしたRaspberryPi上で、githubに載せているsensor_server.pyをroot権限で実行すると8080ポートにWebSocketサーバーが立ち上がる。

sudo ./sensor_server.py

Ctrl-Cでサーバー停止。

 

接続テスト

githubのsensor_test.htmlの中のIPアドレス部分をRaspberryPiのIPアドレスに変更して、その後ブラウザでsensor_test.htmlを開く。

うまくセンサーから情報が取得できれば、

temperature:

25.753529411764706


gyro_x:

-579


gyro_y:

23


gyro_z:

-107


accel_x:

-996


accel_y:

-80


accel_z:

15480


rotate_x:

-0.29548859803721206


rotate_y:

3.681349152747009

のように数値が表示され、細かく変化し続けているのがわかるはずだ。

 

WebSocket

今更ながら、WebSocketはこういう用途に使うのにもとても良い。Pushができるので、サーバーからクライアントへもその逆も、リアルタイムにデータを送ることができる。データがPushされて来た時も、イベントハンドラで拾えばいいだけなので、実装も書きやすい。

 

ハードウェアをラップする

WebSocketに限らないが、今後はこのようにハードウェアを直接コントロールするのではなく、比較的簡単にデータだけが提供されるようなスタイルが増えてくると思う。そうなれば、書き慣れた言語で簡単にセンサー情報が扱えるようになるので、もっともっと多くの有用なアプリケーションが出てくるのではないかと期待できる。

また、個人としてもそういうものが作れたらいいな、と思っている。

 

最後に

RaspberryPiは何台か持ってるんだけど、ほんの少し小さいというだけで、Model A+がとてもかわいい。ああかわいい。ああ、もう、かわいいったら!

 

Raspberry Pi Model A+

Raspberry Pi Model A+

 

 

ProjectBox for Raspberry Pi Model A+ (クリアー)

ProjectBox for Raspberry Pi Model A+ (クリアー)