BluetoothでJetson TK1にリモートアクセス
BluetoothのPAN(Personal Area Network) Profileを利用してタブレット等からJetson TK1へ接続。
Bluetooth接続のメリット
- Wifiより消費電力が少ない
- 無線LANの2.4GHz帯が混雑しているときはBluetoothの方が速い
Bluetoothは無線LANと同様の2.4GHzの周波数を使っているが無線LANと干渉を防ぐ仕組みがある
- ペアリングするだけで接続できる。SSIDやパスワードを設定したり入力する必要がない
デメリット
- 電波の干渉がないときは無線LANの方が高速
- 最大7つまでしか接続できない
Bluetoothアダプタのセットアップ
BluetoothアダプタにはLogitec LBT-UAN04C1BKを使った。
The Grinch kernelを使っているので, ドライバをインストールしなくても認識されていた。
しかしscanしてもBluetooth機器を発見できなかった。
そこで調べた所, こちらに書いてあることを参考に
$ bccmd psset -r -s implementation 0x028c 0x0001
を実行するとscanが動作した。
その後は再起動した後でもこのコマンドを実行せずに動作した。
Bluetooth PANの準備
この機能を使うにはKernelのCONFIG_BRIDGEとCONFIG_BT_BNEPが有効になっている必要がある。以下のコマンドで確認できる。
zcat /proc/config.gz | grep BRIDGE
zcat /proc/config.gz | grep BT_BNEP
L4T21.4のカーネルではデフォルトで有効になっていないがGrinch kernelだと有効になっている。
sudoしなくてもbluetoothの機能にアクセスできるようにする。
$ sudo gpasswd -a ubuntu bluetooth
簡単にJetson TK1とタブレットを接続できるようにするためにbluemanを使う。
$ sudo apt-get install blueman
bluemanを使うためにデスクトップ画面を出す。(もしデスクトップが起動していなかったら起動する)
画面右上にbluetoothのマークがあるのを確認する。
もしなければ, コンソールから
blueman-appletを実行する。
bluetoothのマークを右クリック→Local Servicesをクリックする。
左側のNetworkをクリックし, Network Access Point(NAP)のチェックボックをonにする。
NAP SettingsのIP Address:の横に書いてあるのがbluetoothからJetson TK1に接続したときのJetson TK1のIPアドレスになる。
Applyをクリックして画面を閉じる。
次はタブレットとJetson TK1をペアリングする。
今度はデスクトップ右上のbluetoothのアイコンをクリックする。
Adapter→PreferencesをクリックしTemporarily visibleを選ぶ。
タブレットでbluetoothデバイスを検索する。
tegra-ubuntu-0のような名前のデバイスが見つかるのでペアリングする。
タブレットでtegra-ubuntu-0経由のインターネットアクセスを有効にする。
もしJetson TK1がインターネットに繋がっていればタブレットもJetson TK1経由でインターネットに繋げられる。
これでデスクトップが立ち上がっていればbluemanが動きbluetoothで接続できるようになった。
しかしJetson TK1にはディスプレイを繋がずに使用するので, その状態でもデスクトップが起動する必要がある。
そこでTurboVNCをインストールして起動時に自動的にTurboVNCサーバーが立ち上がるようにした。
TurboVNCのインストール方法はこちらを参照。
USB無線LANアダプタのセットアップ
USB無線LANにはPLANEX 無線LAN子機 (USB3.0アダプター型) 高速モデル GW-900D-BKを使った。
これにはRTL8812AUというチップが使われていてこのサイトからドライバのソースコードを入手できる。
このソースコードはこちらにあるドライバのソースコードをJetson TK1用にビルドできるよう修正されたものだ。
しかしelinux.orgから配布されているソースコードはgithubにある最新のソースコードが取り入れられていないせいか, そのままビルドしてできたドライバーはエラーがでて使い物にならなかった。
そこでgithubにある最新のソースコードをcloneして, elinux.orgのソースコードの変更箇所をマージしてビルドすると安定して動作した。
ビルドにはkernelのソースコードが必要だった。
ここから自分が使っているThe Grinch 21.3.4 for Jetson TK1のソースコードを入手し, そこに書いてある通りに/usr/src下に解凍した。
後はこちらに書いてある通りにドライバをインストールすればOK。
ちなみにsudo insmod 8812au.koする前にsudo modprobe cfg80211しないとエラーがでる。
ドライバがインストールされUSB無線LANアダプタが接続されていれば以下のコマンドで確認できる。
$ sudo nmcli -f general dev list
無線LAN APに接続
コマンドライン版NetworkManagerでJetson TK1を無線LANアクセスポイントに接続する。
周囲のアクセスポイント一覧を表示。
$ sudo nmcli dev wifi
アクセスポイントに接続。
$ sudo nmcli dev wifi connect password
このコマンドで接続できるとSSIDとパスワードが保存される。
以後は以下のコマンドで同じAPに接続できる。
$ sudo nmcli con up id
以下のコマンドで保存されたSSID一覧が表示される。
$ sudo nmcli con
現在の接続状態を確認。
$ sudo nmcli dev status
$ sudo nmcli con status
一度接続すると次からはアクセスポイントにいると再起動後も自動的に接続するようである。
切断したい場合は
$ sudo nmcli dev disconnect iface wlan0
その他
最初はbluemanを使わずにCUIだけでPANを設定しようとしたがうまくいかなかった。
https://github.com/Douglas6/pinaple
https://github.com/ykasidit/ecodroidlink
にあるpythonスクリプトを使うとPANを構築できたがタブレットからJetson TK1経由でインターネットに接続することはできなかった。
dnsmasqやip-tables, brctlをうまく設定してJetson TK1をルータのようにすれば可能かもしれない。
bluemanは自動的にdnsmasqやip-tablesを呼び出してbluetoothで接続した端末がインターネットにアクセスできるようにしてくれるようだ。
Top