基于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 相关文章推荐
详解Django缓存处理中Vary头部的使用
Jul 24 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
使用pyecharts在jupyter notebook上绘图
Apr 23 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
Python多线程threading模块用法实例分析
May 22 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
Jan 29 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
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
详解Web使用webpack构建前端项目
2017/09/23 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
redux.js详解及基本使用
2019/05/24 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python文件路径操作方法总结
2020/12/21 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
教师师德考核自我评价
2014/09/13 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
工程服务质量承诺书
2015/04/29 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python