基于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发送伪造的arp请求
Jan 09 Python
推荐11个实用Python库
Jan 23 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Django 路由控制的实现代码
Nov 08 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
自学python的建议和周期预算
Jan 30 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Python简单实现区域生长方式
Jan 16 Python
Python多线程获取返回值代码实例
Feb 17 Python
python数据预处理 :数据共线性处理详解
Feb 24 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
很可爱的输入框
2008/08/03 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python能做什么 python的含义
2019/10/12 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Pytorch 实现权重初始化
2019/12/31 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
证婚人经典证婚词
2014/01/09 职场文书
党员违纪检讨书
2014/02/18 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python