Python 寫藍芽 RFCOMM 通訊程式

以下範例 ShengYu 將會介紹如何使用 Python 來寫 RFCOMM 藍芽通訊程式,內容包含使用 bluetooth socket 建立一個連線,傳輸資料與斷線。

server 端程式

server 端的程式一開始 bind 在 port 1,
listen 指的是最多可以接受多少連線,
接下來 accept,這裡 accept 會 block 不會立即返回,
直到 client 連上才返回,之後接收 client 的資訊並印出來,然後關閉連線。

rfcomm-server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import bluetooth

server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1
server_sock.bind(("", port))
server_sock.listen(1)

client_sock,address = server_sock.accept()
print "Accepted connection from ",address

data = client_sock.recv(1024)
print "received [%s]" % data

client_sock.close()
server_sock.close()

client 端程式

client 端的程式需將 server 端的 addr 填入 bd_addr 內,才能成功連上,
怎麼查詢藍芽 addr 請看這篇
如下範例, connect 嘗試連上 addr 為 “01:23:45:67:89:AB”, port 為 1 的裝置,
connect 連上 server 後,送出一個 hello!! 就斷線。

rfcomm-client.py
1
2
3
4
5
6
7
8
9
10
11
12
import bluetooth

bd_addr = "01:23:45:67:89:AB" # server 端的 addr

port = 1

sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))

sock.send("hello!!")

sock.close()

以上的兩個基本範例就能夠使兩個藍芽裝置進行溝通了!

ShengYu 將會在下一篇介紹 如何用Python的藍芽 L2CAP 協定來通訊

參考
https://people.csail.mit.edu/albert/bluez-intro/x232.html