基于python实现蓝牙通信代码实例

所属分类: 脚本专栏 / python 阅读数: 1401
收藏 0 赞 0 分享

这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

安装和示例

linux下安装

sudo apt-get install python-pip libglib2.0-dev
sudo pip install bluepy

官方示例

import btle
class MyDelegate(btle.DefaultDelegate):
	def __init__(self, params):
	btle.DefaultDelegate.__init__(self)#..
	.initialise here
def handleNotification(self, cHandle,
	data): #...perhaps check cHandle#...process 'data'
#
Initialisation-- -- -- -
p = btle.Peripheral(address)
p.setDelegate(MyDelegate(params))
# Setup to turn notifications on, e.g.#svc =
	p.getServiceByUUID(service_uuid)# ch =
	svc.getCharacteristics(char_uuid)[0]# ch
	.write(setup_data)
# Main loop-- -- -- --
while True:
	if p.waitForNotifications(1.0): #
	handleNotification() was called
continue
print "Waiting..."#
Perhaps do something
else here

蓝牙通信模块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 )

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

QML用PathView实现轮播图

这篇文章主要为大家详细介绍了QML用PathView实现轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Opencv图像处理:如何判断图片里某个颜色值占的比例

这篇文章主要介绍了Opencv图像处理:如何判断图片里某个颜色值占的比例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python golang中grpc 使用示例代码详解

这篇文章主要介绍了python golang中grpc 使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

浅谈python opencv对图像颜色通道进行加减操作溢出

这篇文章主要介绍了浅谈python opencv对图像颜色通道进行加减操作溢出,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

解决python运行启动报错问题

这篇文章主要介绍了解决python运行启动报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python常见反爬虫机制解决方案

这篇文章主要介绍了Python常见反爬虫机制解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题

这篇文章主要介绍了解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

pycharm设置默认的UTF-8编码模式的方法详解

这篇文章主要介绍了pycharm设置默认的UTF-8编码模式,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

浅谈Pycharm的项目文件名是红色的原因及解决方式

这篇文章主要介绍了浅谈Pycharm的项目文件名是红色的原因及解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python网络爬虫四大选择器用法原理总结

这篇文章主要介绍了Python网络爬虫四大选择器用法原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多