基于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操作摄像头截图实现远程监控的例子
Mar 25 Python
Python中super函数的用法
Nov 17 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
Python实现的购物车功能示例
Feb 11 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
Python面向对象实现方法总结
Aug 12 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
Python matplotlib多个子图绘制整合
Apr 13 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多用户读写文件冲突的解决办法
2013/11/06 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
prototype class详解
2006/09/07 Javascript
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
vue 指定组件缓存实例详解
2018/04/01 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
Python模拟用户登录验证
2017/09/11 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
美术国培研修感言
2014/02/12 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
销售目标责任书
2014/07/23 职场文书
党员自我剖析材料
2014/08/31 职场文书
2015年安全月活动总结
2015/03/26 职场文书
客户答谢会致辞
2015/07/30 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
Go获取两个时区的时间差
2022/04/20 Golang