基于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使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python实现的矩阵类实例
Aug 22 Python
python如何制作英文字典
Jun 25 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
python getopt模块使用实例解析
Dec 18 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
Pygame的程序开始示例代码
May 07 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Python爬虫与反爬虫大战
Jul 30 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
Python自然语言处理之切分算法详解
Apr 25 Python
在Python 中将类对象序列化为JSON
Apr 06 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
js实现返回顶部效果
2017/03/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
Python常用的爬虫技巧总结
2016/03/28 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python版本五子棋的实现代码
2018/12/11 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
Python: 传递列表副本方式
2019/12/19 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
土木建筑学生自我评价
2014/01/14 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
青年文明号申报材料
2014/12/23 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
教师辞职书范文
2015/02/26 职场文书
小学教师求职信范文
2015/03/20 职场文书
民事诉讼代理词
2015/05/25 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python