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バイトのデータを受け取るように指定しています。