python控制蓝牙pybluez_Python之蓝牙通讯模块pybluez学习笔记
安裝藍牙通訊模塊pybluez
Windows下pybluez的安裝
注:本文的開發環境為Windows10+Python3.7.3html
pip install pybluez
安裝過程當中會出現以下圖所示的問題:
產生這種問題的緣由是windows系統沒有安裝相應的SDK,沒有?Microsoft SDKs這個文件夾,解決辦法以下:python
windows7安裝文件的下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=8279編程
安裝對應系統的SDK以前,最好先卸載系統里的Visual?C++?2010?Redistributable和.NET.Framework再安裝對應的SDK服務器
再次安裝 pybluez仍是有錯誤,查看安裝目錄,按照setup.py要求MS_SDK = r'Microsoft SDKs\Windows\v6.0A' 目錄socket
windows7須要手動修改Microsoft SDKs下文件夾v7.1為v6.0Aide
windows10須要手動修改Microsoft SDKs下文件夾v10.0A為v7.0Acode
完成后再安裝新的Visual?C++?2010?Redistributable和.NET.Frameworkserver
windows10通過以上步驟后,依然會出現以下的問題:htm
這種問題最簡單的方法是裝個visual studio2017以上的軟件的C++編譯環境,再次安裝便可成功
Linux下pybluez的安裝
安裝pybluez模塊以前先要安裝libbluetooth-dev,不然會報錯。
藍牙通訊模塊pybluez的使用
選擇藍牙通訊對象
經過用戶友好的名字來尋找通訊對象
import bluetooth
target_name = "My Device"
target_address = None
nearby_devices = bluetooth.discover_devices()
for bdaddr in nearby_devices:
if target_name == bluetooth.lookup_name( bdaddr ):
target_address = bdaddr
break
if target_address is not None:
print("found target bluetooth device with address ", target_address)
else:
print("could not find target bluetooth device nearby")
查詢設備服務
import bluetooth
nearby_devices = bluetooth.discover_devices(lookup_names=True)
for addr, name in nearby_devices:
print(" %s - %s" % (addr, name))
services = bluetooth.find_service(address=addr)
for svc in services:
print("Service Name: %s" % svc["name"])
print(" Host: %s" % svc["host"])
print(" Description: %s" % svc["description"])
print(" Provided By: %s" % svc["provider"])
print(" Protocol: %s" % svc["protocol"])
print(" channel/PSM: %s" % svc["port"])
print(" svc classes: %s "% svc["service-classes"])
print(" profiles: %s "% svc["profiles"])
print(" service id: %s "% svc["service-id"])
print("")
經過RFCOMM方式進行通訊
采用相似于socket編程模型的方式進行藍牙通訊的編程
1.服務器端程序
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()
2. 客戶端程序
import bluetooth
bd_addr = "01:23:45:67:89:AB"
port = 1
sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
經過L2CAP方式進行通訊
L2CAP的sockets方式幾乎等同于RFCOMM的sockets方式,惟一的不一樣是經過L2CAP的方式,而且端口是0x1001到0x8FFF之間的奇數端口。默認的鏈接能夠傳送的可靠報文是672個字節。
1.服務器端程序
import bluetooth
server_sock=bluetooth.BluetoothSocket( bluetooth.L2CAP )
port = 0x1001
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()
2.客戶端程序
import bluetooth
sock=bluetooth.BluetoothSocket(bluetooth.L2CAP)
bd_addr = "01:23:45:67:89:AB"
port = 0x1001
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
調整MTU大小
l2cap_sock = bluetooth.BluetoothSocket( bluetooth.L2CAP )
.
. # connect the socket
.
bluetooth.set_l2cap_mtu( l2cap_sock, 65535 )
參考文獻
總結
以上是生活随笔為你收集整理的python控制蓝牙pybluez_Python之蓝牙通讯模块pybluez学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RationalDMIS 2020定制报
- 下一篇: linux学习笔记(十二)