基于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文件夹与文件的操作实现代码
Jul 13 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
python生成二维码的实例详解
Oct 29 Python
python2.7实现爬虫网页数据
May 25 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
详解重置Django migration的常见方式
Feb 15 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
pyCharm 实现关闭代码检查
Jun 09 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 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获取当前页面URL函数实例
2014/10/22 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php实现socket推送技术的示例
2017/12/20 PHP
js 巧妙去除数组中的重复项
2010/01/25 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
js切换div css注意的细节
2012/12/10 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python中实现对list做减法操作介绍
2015/01/09 Python
理解Python中函数的参数
2015/04/27 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
详解Python的三种拷贝方式
2020/02/11 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
中青班党性分析材料
2014/02/16 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python