基于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发送邮件接收邮件示例分享
Jan 21 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
Python如何测试stdout输出
Aug 10 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
Python实现疫情地图可视化
Feb 05 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
js DOM模型操作
2009/12/28 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
layui导航栏实现代码
2017/05/19 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
Python3实现的字典遍历操作详解
2018/04/18 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
浅析NumPy 切片和索引
2020/09/02 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
法人委托书
2014/07/31 职场文书
先进班集体事迹材料
2014/12/25 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android