Top Banner
スマホで操作 する カメラ付き Wi - Fi ラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―
50

Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Feb 14, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

スマホで操作するカメラ付きWi-Fiラジコンカー

― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Page 2: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

今晩の宿「ホテルニューおはる」¥3,600

Page 3: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

#ohotech

ハッシュタグ#ohotechでツイートはじめ、facebook やブログなどへの投稿OKです

Page 4: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

最近は TypeScript をたくさん書いてます

Page 5: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

皆さんの興味分野は何ですか?SignalYN http://j.mp/1JG1DWJ

Page 6: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Goalこのセッションで伝えたいこと

Page 7: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

私の年1回の学習発表会です

• 私がどんなことをどの程度成し遂げたかをわ

かってもらえたら目標達成です

• さらに何かひとつでも

「あれやってみようかな」

「これ面白そう」

と共感を得られることがあれば、仲間が増えた

ような気がして嬉しいですね!

Page 8: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

昨年のOhotechで学んだ成果投げ銭 as a Service http://j.mp/1GknH9h

Page 9: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

で、今年の作品 =「スマホで操作するカメラ付きWi-Fiラジコンカー」

• C#とラズパイとWebアプリの技術で作っちゃ

います。

※今回は「特盛」なので、玄人向けということで、「ラズパイとはなんぞや?」

「C#とは?」といった説明はスライドからは割愛させていただきます。

Page 10: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Let’s try it!試してみよう!

Page 11: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

SSID ohotech13a

http://192.168.43.200/

Page 12: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Why do you made it?制作の動機

Page 13: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

OLYMPUS AIR A01 を見たのがきっかけ

Page 14: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ラズパイ使えば、同じようなの作れるんじゃね?

Page 15: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

これを...

Page 16: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

こうじゃ。

Page 17: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

勉強会コミュニティ & 宿泊イベント

Code in 定山渓温泉

Page 18: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

...の集合写真を撮るのに使おう!

Page 19: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

と思ったら、クロージングどたばたして忘れてしまった...orz

☁☁

Page 20: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

How does it work?仕組みの解説

Page 21: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

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ドングル

構成

Page 22: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

GPIOのピンの電圧On/Offは簡単

• ラズパイの GPIO のピンは「ファイル」とし

て読み書きできる

• なので、HTTP 要求に応じて所定の「ファイ

ル」に書き込む Web アプリをラズパイ上で動

かせば、それはすなわち、GPIO のピンの電圧

を On/Off する Web アプリになる

Page 23: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ファイルの読み書きなのでシェルコマンドでもできる

$ echo 25 > /sys/class/gpio/export

$ echo out > /sys/class/gpio/gpio/25/direction

$ echo 1 > /sys/class/gpio/gpio/25/value

Page 24: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

模型組み立てのほうが、よっぽど大変

Page 25: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Web アプリは C# で書きました

• ラズパイでも C# 製の Web アプリが動きます

• 「sudo apt-get install mono-complete」っ

てやっておけば、実行環境の準備はOK!

• xsp3 っていうコマンドで ASP.NET な Web

サーバーを起動できたり

※厳密には mono を構成する全ては要らないんだろうけど、面倒なので mono-complete!

Page 26: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

なぜ C#?

• 単に自分がC#に慣れてるから

• もし皆さんが似たようなことやるとしても、

Python、Ruby、Node.js、etc... 好きな言

語・処理系でできる程度には簡単なアプリです

Page 27: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Visual Studioで開発は超快適♪

• Windows 上でビルドした .exe や .dll を、そ

のままラズパイに送り込めば動きます

• C#、というか .NET 製な .exe や .dll は、IL

(中間言語) を収録しているので、同じバイナ

リファイルが Windows 上でもラズパイ上で

も動く

※ただしカメラへのアクセス方法とか、GPIOのデバイスファイルのパス

とかはWinとラズパイとでは違うので、#if~#endif のプリプロセッ

サでコンパイル仕分けたり、若干の互換レイヤーを書いたり、は必要。

Page 28: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

カメラは USB 接続

• ラズパイはUSB接続機器が使えるのが楽ちん。

• NFC (Felica) の読み書きとか、GPS とか、色々使える

• カメラでの画像撮影は、Linux 系では鉄板な

fswebcamコマンドを実行することで実現

※画像はストリーミングじゃなくて、オレオレ実装なポーリン

グで毎秒1フレームで更新してます。ここだけ複数スレッドが

交錯するため、同期処理がちょっと凝った作りにしてます。

Page 29: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

HTML側は jQueryでゴリゴリ

• AngularJS 等、MV* なライブラリは未使用

• 但し JavaScript を生で書かずに TypeScript

使用。

• TypeScript に慣れたので...

Page 30: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

実はこの手のアプリは初めてではないです

Page 31: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

まずは実証実験 http://j.mp/1KTAWiZ

LED点灯/消灯と、押ボタンのOn/Off状態をリアルタイムで表示する、Webアプリの実装。

Page 32: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

次にクリスマスツリー http://j.mp/1MJikFe

こどもたち向け。スマホのブラウザから、点灯させるLED の色が指定できる。

Page 33: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Build INSIDERに寄稿 http://j.mp/signalr-rbpi

Page 34: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ということで、

Page 35: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ドォーン!

どやっ!

Page 36: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ソースコードは GitHub にありますhttps://github.com/codejp/code2015-cameracar

Page 37: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

完!Happy Coding :)

Page 38: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

One more thing.

Page 39: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

USB 接続

USB 接続 Wi-Fiドングル

カメラ

Wi-Fi

プロセッサ

GPIO

ラズパイ、GPIOを介して実世界に作用するのは面白いのですが...

• 配線やパッケージングが厄介。

• 追加の部品も多く、結果として安く済まない。

ケース

電源用MicroUSBケーブルバッテリー

Page 40: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

ここで、皆さんお持ちのスマホを見てみましょう。

Page 41: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

カメラ

Wi-Fi

バッテリー、配線込み

プロセッサ

ケーシング済み

Page 42: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

カメラ

Wi-Fi

バッテリー、配線込み

プロセッサ

ケーシング済み

GPIO がないだけ で、

ほかは完璧じゃないッスか!

Page 43: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

スマホの画面を白黒明滅させるのを、光学センサで読み取れば、

GPIO の OUT 相当が実現できるのでは!?

Page 44: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Let’s try it!試してみよう!

Page 45: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

SignalR 使う。http://www.slideshare.net/jsakamoto/osc13-do

Page 46: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

SSID ohotech13a

http://192.168.43.210/ http://192.168.43.210/controller.html

白・黒の窓の開閉が制御される側 窓の開閉切替を指示する側

Page 47: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

LED

フォトダイオード

白/黒が開閉するSignalRなWebアプリをブラウザで

開いている

Page 48: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

LEDが光った!

ブラウザの表示コンテンツが白くなったら、この明かりにフォトダイオードが反応して...

動画 https://youtu.be/bqUF-Atn8y4

Page 49: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

カメラ

Wi-Fi

バッテリー、配線込み

プロセッサ

ケーシング済み

GPIO の Out は達成!

Page 50: Ohotech特盛#13 スマホで操作するカメラ付きWi-Fiラジコンカー ― C#とラズパイとWebアプリの技術で作っちゃおう! ―

Learn, Practice, Share.

Happy Coding :)