基于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搭建HTTP服务器和FTP服务器
Mar 09 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python程序 创建多线程过程详解
Sep 23 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
python 实现性别识别
Nov 21 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python线程池threadpool实现篇
2018/04/27 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python gdal安装与简单使用
2019/08/01 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
中专毕业生个人职业生涯规划
2014/02/19 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
节水倡议书范文
2014/04/15 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
群教班子对照检查材料
2014/08/26 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers