LoginSignup
0
4

More than 3 years have passed since last update.

ラズベリーパイ同士でBluetooth通信

Posted at

1.環境

ハードウェア

ラズベリーパイ3(親機)
ラズベリーパイ zero wh(子機)

ソフトウェア

python3.5

2.方法

準備

command
sudo nano /etc/systemd/system/dbus-org.bluez.service

"ExecStart=/usr/lib/bluetooth/bluetoothd"の後に"--compat"を追記
(こちらを参考にさせていただきました。)
そして、再起動

command
sudo reboot

シリアルポートサービスを追加

sudo sdptool add --channel=0 SP

(ここも、こちらを参考にさせていただきました。)

ペアリング

親機、子機共通で

command
bluetoothctl

親機のみで

bluetoothctl
discoverable on
scan on

子機側のラズベリーパイが
"[new] {子機側のMACアドレス} raspberrypi"と認識するまでまつ。

認識したら、

bluetoothctl
pair {子機側のMACアドレス}

これにてペアリング完了

受信と送信

親機のラズベリーパイで

send.sh
#!/bin/bash

sudo echo 0 > /dev/rfcomm0
command
sudo chmod 755 ./send.sh
send.py
import subprocess

subprocess.run(["sudo","rfcomm","bind","0"])
subprocess.run(["./send"])

子機のラズベリーパイで

recive.py
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
です。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4