【V4L2】BeagleBoneBlack に USB-WiFi / Camera を接続

BeagleBoneBlackからUSB-WiFi経由でインターネットに接続,USB-Camで映像を取得する実験をしました。

debian_logo

環境はDebianWheezy(7.3),繋ぐ先はAtermです。Angstromでは確認できていません。
USB-WiFiはI-O DATA IEEE802.11n/g/b準拠 300Mbps(規格値) 無線LANアダプター WN-G300UAです。

LinuxのUSBデバイスの仕組みはこちらに書いています。

まず、認識されているUSBデバイスを取得します。

$ lsusb
Bus 001 Device 002: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ネットワーク機器として認識されているか確認します。

$ iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry  long limit:7   RTS thr=2347 B   Fragment thr:off
          Encryption key:off
          Power Management:on
          
lo        no wireless extensions.

eth0      no wireless extensions.

usb0      no wireless extensions.

SSID/PASSを無線LANクライアントツールを使って設定します。

$ wpa_passphrase "aterm-xxx-g" "xxx" > /etc/wpa_supplicant/wpa_supplicant.conf
$ cat /etc/wpa_supplicant/wpa_supplicant.conf 
network={
    ssid="aterm-xxx-g"
    #psk="xxx"
    psk=xxxxxx
}

設定の確認をします。

$ wpa_supplicant  -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf 
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan0: Trying to associate with 1e:b1:7f:dd:86:d7 (SSID='ssid' freq=2437 MHz)
ioctl[SIOCSIWFREQ]: Device or resource busy
wlan0: Association request to the driver failed
wlan0: Associated with 1e:b1:7f:dd:86:d7

Linuxネットワーク設定を以下のように変更します。

$ vi /etc/network/interfaces 
# WiFi Example
auto wlan0
iface wlan0 inet dhcp
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf    
#    wpa-ssid "essid"
#    wpa-psk  "password"

ネットワークを再起動します。

$ /etc/init.d/networking restart

BBBのバッテリーはルックイースト(LE-UBT12K-WH)を使用しています。

bbb_battery

BBBにsshで接続してみます

$ ssh root@192.168.0.6

USB-Camから映像を取得する

使用カメラはSANWA SUPPLY WEBカメラ CMS-V34BKです。接続してカーネルログを見てみます。

$ dmesg
[ 301.563693] usbcore: registered new interface driver uvcvideo [ 301.563712] USB Video Class driver (1.1.1)
[ 301.569073] ALSA sound/usb/clock.c:237 2:3:1: cannot get freq at ep 0x84
[ 301.595924] usbcore: registered new interface driver snd-usb-audio

マイク内蔵のため ALSA(Advanced Linux Sound Architecture)からも認識されています。
デバイスファイルは /dev/video0 でした。

$ lsusb 
Bus 001 Device 002: ID 0c45:6340 Microdia

確認のため V4L2 + ffmepg で動画ファイルを生成してみます。
ストリーミング配信用の ffserver は Debian には入っていませんでした。

$ ffmpeg -f video4linux2 -r 5 -s 640x480 -i /dev/video0 BBB-Web-Cam.avi

メモリ使用率を計算してみました。(VGA)
計算は以下で取得できる MemTotal – (MemFree + Buffers + Cached) です。

$ cat /proc/meminfo

結果は以下で,10fps以上だと極度に変換が遅くなりました。

1fps -> 81564KB
3fps -> 105116KB
5fps -> 106476KB

けっこうメモリ消費しますね…

* この記事はkarota-projectの活動に関する記事です。