Fonera 2.0を使ってケーブルの届かない場所の映像を無線LANでアクセスポイントまで飛ばし、インターネットに配信する実験をしてみた。
今回使用した機材は次の通り。無線LANのアクセスポイントとして以前にFonera+を改造したものを使用したが、特にFonera+である必要はなく一般の市販品でもかまわない。たまたま手持ちがこれしかなかったのでこれを使ったというだけである。ウェブカメラはUVC(USB Video Class)仕様の市販品ならまず問題ないはず。今回の実験では、移動のための手段と電源確保のために乗用車にカメラを搭載した。
機材 | 型式 |
---|---|
ウェブカメラ | Logicool Qcam Communicate Deluxe(QCAM-130X) |
カメラ側無線LAN装置 | Fonera 2.0 (FON2202)を改造 |
無線LANアクセスポイント | Fonera+ (FON2201)を改造 |
カメラ側電源 | 車載用12v-5v変換基板(自作)、ケーブル |
Fonera 2.0のオリジナルのファームウェアにはプラグインとしてウェブカメラの機能が備わっているのでこれを使うことも可能だがいくつか欠点がある。
そこで、より自由度の高いOpenWrtのファームウェアに書き換えることにした。ファームウェアの書き換えにはFonera 2.0のシリアルピンを使うわけだが、シリアル-USB変換基板FT232RXを使ってPCに接続した。
今回は、開発用ホストPCとしてUbuntu 9.04を使用した。今回は端末エミュレータとしてminicomを使ってみた。Ubuntu 9.04にはminicomがインストールされていなかったのでインストールする。
$ sudo aptitude update
$ sudo aptitude install minicom
シリアル-USB変換基板のデバイスドライバは既にインストールされていた(と思う)ので、USBケーブルを接続するだけで認識した。デバイスファイルは/dev/ttyUSB0となった。
$ dmesg
中略
[ 1117.753277] ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
[ 1117.753390] usb 1-2: Detected FT232RL
[ 1117.753606] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0
[ 1117.753674] usbcore: registered new interface driver ftdi_sio
[ 1117.753686] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
シリアル通信のパラメータは、ホームディレクトリに次のファイルを作成することによって設定する。
~/.minirc.dfl
pu port /dev/ttyUSB0
pu baudrate 9600
pu minit
pu rtscts No
これで、Fonera 2.0のRedBootと会話するための通信経路ができたわけだが、ここでもう1つFonera 2.0のファームウェアのイメージを送り込むための通信経路を用意する。RedBootにはシリアル経由でファームウェアを送り込む機能もあるが、あまりにも時間がかかるので、今回は普通にTFTPサーバ経由(これがデフォルト)にすることにした。TFTPでファームウェアのイメージを送り込むためには、シリアル接続のほかのイーサネット接続が必要になるわけだが、ハード的にはFonera 2.0のComputerポート(イーサネットコネクタの黒い方)とPCをイーサネットケーブルで直結すればよい。ただ、Ubuntu 9.04には、TFTPサーバはインストールされていないのでインストールする必要がある。
$ sudo aptitude minicominstall atftpd
$ sudo /etc/init.d/openbsd-inetd start
次に、OpenWrtのファームウェアのイメージファイルをhttp://kamikaze.openwrt.org/8.09.1/atheros/からダウンロードしてくる。入手するイメージは2つあり、1つはカーネル、もう1つはルートファイルシステムである。openwrt-atheros-vmlinux.lzma (786,432バイト)openwrt-atheros-root.squashfs (1,703,936バイト)ダウンロードしたら、これらのイメージファイルをTFTPの/var/lib/tftpboot/ディレクトリにコピーしFonera 2.0から読み出せるようパーミッションを変更しておく。
$ sudo cp ~/openwrt-* /var/lib/tftpboot/
$ sudo chmod o+r /var/lib/tftpboot/openwrt-*
Fonera2.0のRedBootがTFTPサーバを認識できるよう、PCのIPアドレスをFonera 2.0と同じセグメントにする必要がある。Fonera 2.0のRedBootでは自分のアドレスを192.168.1.1/24にする予定なので、PCのIPアドレスは192.168.1.10/24にした。これで、Fonera 2.0のファームウェア書き換えに必要なPC側の準備は終わった。minicomを起動してFonera 2.0の電源を入れる。minicomの画面に+と表示された時点でCtrl+Cキーを打ってRedBootモードに入る。「=== Excecuting boot script in xx seconds - enter ^C to abort」というメッセージはもう少し後のタイミングで表示されるが、あらかじめCtrl+Cキーを打っておいてもかまわないようだ。
$ minicom
TFTP経由でOpenWrtのイメージを読み込むにあたって、RedBoot側では自分のIPアドレスとTFTPサーバーのIPアドレスを設定する必要がある。
RedBoot> ip_address -l 192.168.1.1/24 -h 192.168.1.10
IP: 192.168.1.1/255.255.255.0, Gateway: 192.168.1.254
Default server: 192.168.1.10
RedBoot>
現在のフラッシュメモリのパーティションを確認しておく。loaderとimageとimage2の3つがFonera 2.0のオリジナルのファームウェアだ。
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0x80040400 0x00030000 0xA8000000
loader 0xA8030000 0x80100000 0x00010000 0x80100000
image 0xA8040000 0x80040400 0x00470004 0x80040400
image2 0xA8660000 0xA8660000 0x00140000 0x80040400
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
RedBoot>
フラッシュメモリを初期化する。
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>
フラッシュメモリのパティションをみる。Fonera 2.0のオリジナルのファームウェアがなくなった。さようなら、フリッパー君。
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
RedBoot>
PCに用意しておいたカーネルのイメージファイルをTFTP経由で読み込む。
RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x801003ff, assumed entry at 0x80040400
RedBoot>
読み込んだカーネルのイメージをフラッシュメモリに書き込む。
RedBoot> fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.17
... Erase from 0xa8030000-0xa80f0000: ............
... Program from 0x80040400-0x80100400 at 0xa8030000: ............
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>
フラッシュメモリのパティションをみる。vmlinux.bin.17という名前でカーネルが書き込まれた。
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
vmlinux.bin.17 0xA8030000 0x80041000 0x000C0000 0x80041000
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
RedBoot>
未使用のフラッシュメモリの大きさを調べる。差をとって 0xA87E0000 - 0xA80F0000 = 0x006f0000 が求めたい大きさ。
RedBoot> fis free
0xA80F0000 .. 0xA87E0000
RedBoot>
2つ目のイメージファイル、ルートファイルシステムのイメージファイルをTFTPサーバー(PC)から読み込む。
RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x801e03ff, assumed entry at 0x80040400
RedBoot>
読み込んだルートファイルシステムのイメージをフラッシュメモリに書き込む。残り全てのフラッシュメモリの領域をルートファイルシステムにする。
RedBoot> fis create -l 0x006f0000 rootfs
... Erase from 0xa80f0000-0xa87e0000: ..........................................
... Program from 0x80040400-0x801e0400 at 0xa80f0000: ..........................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
vmlinux.bin.17 0xA8030000 0x80041000 0x000C0000 0x80041000
rootfs 0xA80F0000 0x80040400 0x006F0000 0x80040400
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
RedBoot>
RedBootが起動時に新しく書き込んだファームウェアを起動するよう、RedBootの起動スクリプトを書き換える。
RedBoot> fconfig boot_script_data
boot_script_data:
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.17
>> exec
>>
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>
RedBootの起動スクリプトが正しく書き換わったか確認する。
RedBoot> fconfig -l -n
boot_script: true
boot_script_data:
.. fis load -l vmlinux.bin.17
.. exec
boot_script_timeout: 2
bootp: false
bootp_my_gateway_ip: 192.168.1.254
bootp_my_ip: 192.168.1.1
bootp_my_ip_mask: 255.255.255.0
bootp_server_ip: 192.168.1.254
console_baud_rate: 9600
gdb_port: 9000
info_console_force: false
net_debug: false
RedBoot>
これで、フラッシュメモリの書き換えとRedBootの設定変更が終わった。Fonera2.0をリセットすると新しいファームウェアが起動する。
RedBoot> reset
しばらくして、Enterキーを押すとOpenWrtのロゴが表示されてシェルに入る。
この時点では、rootのパスワードが設定されていないためtelnetでもログインできるが、SSHの方が好ましいのでパスワードを設定する。パスワードが短いと「Bad password: too short」と叱られるが、受け付けてはもらえる。
root@OpenWrt:/# passwd
Changing password for root
New password:
Bad password: too short
Retype password:
Password for root changed by root
root@OpenWrt:/#
PCからTelnetしてみると、もはやログインできなくなっている。
ogane@ogane-desktop:~$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
Login failed.
Connection closed by foreign host.
ogane@ogane-desktop:~$
一方、SSHでログインすると最初の一回だけはこのように表示されるので、yesと答える。次回からはパスワードを打ち込むだけログインできるようになる。
ogane@ogane-desktop:~$ ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
RSA key fingerprint is 61:2b:57:2c:00:ff:36:c0:b6:8f:cf:ce:47:b9:13:bd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.1' (RSA) to the list of known hosts.
root@192.168.1.1's password:
SSHでログインできるようになったので、シリアルケーブルをはずして蓋を閉めてしまう。ここから後の作業がうまくいかなくなったら、最悪の場合、またシリアルケーブルを接続してここまで行った作業、つまりファームウェアの入れ替え、を行ってここに戻ってくればいい。ここからは、無線LANの設定を行う。ブラウザ画面から設定する方法やuciコマンドを使って設定する方法もあるがうまく行かなかったので、/etc/config/にある次の3つのファイルをviエディタで編集して設定した。ただ、これらの設定に関してよく理解しているわけではないので間違いやもっと良い方法があるかもしれない。
/etc/config/network
宅内LANのIPアドレスが192.168.1.0/24なので、Fonera 2.0のWAN側のIPアドレスは固定で192.168.1.2とした。ゲートウェーおよびDNSサーバのIPアドレスも宅内LANのそれに合わせる。これをしないとopkgを使ってインターネット上のリソースを利用することができなくなる。
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'interface' 'lan'
option 'type' 'bridge'
option 'proto' 'static'
option 'netmask' '255.255.255.0'
option 'ifname' 'eth0.0'
option 'defaultroute' '0'
option 'peerdns' '0'
option 'ipaddr' '192.168.10.1'
config 'interface' 'wan'
option 'defaultroute' '0'
option 'peerdns' '0'
option 'ifname' 'ath0'
option 'proto' 'static'
option 'ipaddr' '192.168.1.2'
option 'netmask' '255.255.255.0'
option 'gateway' '192.168.1.254'
option 'dns' '192.168.1.254'
/etc/config/wireless
無線通信のパラメータとしては、SSIDをOgane_WiFi_(^^)vにし、WEPによる暗号化に設定した。これらは無線LANのアクセスポイントの設定と一致させる必要がある。
config 'wifi-device' 'wifi0'
option 'type' 'atheros'
option 'channel' 'auto'
option 'txpower' '10'
option 'disabled' '0'
option 'diversity' '0'
config 'wifi-iface'
option 'device' 'wifi0'
option 'mode' 'sta'
option 'encryption' 'wep'
option 'key' '*********'
option 'ssid' 'Ogane_WiFi_(^^)v'
option 'network' 'wan'
/etc/config/firewall
ファイアウォールのWAN側のinputをACCEPTに変更する。
config defaults
option syn_flood 1
option input ACCEPT
option output ACCEPT
option forward REJECT
config zone
option name lan
option input ACCEPT
option output ACCEPT
option forward REJECT
config zone
option name wan
# option input REJECT
option input ACCEPT
option output ACCEPT
option forward REJECT
# option masq 1
config forwarding
option src lan
option dest wan
option mtu_fix 1
# include a file with users custom iptables rules
config include
option path /etc/firewall.user
ここで、PCと繋いでいたLANケーブルを外し、Fonera 2.0を再起動する。これで、無線LAN経由でFonera 2.0にアクセスできるようになる。IPアドレスは、設定したFonera 2.0のWAN側のIPアドレス192.168.1.2である。PCからSSHで再度ログインすると、次のように叱られる。
$ ssh root@192.168.1.2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
de:b7:42:95:06:04:cd:86:9e:86:8e:8b:77:76:c6:73.
Please contact your system administrator.
Add correct host key in /home/hoge/.ssh/known_hosts to get rid of this message.
Offending key in /home/ogane/.ssh/known_hosts:2
RSA host key for 192.168.1.2 has changed and you have requested strict checking.
Host key verification failed.
次のように、以前にログインしたときのSSHのキャッシュを削除すればまたログインできるようになる。
$ rm /home/hoge/.ssh/known_hosts
$ ssh root@192.168.1.2
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
RSA key fingerprint is de:b7:42:95:06:04:cd:86:9e:86:8e:8b:77:76:c6:73.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts.
root@192.168.1.2's password:
ここからは、今回のウェブカメラ・アプリケーションを構築してゆく。まず、パッケージリストを更新する。うまく、レポジトリにつながるようなので一安心する。
root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/Packages.gz
Connecting to downloads.openwrt.org (78.24.191.177:80)
Packages.gz 100% |*******************************| 141k 00:00:00 ETA
Inflating http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/snapshots
root@OpenWrt:~#
root@OpenWrt:~# opkg install kmod-usb2
Installing kmod-usb2 (2.6.26.8-atheros-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/kmod-usb2_2.6.26.8-atheros-1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
kmod-usb2_2.6.26.8-a 100% |*******************************| 21428 00:00:00 ETA
Installing kmod-usb-core (2.6.26.8-atheros-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/kmod-usb-core_2.6.26.8-atheros-1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
kmod-usb-core_2.6.26 100% |*******************************| 71030 00:00:00 ETA
Configuring kmod-usb-core
Configuring kmod-usb2
root@OpenWrt:~#
次にUVCカメラ用デバイスドライバーをインストールする。
root@OpenWrt:~# opkg install kmod-video-uvc
Installing kmod-video-uvc (2.6.26.8+r261-atheros-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/kmod-video-uvc_2.6.26.8+r261-atheros-1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
kmod-video-uvc_2.6.2 100% |*******************************| 34315 00:00:00 ETA
Installing kmod-video-core (2.6.26.8-atheros-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/kmod-video-core_2.6.26.8-atheros-1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
kmod-video-core_2.6. 100% |*******************************| 29218 00:00:00 ETA
Configuring kmod-video-core
Configuring kmod-video-uvc
root@OpenWrt:~#
最後に、MJPEG-streamerをインストールする。
root@OpenWrt:~# opkg install mjpg-streamer
Installing mjpg-streamer (r68-2) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/mjpg-streamer_r68-2_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
mjpg-streamer_r68-2_ 100% |*******************************| 113k 00:00:00 ETA
Installing libpthread (0.9.29-14.1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/libpthread_0.9.29-14.1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
libpthread_0.9.29-14 100% |*******************************| 19154 --:--:-- ETA
Installing libjpeg (6b-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/8.09.1/atheros/packages/libjpeg_6b-1_mips.ipk
Connecting to downloads.openwrt.org (78.24.191.177:80)
libjpeg_6b-1_mips.ip 100% |*******************************| 57827 00:00:00 ETA
Configuring libjpeg
Configuring libpthread
Configuring mjpg-streamer
root@OpenWrt:~#
ありがたいことに、どのパッケージも依存するパッケージを自動的にインストールしてくれた。これで、必要なパッケージのインストールは終わった。早速USBポートにウェブカメラを接続してみると、ちゃんと認識されるようになった。
root@OpenWrt:~# dmesg
中略
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
PCI: Enabling device 0000:00:00.1 (0000 -> 0002)
ehci_hcd 0000:00:00.1: EHCI Host Controller
ehci_hcd 0000:00:00.1: new USB bus registered, assigned bus number 1
ehci_hcd 0000:00:00.1: irq 5, io mem 0x80c21000
ehci_hcd 0000:00:00.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
v4l2_common: Unknown symbol i2c_attach_client
Linux video capture interface: v2.00
usbcore: registered new interface driver uvcvideo
USB Video Class driver (SVN r261)
usb 1-1: new high speed USB device using ehci_hcd and address 2
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device <unnamed> (046d:0992)
root@OpenWrt:~#
いよいよ大詰めである。MJPEG-streamのインストールによって、/webcam_www/にはコンテンツとしてデモのページも用意されている。MJPEG-streamを手動で起動してみる。
root@OpenWrt:~# mjpg_streamer -o "output_http.so -w /webcam_www"
MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
o: www-folder-path...: /webcam_www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
MJPEG-streamのデモのページでは、次の方法による映像の配信を確認できるようになっている。
このデモのページを使って、UbuntuのFireFoxで映像が見えるか確認してみる。Javaアプレットのデモ以外は問題なく見られた。
静止画 - OK
imgタグで表示 - OK(IEはNG)
JavaScriptを使って表示 - OK
CambozolaのJavaアプレットで表示 - NG(WindowsからならOK)
Javaアプレットのデモは、自作のJavaアプレットに置き換えることによって問題なく表示するようになった。
ogane@ogane-desktop:~$ scp cambozola-0.76-mawatari.jar root@192.168.1.2:/webcam_www/cambozola.jar
最後に仕上げとして、Fonera 2.0起動時にMJPEG-Streamerが自動的に起動するように/etc/init.dディレクトリに起動スクリプトwebcamを作成した。
/etc/init.d/webcam
#!/bin/sh /etc/rc.common
# Copyright (C) 2009 Yasuo Ogane
START=50
start() {
mjpg_streamer -i "input_uvc.so -f 15 -r 640x480 -d /dev/video0" -o "output_http.so -w /webcam_www -p 8080" &
}
stop() {
killall mjpg_streamer
}
この起動スクリプトが起動時に呼び出されるように、/etc/rc.dディレクトリにS50webcamという名前のシンボリックリンクを作成する。起動スクリプトのアクセスモードも忘れずに変更しておく。
root@OpenWrt:/etc/rc.d# ln -s ../init.d/webcam S50webcam
root@OpenWrt:/etc/rc.d# chmod 755 ../init.d/webcam
以上でFonera 2.0のファームウェアの改造作業は終わりだ。再起動すると宅内LANに接続されたどのPCからも無線LANを介してFonera2.0に接続したウェブカメラの映像を見ることができるようになった。あとはインターネット接続用のルータの設定を変更するだけでインタネット上に公開できる。
しかしその前に、少し試験をしておきたい。というのは、この段階ではまだ室内レベルで無線LANによる映像配信ができたというだけで、はたしてどのくらいの距離までこれが可能なのか確かめていないからだ。そのために、乗用車にこのカメラを載せて移動させてみようと思った。電源供給のために車のシガーの12Vが利用できるからである。手持ちの定電圧電源で測定したところ、ウェブカメラの稼動に関係なく消費電流は640mAぐらいだった。
DC-DCコンバータやDC-ACインバーターを使う方法などもあると思うが、今回の実験のためだけの電源と考えると、私にとって最も簡単で手持ちのもので実現できる方法は3端子レギュレータICを使って12Vから5Vに電圧を落とす方法にした。
作成した電源基版。
手持ちの3端子レギュレータICはNJM317F(可変電圧タイプで定格1.5A、JRC製LM317互換品)を使った。なお、NJM317Fは基板の半田面にあるので下の写真には写っていない。ヒートシンクはジャンクのPC基板から取ったものを使った。熱設計はしていないし、保護用ダイオードも付けていない。
次はアクセスポイントの準備だ。今回はアクセスポイントとして、以前にFonera+にDD-Wrtのファームウェアを入れてアクセスポイント化したものを使った。下の写真のように、カメラ用三脚の雲台にゴムベルトでFonera+を縛り付け、2階南側のベランダに近い場所にガラス窓越しに設置した。
続いて今度は車内側の準備に移る。と言っても、カメラとFonera2.0はダッシュボードにただ置いただけだ。
電源基板はフロアに、これまた転がして置くだけ。前もって室内でテストした結果、ある程度発熱があるので念のために無難な場所として、(^^;;
さぁ、これでいよいよ実験が開始できる。実験は2人で行った。1人は車の運転を、もう1人は室内のPCの前で送られてくる映像を監視し記録する。両者は携帯電話を使って連絡を取り合った。先ずは駐車場で確認を、、、見えた!当たり前か(^^;駐車場はアクセスポイントからは見通しのきかない場所にある。フレームレートは2.74fpsだった。ただし、これはJavaScriptを使って表示した時の値であり、Javaアプレットで表示すると5fps程度の値となる。Javaアプレットの場合1フレームごとに接続するのではなく、接続しっぱなしなので速いのである。以下、フレームレートは全て遅いほうのJavaScriptで測定した。
① 駐車場
じゃ、スタートしようかとエンジンをかけたとたん映像が止まった。多分エンジン始動のためのセルモータの回転に伴って一時的に電圧が低下したためにFonera 2.0 がリセットしてしまったのだろう。Fonera2.0のファームウェアが立ち上がるのを待って、ブラウザを更新表示するとまた表示されるようになった。
駐車場を出てゆっくりと南に向かって直線の道路を進む。アクセスポイントから約40mの場所でいったん停止する。この間映像が途切れることはなく、フレームレートも2.67fpsと出発時とほとんど変わらなかった。この地点もアクセスポイントからは見通しのきかない場所だ。
② 約40mの場所
また、ゆっくりと南に向かって車を走らせた。今度は、映像が途切れるまで走らせることにした。そして、映像が途切れたのは約160m離れた場所だった。この地点もアクセスポイントからは見通しのきかない場所だ。何回かこの場所から引き返して、映像が途切れる地点を探ったが、ほぼ同じ場所で映像が途切れた。
③ 約160mの場所
以上の実験によって、Fonera 2.0を使ってウェブカメラの映像を無線で飛ばしてウェブに配信できるという見通しがついた。Fonera 2.0は6千円、ウェブカメラは安いもので2千円程度で販売されているので、既に無線LANを導入している環境なら8千円でケーブルの届かない場所の映像をウェブに配信することができるようになった。
なので、今回の実験はひとまず終わりにする。あと実験するとしたら、アンテナ周りの条件を変えることだろう。今回は使用したFoneraに付属する標準のアンテナをは無指向性だ。純正品として、La Fontennaという指向性アンテナ(技術基準適合証明シールの貼付されたLa Fonera、La Fonera+のみ利用が可能)がある。その他各社からは無線LAN用のアンテナが販売されている。紙とアルミフォイルでパラボラアンテナやざるアンテナや空き缶アンテナなんてのもある。