ohotech特盛#13 スマホで操作するカメラ付きwi-fiラジコンカー ―...
TRANSCRIPT
私の年1回の学習発表会です
• 私がどんなことをどの程度成し遂げたかをわ
かってもらえたら目標達成です
• さらに何かひとつでも
「あれやってみようかな」
「これ面白そう」
と共感を得られることがあれば、仲間が増えた
ような気がして嬉しいですね!
で、今年の作品 =「スマホで操作するカメラ付きWi-Fiラジコンカー」
• C#とラズパイとWebアプリの技術で作っちゃ
います。
※今回は「特盛」なので、玄人向けということで、「ラズパイとはなんぞや?」
「C#とは?」といった説明はスライドからは割愛させていただきます。
HTTP 通信
Raspberry Pi Model B+Spec ARM 700MHz / 512MB RAM
OS Linux Distribution “Raspbian”
Runtime mono
HTTP Server XSP3
Application ASP.NET MVC3 / C#
Wi-Fiで直接通信
• スマホの Web ブラウザで操作
• Webカメラで撮影した画像を1fpsで表示
USB 接続
Webカメラ
モータードライバ x 3
モーター x 3基
GPIO
USB 接続 Wi-Fiドングル
構成
GPIOのピンの電圧On/Offは簡単
• ラズパイの GPIO のピンは「ファイル」とし
て読み書きできる
• なので、HTTP 要求に応じて所定の「ファイ
ル」に書き込む Web アプリをラズパイ上で動
かせば、それはすなわち、GPIO のピンの電圧
を On/Off する Web アプリになる
ファイルの読み書きなのでシェルコマンドでもできる
$ echo 25 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio/25/direction
$ echo 1 > /sys/class/gpio/gpio/25/value
Web アプリは C# で書きました
• ラズパイでも C# 製の Web アプリが動きます
• 「sudo apt-get install mono-complete」っ
てやっておけば、実行環境の準備はOK!
• xsp3 っていうコマンドで ASP.NET な Web
サーバーを起動できたり
※厳密には mono を構成する全ては要らないんだろうけど、面倒なので mono-complete!
なぜ C#?
• 単に自分がC#に慣れてるから
• もし皆さんが似たようなことやるとしても、
Python、Ruby、Node.js、etc... 好きな言
語・処理系でできる程度には簡単なアプリです
Visual Studioで開発は超快適♪
• Windows 上でビルドした .exe や .dll を、そ
のままラズパイに送り込めば動きます
• C#、というか .NET 製な .exe や .dll は、IL
(中間言語) を収録しているので、同じバイナ
リファイルが Windows 上でもラズパイ上で
も動く
※ただしカメラへのアクセス方法とか、GPIOのデバイスファイルのパス
とかはWinとラズパイとでは違うので、#if~#endif のプリプロセッ
サでコンパイル仕分けたり、若干の互換レイヤーを書いたり、は必要。
カメラは USB 接続
• ラズパイはUSB接続機器が使えるのが楽ちん。
• NFC (Felica) の読み書きとか、GPS とか、色々使える
• カメラでの画像撮影は、Linux 系では鉄板な
fswebcamコマンドを実行することで実現
※画像はストリーミングじゃなくて、オレオレ実装なポーリン
グで毎秒1フレームで更新してます。ここだけ複数スレッドが
交錯するため、同期処理がちょっと凝った作りにしてます。
HTML側は jQueryでゴリゴリ
• AngularJS 等、MV* なライブラリは未使用
• 但し JavaScript を生で書かずに TypeScript
使用。
• TypeScript に慣れたので...
USB 接続
USB 接続 Wi-Fiドングル
カメラ
Wi-Fi
プロセッサ
GPIO
ラズパイ、GPIOを介して実世界に作用するのは面白いのですが...
• 配線やパッケージングが厄介。
• 追加の部品も多く、結果として安く済まない。
ケース
電源用MicroUSBケーブルバッテリー
SSID ohotech13a
http://192.168.43.210/ http://192.168.43.210/controller.html
白・黒の窓の開閉が制御される側 窓の開閉切替を指示する側