基于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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
Python Web开发模板引擎优缺点总结
May 06 Python
python使用nntp读取新闻组内容的方法
May 08 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
python字典改变value值方法总结
Jun 21 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
公司行政专员岗位职责
2014/08/24 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
考勤制度通知
2015/04/25 职场文书
辩护词格式
2015/05/22 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python