Raspberry Piで無線ネットワークカメラを作る

Raspberry Piで無線ネットワークカメラを作ってみた。

Raspberry Pi本体 3500円、Webカメラ 1000円ぐらい、無線LANドングル 889円、その他は手持ち 0円、計 5500円ぐらい。もうちょっとお金出せば、さらにパンチ・チルトができるカメラが手に入るので、経済的にはあまり意味のないことではある。無線LANドングルは、PLANEXのGW-USValue-EZを使うことにした。RealtechのRTL8188CUSという石を使っていて、Linuxのドライバがあり、Raspberry Piのフォーラムにお手軽な手順が紹介されているのでこれに決めた。まずシェルスクリプトをダウンロードしてきて実行する。これでドライバがインストールされる。なお、無線LANによる接続ができるまでは、Ethernet経由のsshまたはシリアル接続で作業する。

install-rtl8188cus-latest.sh

  1. $ sudo /boot/install-rtl8188cus.sh

次にネットワークインターフェースの設定をする。ネットワークカメラは固定IPにする。

  1. $ sudo nano /etc/network/interfaces
  2. auto lo
  3. iface lo inet loopback
  4. iface eth0 inet dhcp
  5. allow-hotplug wlan0
  6. auto wlan0
  7. #iface wlan0 inet dhcp
  8. iface wlan0 inet static
  9. address 192.168.1.xxx
  10. network 192.168.1.0
  11. netmask 255.255.255.0
  12. broadcast 192.168.1.255
  13. gateway 192.168.1.yyy
  14. dns-nameservers 192.168.1.zzz
  15. wireless-essid ここにSSIDを書く
  16. wireless-key ここにSSIDに対応するパスワードを書く

リブートすると無線で設定したIPアドレス接続できるようになる。

  1. $ ifconfig
  2. eth0 Link encap:Ethernet HWaddr b8:27:eb:**:**:**
  3. UP BROADCAST MULTICAST MTU:1500 Metric:1
  4. RX packets:893 errors:0 dropped:0 overruns:0 frame:0
  5. TX packets:601 errors:0 dropped:0 overruns:0 carrier:0
  6. collisions:0 txqueuelen:1000
  7. RX bytes:283808 (277.1 KiB) TX bytes:74854 (73.0 KiB)
  8. lo Link encap:Local Loopback
  9. inet addr:127.0.0.1 Mask:255.0.0.0
  10. UP LOOPBACK RUNNING MTU:16436 Metric:1
  11. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  12. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  13. collisions:0 txqueuelen:0
  14. RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
  15. wlan0 Link encap:Ethernet HWaddr 00:22:cf:**:**:**
  16. inet addr:192.168.1.xxx Bcast:192.168.1.255 Mask:255.255.255.0
  17. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  18. RX packets:146 errors:0 dropped:8787 overruns:0 frame:0
  19. TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
  20. collisions:0 txqueuelen:1000
  21. RX bytes:28883 (28.2 KiB) TX bytes:11930 (11.6 KiB)
  1. $ iwconfig
  2. lo no wireless extensions.
  3. eth0 no wireless extensions.
  4. wlan0 IEEE 802.11bg ESSID:"********" Nickname:"<WIFI@REALTEK>"
  5. Mode:Managed Frequency:2.417 GHz Access Point: 00:18:84:**:**:**
  6. Bit Rate:54 Mb/s Sensitivity:0/0
  7. Retry:off RTS thr:off Fragment thr:off
  8. Power Management:off
  9. Link Quality=100/100 Signal level=100/100 Noise level=0/100
  10. Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
  11. Tx excessive retries:0 Invalid misc:0 Missed beacon:0

さてWebカメラであるが、UVCクラスのドライバがあらかじめインストールされているようなので、手持ちのUVCクラスのカメラLogitech C270を使うことにした。、、が、どうもこのカメラが安定しないので、結局ここで使ったLogicool Qcam Communicate Deluxe(QCAM-130X)に切り替えた。

  1. $ lsusb
  2. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  3. Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
  4. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
  5. Bus 001 Device 004: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]
  6. Bus 001 Device 005: ID 046d:0992 Logitech, Inc. QuickCam Communicate Deluxe

luvcviewを使ってカメラの映像が表示される事を確認する。なお、このツールはカメラパラメータの設定ができるようになっているが、どうも思うように変更できず、あまり信頼性がない。

  1. $ sudo apt-get install luvcview
  2. $ luvcview
カメラパラメータの設定ならv4l2ucpというツールの方がまだましのようだ。
  1. $ sudo apt-get install v4l2ucp
  2. $ v4l2ucp

v4l2ucpはPreview > configure previewメニューでPreviewするためのツールを設定できる。標準では、mplayerが設定されているが、今回はこれをluvcviewに変更した。

これで、カメラの準備は終わりだ。最後に、カメラの映像をストリーム配信するソフトのインストールをする。定番のmjpg-streamerだ。このソフトは、ソースをダウンロードしてコンパイルする。

  1. $ sudo apt-get update
  2. $ sudo apt-get install subversion
  3. $ sudo apt-get install libjpeg-dev imagemagick
  4. $ svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
  5. $ cd mjpg-streamer/mjpg-streamer
  6. $ make

実行モジュールがmakeしたディレクトリに作られるので、実行して確認してみる。VGAサイズの映像を15fpsでポート8080から配信するならこのように指定する。停止はCtrl+Cで。

  1. $ sudo ./mjpg_streamer -i "./input_uvc.so -f 15 -r 640x480 -d /dev/video0" -o "./output_http.so -w ./www -p 8080"

パソコンのブラウザで確認

  1. http://Rasberry Piの無線LANアドレス:mjpg_streamerのポート/

wwwディレクトリに用意されているサンプルページが表示される。

このサンプルで映像を表示する方法が何通りか紹介されているが、ブラウザによっては見えないものもある。

IEFireFoxChrome
Static(静止画)
Stream(ストリームから直接動画表示)×
Java(動画)×*1
Javascript(動画)

*1: www直下にあるアプレットcambozola.jarを最新のものと置き換えれば○なお、ストリームのURLは次のとおりである。

  1. http://Rasberry Piの無線LANアドレス:mjpg_streamerのポート/?action=stream

最後に起動用のシェルスクリプトを作って、ブート時に自動的に起動するよう設定。

  1. $ sudo nano start_with_args
  2. cd /home/pi/mjpg-streamer/mjpg-streamer
  3. sudo ./mjpg_streamer -i "./input_uvc.so -f 15 -r 640x480 -d /dev/video0" -o "./output_http.so -w ./www -p 8080" &
  4. $ sudo nano /etc/rc.local
  5.     :
  6. # exitの前に次の一行を追加
  7. /home/pi/mjpg-streamer/mjpg-streamer/start_with_args &
  8. exit 0

おまけとして、動体検知のカメラとして使ってみた。

2012年10月05日