半年ほど放置していたNano Pi NEO2を引っ張り出しLEDマトリクスパネルの制御に使っている。 制御用のプログラムをアップデートするには、どうにかしてログインしないといけないわけで、これが結構悩ましい。
Nano Pi NEO2には有線LANがついているので、これを使うというのが妥当ではあるのだが、組み込み用途だと持ち運びができなくて不便になる。 次にWiFiという選択肢なのだが、これもやはり持ち運びが不便だ。 SSIDを登録しておけば、移動先でもアクセスできるのだが、それを設定するのが面倒である。。 また、数年前の知識なのだが小型のUSB WiFiドングルはかなり熱を持つので長時間使うには向いていない。 シリアルコンソールという方法もあるが、これはこれでファイル転送ができなくてかなり不便である。
そこで、USBのBluetoothドングルを接続してBluetooth PANを使うことにした。
Bluetooth PAN
Bluetooth PANはPersonal Area Networkの略称で、Bluetoothを使ってTCP/IP通信する企画である。 スマートフォンでBluetoothを使ってテザリングをするときに使われるのが一般的だと思う。
Bluetooth PANには以下の3つの役割がある。
- NAP
- GN
- PANU
Bluetoothテザリングをしたときに、スマートフォンがNAP。 スマートフォンに接続したPCが、PANUになる。 今回は、Nano Pi NEO2をNAPにする。
USB Bluetoothドングルの選択
これはLinuxで使えればなんでもよい。 ただし、Nano Piにはカーネルソースが提供されておらず*1カーネルモジュールをビルド出来ないので、デフォルトでカーネルに含まれているドライバで動くドングルを選択する必要がある。 私は、Amazonでエレコムのやつを買った(LBT-UAN05C2)。
LinuxでBluetooth PAN(NAP)の設定
設定自体は以下のサイトを参考にした。
設定を行う前に、以下のパッケージをインストールする。
$ sudo apt-get install -y bridge-utils bluez-tool
次にネットワークの設定を行う。 参考サイトはraspbian用の設定で、Nao Pi NEO2で使っているUbuntu xenialでは少し設定を変えないといけない。 具体的には、systemd-networkdが使えないので、ブリッジの設定とDHCPサーバをなんとかしないといけない。
以下のような設定を /etc/network/interfaces
に追加する。
ポイントは bridge_ports
を none
に設定するところ。
bridge_portsがないとブリッジインターフェイスにならないが、ブリッジにインターフェイスを追加したくないのでnoneにする必要がある。
auto pan0 iface pan0 inet static address 192.0.2.1 network 192.0.2.0 netmask 255.255.255.0 broadcast 192.0.2.255 bridge_ports none bridge_fd 0 bridge_stp off
設定が終わったらpan0を起動しておく。
$ sudo ifup pan0
次にDHCPサーバの設定をする。
dnsmasqがインストールされているのでこれを使う。
以下の設定を /etc/dnsmasq.conf
に設定する。
dhcp-range=pan0,192.0.2.11,192.0.2.250,24h
設定が終わったらdnsmasqを有効化する。
$ sudo systemctl enable dnsmasq $ sudo systemctl start dnsmasq
次にbt-agentとbt-networkの設定をする。 それぞれ、デーモン化する必要があるので、以下のようなUnitファイルを作る。
$ cat /etc/systemd/system/bt-agent.service [Unit] Description=Bluetooth Auth Agent [Service] ExecStart=/usr/bin/bt-agent -c NoInputNoOutput Type=simple [Install] WantedBy=multi-user.target $ cat /etc/systemd/system/bt-network.service [Unit] Description=Bluetooth NEP PAN After=pan0.network [Service] ExecStart=/usr/bin/bt-network -s nap pan0 Type=simple [Install] WantedBy=multi-user.target
設定が終わったら有効化する。
$ sudo systemctl enable bt-agent.service $ sudo systemctl start bt-agent.service $ sudo systemctl enable bt-network.service $ sudo systemctl start bt-network.service
これで準備が出来たので後はペアリングするだけである。 これについては割愛する。
まとめ
Bluetooth PANの設定ができた。 これでどこに持ち運んでもBluetoothを接続すれば、sshできるようになって便利。 さすがに、Bluetoothではそこまで速度はでないがオペレーションするくらいなら十分である。 しばらくこのまま運用してみようと思う。
*1:aptではいるわけでもなく、どこからかDLできるわけでもなさそう?