基于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标准库urllib2的一些使用细节总结
Mar 16 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
在Python中使用正则表达式的方法
Aug 13 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
python中单例常用的几种实现方法总结
Oct 13 Python
Python日期时间Time模块实例详解
Apr 15 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
解决python 找不到module的问题
Feb 12 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
django的autoreload机制实现
Jun 03 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
js实现计时器秒表功能
2019/12/16 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python格式化字符串实例总结
2014/09/28 Python
浅谈Python中数据解析
2015/05/05 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
傲盾软件面试题
2015/08/17 面试题
装修设计师求职信
2014/02/26 职场文书
终止劳动合同协议书
2014/10/05 职场文书
高三英语复习计划
2015/01/19 职场文书
特岗教师个人总结
2015/02/10 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书