前回、BleでRaspberry Piとmicro:bit間の通信についてまとめました。↓
今回はようやくBluetoothのシリアル通信が出来ましたので、ここでまとめておこうかと思います。
Raspberry Pi ZERO W とWindows PC間でのBluetoothシリアル通信になります。けっこう巷に溢れている内容ではありますが、それでもうまく行かないのが電子工作の常でございますので、躓いた点についても記したいと思います。
本記事が少しでもお役に立てたなら幸いでございます。
なお、本内容につきましてはrobotakaoさんの記事を参考にさせていただきました。↓
Raspberry Pi Zero WでBluetooth経由でシリアル通信(シリアル接続)続報
目次
初めに
ライブラリのインストール
raspberry PiでBleuzがインストールされていない場合、以下のライブラリをインストールします。
1 2 |
sudo apt-get update sudo apt-get install bluetooth bluez blueman |
Bluetoothが有効になっているか確認します。
1 |
$ hciconfig |
UP RUNNING PSCAN になっていればOK。DOWNになっていれば下記コマンドで有効にします。
1 |
sudo hciconfig hci0 up piscan |
ペアリング
Raspberry Pi側の操作
下記コマンドでbluetooth設定に入ります。
1 |
bluetoothctl |
下記コマンドで周囲のbluetooothデバイスを検索します。
1 |
scan on |
ぱらぱらと各デバイスのMACアドレスが表示されるので、PCのMACアドレスが確認できればOKです。下記コマンドでスキャンをOFF(PCのMACアドレスはcmdからipconfig /all で確認できます。※bluetoothのMACアドレスですので注意。)。
1 |
scan off |
PCとペアリングします。xx:xx:…はPCのMACアドレスです。
1 |
pair xx:xx:xx:xx:xx:xx |
PC側の操作
PCでbluetoothのアイコンをクリックすると、パスキーは○○ですか?聞いてきます。このタイミングで、Raspberry PI側にパスキー○○yes/no と表示されているので、yesを選択後にPC側で「はい」を選択。PCとRaspberry PIの両方でペアリングOKの表示がでます。
※躓きポイント1:再度ペアリングする際に、なかなかペアリング出来ない事があります。その時はPC側でペアリング済みのRaspberry Piのデバイスを解除して、Raspberry Pi側でも下記コマンドで解除します。※xx:xx:…はPCのMACアドレス
1 |
remove xx:xx:xx:xx:xx:xx |
シリアル接続
シリアルポート設定
SDPサーバーの設定を以下のように変更します。設定ファイルを開き、変更前の行を変更後のように「–compat」を付け加えます。
1 2 3 4 5 6 7 |
nano /etc/systemd/system/dbus-org.bluez.service 変更前 ExecStart=/usr/lib/bluetooth/bluetoothd 変更後 ExecStart=/usr/lib/bluetooth/bluetoothd --compat |
ここで一度bluetoothを再起動。
1 2 |
sudo systemctl daemon-reload sudo systemctl restart bluetooth |
SDPサーバー に通信のシリアルポートを追加します。
1 |
sudo sdptool add --channel=22 SP |
SDPサーバーにシリアルポートが追加されたか確認します。パーミッションでエラーとなるので、まずパーミッションを777へ変更。
1 |
sudo chmod 777 /var/run/sdp |
確認。
1 |
sdptool browse local |
サービス名やHandleがずらりと表示されますので、一番下の方に先ほど追加した「Service Name: Serial Port」がチャンネル22で表されていればOKです。
シリアル接続
Raspberry Pi側でシリアル接続待ち状態を作ります。
1 |
sudo rfcomm listen /dev/rfcomm0 22 |
続いて、PCのコントロールパネルからデバイスとプリンター確認画面へ行き、RaspBerry Piを右クリック、プロパティからサービスを選択、シリアルポート(SPP)にチェックを入れ、適用を押します。となりにCOMポートが表示されるので、覚えておきます。※躓きポイント2:もしCOMポートが表示されなければCH341SERのUSBドライバーをインストールしてください。↓
http://www.wch-ic.com/downloads/CH341SER_EXE.html
これで接続できる状態になりましたので、PC側からTera Termでシリアル接続します。 Tera Term を起動し、下側のシリアルにチェックを入れると接続先のCOMポートが右側に表示されますので、Raspberry PiのCOMポートを選択し、OKをクリックします。
Raspberry Piにコネクションと表示されれば接続完了です。
データ転送
PCからRaspberry pi
Raspberry Piで新たにターミナルを開いて(接続中のターミナルをクリアすると接続が切れます)、 下記コマンドを入力します。
1 |
sudo cat /dev/rfcomm0 |
これでRaspBerry Piのターミナルに、PCで入力した文字が反映されます。
Raspberry PiからPC
新しく立ち上げたRaspberry Piのターミナルに下記コマンドを入力します。
1 |
sudo echo ”hello! world!” > /dev/rfcomm0 |
echoの後の””内の文字列が、PCに反映されます。