Raspberry Piで無線ネットワークカメラを作ってみた。
Raspberry Pi本体 3500円、Webカメラ 1000円ぐらい、無線LANドングル 889円、その他は手持ち 0円、計 5500円ぐらい。もうちょっとお金出せば、さらにパンチ・チルトができるカメラが手に入るので、経済的にはあまり意味のないことではある。無線LANドングルは、PLANEXのGW-USValue-EZを使うことにした。RealtechのRTL8188CUSという石を使っていて、Linuxのドライバがあり、Raspberry Piのフォーラムにお手軽な手順が紹介されているのでこれに決めた。まずシェルスクリプトをダウンロードしてきて実行する。これでドライバがインストールされる。なお、無線LANによる接続ができるまでは、Ethernet経由のsshまたはシリアル接続で作業する。
$ sudo /boot/install-rtl8188cus.sh
次にネットワークインターフェースの設定をする。ネットワークカメラは固定IPにする。
$ sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
#iface wlan0 inet dhcp
iface wlan0 inet static
address 192.168.1.xxx
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.yyy
dns-nameservers 192.168.1.zzz
wireless-essid ここにSSIDを書く
wireless-key ここにSSIDに対応するパスワードを書く
リブートすると無線で設定したIPアドレス接続できるようになる。
$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:**:**:**
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:893 errors:0 dropped:0 overruns:0 frame:0
TX packets:601 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:283808 (277.1 KiB) TX bytes:74854 (73.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 00:22:cf:**:**:**
inet addr:192.168.1.xxx Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:146 errors:0 dropped:8787 overruns:0 frame:0
TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:28883 (28.2 KiB) TX bytes:11930 (11.6 KiB)
$ iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11bg ESSID:"********" Nickname:"<WIFI@REALTEK>"
Mode:Managed Frequency:2.417 GHz Access Point: 00:18:84:**:**:**
Bit Rate:54 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=100/100 Signal level=100/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
さてWebカメラであるが、UVCクラスのドライバがあらかじめインストールされているようなので、手持ちのUVCクラスのカメラLogitech C270を使うことにした。、、が、どうもこのカメラが安定しないので、結局ここで使ったLogicool Qcam Communicate Deluxe(QCAM-130X)に切り替えた。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 005: ID 046d:0992 Logitech, Inc. QuickCam Communicate Deluxe
luvcviewを使ってカメラの映像が表示される事を確認する。なお、このツールはカメラパラメータの設定ができるようになっているが、どうも思うように変更できず、あまり信頼性がない。
$ sudo apt-get install luvcview
$ luvcview
$ sudo apt-get install v4l2ucp
$ v4l2ucp
v4l2ucpはPreview > configure previewメニューでPreviewするためのツールを設定できる。標準では、mplayerが設定されているが、今回はこれをluvcviewに変更した。
これで、カメラの準備は終わりだ。最後に、カメラの映像をストリーム配信するソフトのインストールをする。定番のmjpg-streamerだ。このソフトは、ソースをダウンロードしてコンパイルする。
$ sudo apt-get update
$ sudo apt-get install subversion
$ sudo apt-get install libjpeg-dev imagemagick
$ svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer/mjpg-streamer
$ make
実行モジュールがmakeしたディレクトリに作られるので、実行して確認してみる。VGAサイズの映像を15fpsでポート8080から配信するならこのように指定する。停止はCtrl+Cで。
$ sudo ./mjpg_streamer -i "./input_uvc.so -f 15 -r 640x480 -d /dev/video0" -o "./output_http.so -w ./www -p 8080"
パソコンのブラウザで確認
http://Rasberry Piの無線LANアドレス:mjpg_streamerのポート/
wwwディレクトリに用意されているサンプルページが表示される。
このサンプルで映像を表示する方法が何通りか紹介されているが、ブラウザによっては見えないものもある。
IE | FireFox | Chrome | |
Static(静止画) | ○ | ○ | ○ |
Stream(ストリームから直接動画表示) | × | ○ | ○ |
Java(動画) | ○ | ×*1 | ○ |
Javascript(動画) | ○ | ○ | ○ |
*1: www直下にあるアプレットcambozola.jarを最新のものと置き換えれば○なお、ストリームのURLは次のとおりである。
http://Rasberry Piの無線LANアドレス:mjpg_streamerのポート/?action=stream
最後に起動用のシェルスクリプトを作って、ブート時に自動的に起動するよう設定。
$ sudo nano start_with_args
cd /home/pi/mjpg-streamer/mjpg-streamer
sudo ./mjpg_streamer -i "./input_uvc.so -f 15 -r 640x480 -d /dev/video0" -o "./output_http.so -w ./www -p 8080" &
$ sudo nano /etc/rc.local
:
# exitの前に次の一行を追加
/home/pi/mjpg-streamer/mjpg-streamer/start_with_args &
exit 0
おまけとして、動体検知のカメラとして使ってみた。