基于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 16 Python
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
python实现各进制转换的总结大全
Jun 18 Python
快速了解Python相对导入
Jan 12 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
python进程间通信Queue工作过程详解
Nov 01 Python
聊聊python中的循环遍历
Sep 07 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
python实现的人脸识别打卡系统
May 08 Python
python中的装饰器该如何使用
Jun 18 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
Preload基础使用方法详解
2020/02/03 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Cython 三分钟入门教程
2009/09/17 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Django 视图层(view)的使用
2018/11/09 Python
微信小程序python用户认证的实现
2019/07/29 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
运动会开幕式邀请函
2014/01/22 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
《草原》教学反思
2014/02/15 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
党内外群众意见范文
2015/06/02 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
导游词之五台山
2019/10/11 职场文书
Django显示可视化图表的实践
2021/05/10 Python