Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法について(メモ)
Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法について(メモ)
今回、Raspberry Piをセットアップから久しぶりに行いました。そこで、毎回ディスプレイを用意するのは面倒なのでもちろん遠隔からSSHのようにログインして操作したかったので、MacからBluetoothで接続したいと考え、色々調べていました。
結果的にうまくいったので、そのメモを残しておきたいと思います。
2019/05/07追記
再度Bluetoothシリアルログインを試す際に、自分の記事を参考にしてもうまくいかなかったので一部修正しました。 これでも再現性は微妙かもしれません。また機会があればひとつずつ手順を追ってみようと思います。
具体的には、bluetoothctlコマンドの部分です。
また、最後macから接続する際に、「/dev/tty.XXXX」として見えないといけないのですが、これがmac側で見えない場合があります。
その場合、一度RaspberryPi側とmac側でデバイスを削除し、以下のコマンドを実行後、再度ペアリングを試してみてください。
sudo rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
また、以下の動画も一部参考になります。
これだとシンプルに文字列を送信するだけになるので、ここでRaspberryPiで最後にpythonプログラムを立ち上げずに、上記のrfcommを実行すれば良いです。
今回の検証で必要なもの・環境は以下のとおりです。
- Raspberry Pi 3(今回はRasPi 3を利用したので、ドングルなどは必要ありませんでした)
- microSD & OS (Raspbian, 最新版Jessie Desktop version)
- Display & HDMI cable
- mouse & keyboard
- Macbook Air
こんな人向けです
WiFi環境もEthernetもないけどRasPiを起動するだけでコンソールから遠隔操作したい
そもそもなぜBluetoothで接続したいのか
理由は3つあります。
まだ詳細は未定ですが、自分なりに自動車の解析をしたいと考えており、Bluetooth接続が最も便利だと考えたのが最大の理由です。
いくつかの方法
まず、「RasPi MAC Bluetooth」などで検索をかけると、たくさんヒットすると思います。簡単にまとめると以下の2通りです。
どっちでもいいのですが、bt-panが謎のエラーをはいていたので辞めました。
さらに、シリアル接続といっても統一された方法は見られませんでした。
Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法
では実際にやっていきましょう。
私が利用したRaspbianのKernel versionは4.14です。
1. MACとRasPiをペアリングする
以下、RasPiのコンソールで行います。
$ bluetoothctl [bluetooth]# power on Changing power on succeeded [bluetooth]# pairable on Changing pairable on succeeded [bluetooth]# discoverable on Changing discoverable on succeeded [CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: yes [bluetooth]# agent on Agent registered [bluetooth]# default-agent Default agent request successful [bluetooth]# scan on Discovery started [NEW] Device XX:XX:XX:XX:XX:XX TokinaのMacBook Pro ... [bluetooth]# pair XX:XX:XX:XX:XX:XX Attempting to pair with XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes Request confirmation [agent] Confirm passkey 502174 (yes/no): yes [bluetooth]# trust XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes Changing XX:XX:XX:XX:XX:XX trust succeeded [bluetooth]# exit
ちなみにですが、MACアドレスはタブ補完できます。
これでペアリングができたはずです。PINコードなどはうまいことやってください。
2. rfcommを割り当てる
以下の記事が非常に参考になります。一部こちらを参考にしました。
以下もRasPiのコンソールで行います。(root権限で)
$ systemctl stop bluetooth $ bluetoothd -C & $ hciconfig hci0 up $ sdptool add SP $ rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
少し解説しますと、まずシリアル通信するために、sdptoolを使いたいのですが、そのためにはbluetoothd(デーモン)の起動時に-Cオプションが必要なのです。そのため一度stopしています。
もう一つ大事なコマンドはrfcommです。
Bluetoothのプロトコルスタックの一つで、L2CAP上でRS-232Cシリアルポートの転送機能をエミュレーションするもの。これにより、従来の有線によるデータ転送をそのまま無線に置きかえることが可能となる。
ということです。このコマンドを実行していると、アクセスされていることを見ることができます。
3. MACからアクセスする
一応ペアリングしておきましょう。MACのBluetoothがRaspberry Piに接続済みになっているか確認してください。もしくは/dev/tty.raspberrypi-SerialPort(私の環境です)が見えるか確認してください。
以下、Macのコンソールで行います。
$ ls /dev/tty.raspberrypi-SerialPort /dev/tty.raspberrypi-SerialPort $ cu -l /dev/tty.raspberrypi-SerialPort -s 115200 Password: Connected. Raspbian GNU/Linux 9 raspberrypi rfcomm0 raspberrypi login: pi (automatic login) Last login: Fri May 4 06:55:27 UTC 2018 on tty1 Linux raspberrypi 4.14.34-v7+ #1110 SMP Mon Apr 16 15:18:51 BST 2018 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. -bash: cannot set terminal process group (2343): Inappropriate ioctl for device -bash: no job control in this shell pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls Desktop Downloads oldconffiles Public Templates Documents Music Pictures python_games Videos
こんな感じでcuコマンドでシリアル接続っぽくBluetooth接続できました。これで非常に便利になりましたよね。もちろんscreenコマンドでも問題ありません。
4. (おまけ)起動時に自動的に接続可能状態にする
ここまで成功している上で、rc.localを編集します。
RasPiのnanoやvimで/etc/rc.localを開いて、以下のコマンドをexit 0の前に追記します。
sudo rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
そう、さっきのRFCOMMコマンドです。RFCOMMコマンドを実行しないとシリアル通信をシミュレートできませんので。
これで再起動して、MACから
$ cu -l /dev/tty.raspberrypi-SerialPort -s 115200
ができれば成功です。ペアリングとかしなくても、このコマンドを入力すれば自動的にペアリングが確立するはずです。
最後に
Raspberry Pi 3をRSでクーポン配布していたときに購入して以来放置していたので、ようやく重い腰を上げました。bluetoothとWiFiが内蔵されており、電源だけで遠隔操作できるので、めっちゃ便利になりました。
実は、PiCANボードなども合わせて購入したので、これから楽しみです。また続きを書きたいです。