Pythonを用いて2台のデバイス間でbluetooth通信を行う方法を紹介します。

あらかじめ、2台のデバイスはbluetoothで接続をして認証をしておいて、お互いがbluetoothのデバイスリストに表示される状態にしておいた上で、接続を外しておきます。

bluetoothのMACアドレスを取得するには下記記事を参考にしてください。

https://rb-station.com/blogs/software/pc-get-bluetooth-mac-address

また、bluetoothのライブラリが無い場合はインストールをしておきましょう。

pip install pybluez 
sudo apt-get install bluetooth libbluetooth-dev 

※ Raspberry Pi Zero 2W(送信側)とUbuntu 18.04(受信側)の環境で動作実験済みです。

送信側

import bluetooth

# Bluetoothデバイスのアドレスとポート番号
bd_addr = "XX:XX:XX:XX:XX:XX" # 受信側のMACアドレス
port = 1 # ポート番号

# Bluetoothソケットを作成
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port)) # 受信側に接続要求を送信

# データを送信
data = "Hello, world!"
sock.send(data)

# ソケットをクローズ
sock.close() 

受信側

import bluetooth

# Bluetoothポート番号
port = 1

# Bluetoothソケットを作成して接続を待機
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.bind(("", port))
sock.listen(1)
client_sock, client_info = sock.accept()
print("Accepted connection from", client_info)

# データを受信
data = client_sock.recv(1024)
print("Received:", data)

# ソケットをクローズ
client_sock.close()
sock.close() 

まず受信側を起動し、 client_sock, client_info = sock.accept() の部分で、接続待機状態にします。次に、送信側の sock.connect((bd_addr, port)) の部分で接続要求を行い、うまく接続できると、次に進みます。

sock.send() で送信されたデータをclient_sock.recv(1024) で受信することが可能です。この例では、1回の受信で最大1024バイトのデータを受け取るように指定しています。

BluetoothPython