python控制蓝牙pybluez_Python之蓝牙通讯模块pybluez学习笔记

安装蓝牙通讯模块pybluez

Windows下pybluez的安装

注:本文的开发环境为Windows10+Python3.7.3html

pip install pybluez

安装过程当中会出现以下图所示的问题:

9d0416f832eaa2439d45576c46bd0ccd.png

产生这种问题的缘由是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

f0535d022292966afe198eaff0516300.png

这种问题最简单的方法是装个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 )

参考文献


版权声明:本文为weixin_39767121原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。