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


Posted in Python onNovember 19, 2019

这篇文章主要介绍了基于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 )

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

Python 相关文章推荐
让python json encode datetime类型
Dec 28 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
python简单实现旋转图片的方法
May 30 Python
python实现kMeans算法
Dec 21 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
python单例设计模式实现解析
Jan 07 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
Django视图、传参和forms验证操作
Jul 15 Python
学习Python爬虫的几点建议
Aug 05 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
python flask开发的简单基金查询工具
Jun 02 Python
使用IDLE的Python shell窗口实例详解
Nov 19 #Python
学Python 3的理由和必要性
Nov 19 #Python
Python的缺点和劣势分析
Nov 19 #Python
wxPython实现绘图小例子
Nov 19 #Python
python 如何去除字符串头尾的多余符号
Nov 19 #Python
wxPython实现画图板
Aug 27 #Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 #Python
You might like
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
python实现电子词典
2020/04/23 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python中global用法实例分析
2015/04/30 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
django框架模板语言使用方法详解
2019/07/18 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
2014年三八妇女节活动总结
2014/03/01 职场文书
旅游节目策划方案
2014/05/26 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
班主任工作实习计划
2015/01/16 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang