Raspberry Pi Zero WでBluetoothキーボード・マウスを使う

Raspberry Pi Zero W

Raspberry Pi Zero W (以下RPi0W)では無線LANだけでなくBluetoothも利用できるらしいのでマウスとキーボードはUSBではなくBluetoothで接続することにした。
そうすると、初期状態では無線LAN未設定未接続でキーボードもマウスも繋がっていないのでRaspberry Pi Zeroを操作する術がない。
そこで、RaspbianのOSイメージを書き込んだmicroSDカードをPCに繋いでマウントし、無線LAN設定を書き込んでからRPi0Wに挿して起動し、SSHでログインしてBluetoothの機器のペアリングを行うことにした。

SSHを利用可能にする

Raspbianは初期値がSSHアクセスを受け付けない設定になっているので受付可に変更する。
RaspbianのOSイメージを書き込んだmicroSDカードをPCに挿すとbootパーティションとファイルシステムのパーティションの2つが認識される筈。
ファイルシステム側ではなくbootパーティション側をマウントしてそこにsshというファイル名で空ファイルを作成する。
ファイルシステムのbootディレクトリと勘違いなく。
これで次回RPi0WでRaspbianを起動するとSSHでログインすることができる。

無線LANを利用可能にする

USBのキーボード・マウスをRPi0Wに繋ぐ場合はこの時点でRaspbianのOSイメージを書き込んだmicroSDカードをRPi0Wに挿して起動すればモニターを見ながら無線LANの設定を行うことができる。しかし、今回はキーボード・マウスをBluetoothで繋ぐと決めたのでRaspbianを起動してもまだ操作を行うことができない。
RaspbianのOSイメージを書き込んだmicroSDカードをPCに挿すとbootパーティションとファイルシステムのパーティションの2つが認識される筈。(上のSSHの部分と同じ)
今回はファイルシステムのパーティションをマウントしてそのパーティション内の/etc/network/intergacesと/etc/wpa_supplicant/wpa_supplicant.confの2つのファイルに追記する。おそらくLinuxなどでは一般ユーザーだとファイルの書き込みができないので管理者権限で編集保存する方が良さげ。

マウントしたファイルシステムの /etc/network/interfaces (追記)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
auto lo
iface lo inet loopback

auto wlan0
allow-hotplug wlan0
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

##DHCPでIPアドレスを貰う場合 (Raspbian Jessieのみ)
iface wlan0 inet dhcp

##固定IPで設定する場合
#iface wlan0 inet static             #Raspbian Jessieではこれ
#iface wlan0 inet manual             #Raspbian Stretchではこれ
#address 192.168.0.186           #IPアドレス
#netmask 255.255.255.0           #サブネットマスク 
#gateway 192.168.0.1                #ゲートウェイとなるルーターアドレス
#dns-nameservers 8.8.8.8 8.8.4.4    #DNSサーバ

2017年12月14日変更&追記:
12月中旬現在Stretchでは固定IPの設定でstaticにするとダメみたい。manualにすると成功する。
StretchにてDHCPでアドレスを取得する場合はこのファイルを触らない。(重要)

マウントしたファイルシステムの /etc/wpa_supplicant/wpa_supplicant.conf (追記)
1
2
3
4
5
6
network={
  ssid="wifi-ap"               #接続したいWi-FiルーターやAPのSSIDを指定
  scan_ssid=1
  psk="01234567890abcedf"      #接続したいWi-FiルーターやAPの鍵(PSK)を指定
  key_mgmt=WPA-PSK             #WPAの公開鍵方式を指定
}

2017年12月14日追記:
Stretchでは?このwpa_supplicant.conf をファイルシステムの /etc/wpa_supplicant/ 下に置くのではなく、上の手順のbootパーティションの直下に置くのもアリらしい。

これでPC側でのmicroSDカードへの書き込みは完了。microSDカードをアンマウントしてPCから外し、RPi0Wに挿す。RPi0Wに電源投入。
固定IPアドレスを指定している場合ならそのIPアドレスを指定してSSHで接続。
DHCPの場合はどのIPアドレスがRPi0Wに与えられているかわからないのでルーターでクライアント情報(家庭用ルーターの場合?)を見るか、arp -a で確認するかなど。

初期アカウント: pi
初期バスワード: raspberry
コマンド: ssh pi@192.168.0.186 (など)

ログイン後
sudo raspi-config で設定
[5 Interfacing Options Configure connections to peripherals] を選択。
[P2 SSH Enable/Disable remote command line access to your Pi using SSH] を選択。
SSHを有効化。

これで次回以降もSSHを利用することが可能になる。

Bluetooth機器接続

Bluetoothはペアリングをしてやらないと使えない。そこでbluetoothctlでペアリングしてやる。ちょっと面倒だけど。 基本はRPi0W側でscan onを実行しスキャンしている間に接続したいBluetooth機器のペアリング用ボタンを押すこと。スキャン時間は長いので急ぐ必要はない。
解りにくいのは承認コードの入力。ちょっと待ったらペアリング成功してたみたいなことが多い気がする。もちろん、Pairing successfulのメッセージを確認すること。
最後にconnect yy:yy:yy:yy:yy:yy (yy:・・・はBluetooth機器のID)で接続するのを忘れずに。

$ sudo bluetoothctl[Enter]
[NEW] Controller xx:xx:xx:xx:xx:xx raspberrypi [default]
[bluetooth]# agent on[Enter]
Agent registered
[bluetooth]# default-agent[Enter]
Default agent request successful
[bluetooth]# scan on[Enter]
Discovery started
[CHG] Controller xx:xx:xx:xx:xx:xx Discovering: yes
[NEW] Device yy:yy:yy:yy:yy:yy ELECOM Bluetooth BlueLED Mousepair yy:yy:yy:yy:yy:yy
Attempting to pair with yy:yy:yy:yy:yy:yy
[CHG] Device yy:yy:yy:yy:yy:yy Connected: yes
[ELECOM Bluetooth BlueLED Mouse]# pair yy:yy:yy:yy:yy:yy
[CHG] Device yy:yy:yy:yy:yy:yy Modalias: usb:v056Ep9994d1633
[CHG] Device yy:yy:yy:yy:yy:yy UUIDs: 00001124-0000-1000-8000-008000000000
[CHG] Device yy:yy:yy:yy:yy:yy UUIDs: 00001200-0000-1000-8000-008000000000
[CHG] Device yy:yy:yy:yy:yy:yy ServicesResolved: yes
[CHG] Device yy:yy:yy:yy:yy:yy Paired: yes
Pairing successful
[CHG] Device yy:yy:yy:yy:yy:yy ServicesResolved: no
[CHG] Device yy:yy:yy:yy:yy:yy Connected: no
[bluetooth]# connect yy:yy:yy:yy:yy:yy
Attempting to connect to yy:yy:yy:yy:yy:yy
[CHG] Device yy:yy:yy:yy:yy:yy Connected: yes
Connection successful
[CHG] Device yy:yy:yy:yy:yy:yy ServicesResolved: yes
[ELECOM Bluetooth BlueLED Mouse]# quit[Enter]
[DEL] Controller xx:xx:xx:xx:xx:xx raspberrypi [default]
pi@raspberrypi:~ $

xx:xx:xx:xx:xx:xxはRPi0WのBluetoothアドレス。yy:yy:yy:yy:yy:yyは上の例ではELECOMのマウスのBluetoothアドレス。

周りでBluetoothの機器が大量に利用されてると対象機器が判りづらくなるので、できれば周りにBluetooth機器が動いていないところで1つずつ電源を入れて接続した方が良い。

Bluetooth機器の接続設定
RPi0Wの場合はとりあえずマウスなどのポインティングデバイスだけbluetoothctlで登録しておいて、他は画面操作で他のBluetooth機器を登録する方が楽だと思われる。

上のX画面でBluetooth機器を何かの理由でremove後、その機器がリストに出てこなくて再接続できない場合は上のbluetoothctlコマンドで機器をリストアップしてペアリング、接続すると良さそう。上では使ってないdiscoverable on, pairable onなども使うかも。
[bluetooth]#が表示されているときにhelp[Enter]でヘルプ表示。

Bluetoothの機器は一度ペアリングして使えてしまえば、次回以降はRPi0W側とBluetooth機器側の両方で特に気にしないで電源オンですぐ使えるので苦労するのは最初だけの筈。だけど、上手く接続できない、調子が悪い、が一旦発生すると苦労することになるんだよね。

関連記事:

NanoPi NEO2用armbian 5.32 Debian 9 Stretch 4.13.0-RC6

追記: 2017年11月下旬にNanoPi NEO2はサポートボードに復活したのでイメージファイルはarmbian公式サイトからダウンロードできるようになっています。

armbianでは2017年6月からNanoPi NEO2を非正式対応(WIP)に格下げしたのでarmbianのウェブサイトで最新のOSイメージファイルをダウンロードできない状態が続いている。
しかし、ソースの更新は続いていてビルドすれば最新のOSイメージを作成することができる。ここまで前回書いたのと変わらず。
ただ、これまでDebian 8 JessieとUbuntu Xenial 16.04 LTSだけだったのが8月末よりいよいよDebian 9 Stretchが選択肢に加わった。(ビルドメニューに加わった)

そこで、8月31日正午時点のソースでNanoPi NEO2用のDebian 9 Stretchをビルドした。

Armbian_5.32_Nanopineo2_Debian_stretch_dev_4.13.0-rc6.7z
NaniPi NEO2用 (2017/08/31) 共有@Google Drive

新しいファイルを追加することがあるのでファイルリストの方が上のリンクより良いかも。

ファイルは7Zip形式で圧縮してあるので解凍して出来たimgファイルをmicroSDカードに焼けばOK.

% ssh root@192.168.0.195[Enter]
The authenticity of host '192.168.0.195 (192.168.0.195)' can't be established.
ECDSA key fingerprint is SHA256:MXX0IV+h4y1IpqYgsuovVsq8g5f+mlRuEOIMDlITiu4.
Are you sure you want to continue connecting (yes/no)? yes[Enter]
Warning: Permanently added '192.168.0.195' (ECDSA) to the list of known hosts.
root@192.168.0.195's password: 1234[Enter]
You are required to change your password immediately (root enforced)
 _   _                   ____  _   _   _              ____  
| \ | | __ _ _ __   ___ |  _ \(_) | \ | | ___  ___   |___ \ 
|  \| |/ _` | '_ \ / _ \| |_) | | |  \| |/ _ \/ _ \    __) |
| |\  | (_| | | | | (_) |  __/| | | |\  |  __/ (_) |  / __/ 
|_| \_|\__,_|_| |_|\___/|_|   |_| |_| \_|\___|\___/  |_____|
                                                            

Welcome to ARMBIAN 5.32 user-built Debian GNU/Linux 9 (stretch) 4.13.0-rc6-sun50iw2   
System load:   0.18 0.24 0.11   Up time:       3 min
Memory usage:  9 % of 483MB     IP:            192.168.0.195
CPU temp:      22°C           
Usage of /:    7% of 15G    

[ General system configuration: armbian-config ]

New to Armbian? Check the documentation first: https://docs.armbian.com
Changing password for root.
(current) UNIX password: 1234[Enter]
Enter new UNIX password: newrootpass[Enter]
Retype new UNIX password: newrootpass[Enter]

-bash: [: !=: unary operator expected
-bash: [: !=: unary operator expected

Thank you for choosing Armbian! Support: www.armbian.com

Creating a new user account. Press <Ctrl-C> to abort

Please provide a username (eg. your forename): foobar[Enter]
Trying to add user foobar
Adding user `foobar' ...
Adding new group `foobar' (1000) ...
Adding new user `foobar' (1000) with group `foobar' ...
Creating home directory `/home/foobar' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: foobarpass[Enter]
Retype new UNIX password: foobarpass[Enter]
passwd: password updated successfully
Changing the user information for foobar
Enter the new value, or press ENTER for the default
        Full Name []: foobar[Enter]
        Room Number []: [Enter]
        Work Phone []: [Enter]
        Home Phone []: [Enter]
        Other []: [Enter]
Is the information correct? [Y/n] y[Enter]

Dear foobar, your account foobar has been created and is sudo enabled.
Please use this account for your daily work from now on.

root@nanopineo2:~#

armbianのイメージファイル書き込み後の初アクセスははUARTまたはSSHでNanoPi NEO2に接続してアカウントroot、初期root用パスワード1234を入力。
rootアカウント用の新しいパスワードを2回入力(上の例ではnewrootpass)。
次に一般ユーザーのアカウント作成に(勝手に進むので)、新規の一般ユーザー用のアカウント名を入力(上の例ではfoobar)、その一般ユーザー用のパスワードを2回入力(上の例ではfoobarpass)、そのユーザーの詳細情報の入力に進むのでFull Nameには名前を英数字で入力するか[Enter]、他の質問にも適切に入力するか[Enter]、最後に入力内容が正しいか確認を求められるので[y]で確定させる。
あとは基本的にはrootをログアウトして作成した一般ユーザーでログインし直すという流れ。

armbian NanoPi NEO2用のDebian 9 Stretchの完成度はまだそれほど試してはないけどDebian 8 Jessieの4.13-RC6と同じかなと。

関連記事:
Up