概要
Raspberry Pi Zeroの開発をしていて、場所を移動してWifiが変わる度にディスプレイやキーボードが必要になるのが不便だったので、BLEからログインできるようにする。
手順
WindowsからRaspberry Pi Zeroを検出可能にする
sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
上記で検出できない場合は以下まで実施。(筆者の環境では↓だと検出できず、↑であれば検出可能でした。)
sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
[bluetooth] agent on
[bluetooth] default-agent
Windowsの設定からRaspberry Pi Zeroを見つけてペアリング
「Bluetoothとその他のデバイス」⇒「+Bluetoothまたはその他のデバイスを追加する」⇒「Bluetooth」で見つかるはず
RasPi側でペアリング状況を確認
以下のようになっていればOK
pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]
[NEW] Device XX:XX:XX:XX:XX:XX WINPC
RasPiのbluetoothdの設定変更
/etc/systemd/system/dbus-org.bluez.serviceのExecStartを以下の通りに変更
/etc/systemd/system/dbus-org.bluez.service
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
/var/run/sdpへの権限付与
sudo chmod 777 /var/run/sdp
Serial Port serviceを登録
pi@raspberrypi:~ $ sudo sdptool add --channel=22 SP
RasPiのbluetootdを再起動
pi@raspberrypi:~ $ sudo systemctl daemon-reload
pi@raspberrypi:~ $ sudo systemctl restart bluetooth
シリアル通信をlisten
pi@raspberrypi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Windows側での仮想ポートの割り当て
コントロール パネル>ハードウェアとサウンド>デバイスとプリンターからRaspberry Piを選択してプロパティを開いて、
「サービス」タブの「シリアルポート (SPP) 'Serial Port'」のチェックボックスをONにする。
するとCOMXのポートが割り当てられる。
Windows側からの接続(TeraTerm)
TeraTermを起動し、「シリアル」を選択すると「ポート」のプルダウンで先ほどのCOMXのポートが選択可能になっている。
COMXのポートを選択して、接続を実行
起動時に自動でRasPiの設定を反映したい場合(デーモン化)
/etc/systemd/system/dbus-org.bluez.service
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
ExecStartPost=/usr/bin/sdptool add SP
rfcomm.service
[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/rfcomm watch 0 1 /sbin/agetty rfcomm0 115200 linux
[Install]
WantedBy=multi-user.target
serviceファイルを登録
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo systemctl enable rfcomm.service
後は再起動すればOK
sudo reboot now