1.環境
ハードウェア
ラズベリーパイ3(親機)
ラズベリーパイ zero wh(子機)
ソフトウェア
python3.5
2.方法
準備
sudo nano /etc/systemd/system/dbus-org.bluez.service
"ExecStart=/usr/lib/bluetooth/bluetoothd"の後に"--compat"を追記
(こちらを参考にさせていただきました。)
そして、再起動
sudo reboot
シリアルポートサービスを追加
sudo sdptool add --channel=0 SP
(ここも、こちらを参考にさせていただきました。)
ペアリング
親機、子機共通で
bluetoothctl
親機のみで
discoverable on
scan on
子機側のラズベリーパイが
"[new] {子機側のMACアドレス} raspberrypi"と認識するまでまつ。
認識したら、
pair {子機側のMACアドレス}
これにてペアリング完了
受信と送信
親機のラズベリーパイで
#!/bin/bash
sudo echo 0 > /dev/rfcomm0
sudo chmod 755 ./send.sh
import subprocess
subprocess.run(["sudo","rfcomm","bind","0"])
subprocess.run(["./send"])
子機のラズベリーパイで
import subprocess
import serial
import time
import os
if not os.path.exists("/dev/rfcomm0")
subprocess.Popen(["sudo","rfcomm","listen","/dev/rfcomm0","0"])
while not os.path.exists("/dev/rfcomm0")
time.sleep(0.1)
time.sleep(1)
ser = serial.Serial("/dev/rfcomm0")
out = ser.read()
print(out)
考察
どうやら、bluezの仕様としてbluetoothでのシリアル通信を使用するアプリケーションが動いている間しか通信を確立しないようです。
また、少なくとも私の環境では、送信側を"echo"コマンド、受信側をpythonの"serial"モジュールにしないといけないようです。
課題
受信側のpythonプログラムを連続で実行できない。
(誰か教えてください!!!!!)
最後に
ここまでお読みいただきありがとうございました。
間違っているところを指摘していただけるととても助かります。
よろしくお願いいたします。
また、参考にさせていただいたページは
https://qiita.com/oko1977/items/9f53f3b11a1b033219ea
です。