基于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实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python字符串匹配算法KMP实例
Jul 18 Python
python模拟事件触发机制详解
Jan 19 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
执行Python程序时模块报错问题
Mar 26 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
解决python使用list()时总是报错的问题
May 05 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实现无限极分类图文教程
2014/11/25 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
再谈javascript原型继承
2014/11/10 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
Python线程创建和终止实例代码
2018/01/20 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python+OpenCV实现图像拼接
2020/03/05 Python
深入了解Python enumerate和zip
2020/07/16 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
师范生自我鉴定范文
2013/10/05 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
大学三年的自我评价
2013/12/25 职场文书
挂职思想汇报
2013/12/31 职场文书
办理退休介绍信
2014/01/09 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
2015年调度员工作总结
2015/04/30 职场文书
英雄儿女观后感
2015/06/09 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书