基于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中用fork()函数生成的子进程
May 04 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
Python bytes string相互转换过程解析
Mar 05 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
Python 实现简单的客户端认证
Jul 29 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
python集合的新增元素方法整理
Dec 07 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
php5.3 注意事项说明
2013/07/01 PHP
php从字符串创建函数的方法
2015/03/16 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
Express的路由详解
2015/12/10 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python3生成手写体数字方法
2018/01/30 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
通过shell+python实现企业微信预警
2019/03/07 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
行政经理岗位职责
2013/11/09 职场文书
模范家庭事迹材料
2014/02/10 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
销售开票员岗位职责
2015/04/15 职场文书
小爸爸观后感
2015/06/15 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android