基于python实现蓝牙通信代码实例

作者:-零 时间:2021-08-20 07:54:06 

这篇文章主要介绍了基于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 )

来源:https://www.cnblogs.com/-wenli/p/11646928.html

标签:python,蓝牙,通信
0
投稿

猜你喜欢

  • pytorch中关于distributedsampler函数的使用

    2023-01-18 01:10:01
  • Python进阶学习修改闭包内使用的外部变量

    2023-04-09 01:23:04
  • Python程序退出方式小结

    2021-12-21 19:29:55
  • Javascript Memoizer浅析

    2024-06-10 03:16:27
  • Hadoop 文件系统命令行基础详解

    2023-08-31 13:57:03
  • SQL Server日志清除的两种方法教程简介

    2008-05-04 20:59:00
  • Python 写小游戏吃金币+打乒乓+滑雪(附源码)

    2021-05-17 20:56:37
  • pydantic resolve解决嵌套数据结构生成痛点分析

    2022-06-05 02:16:36
  • python根据txt文本批量创建文件夹

    2021-12-18 21:24:52
  • PHP使用星号替代用户名手机和邮箱的实现代码

    2023-11-17 05:50:02
  • 如何在Django配置文件里配置session链接

    2022-09-08 18:17:33
  • pytorch 自定义参数不更新方式

    2021-11-11 01:55:55
  • Python部署web开发程序的几种方法

    2023-08-24 06:30:32
  • Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】

    2022-07-06 16:40:59
  • javascript实现促销倒计时+fixed固定在底部

    2024-05-11 09:33:04
  • 从绘画语言的发展,看视觉设计风格

    2008-08-03 17:11:00
  • python中map()函数使用方法详解

    2022-12-19 13:56:37
  • 使用django的objects.filter()方法匹配多个关键字的方法

    2022-04-08 06:11:20
  • 微信小程序开发之获取用户手机号码(php接口解密)

    2023-11-15 03:34:59
  • SQL实现LeetCode(185.系里前三高薪水)

    2024-01-18 19:12:22
  • asp之家 网络编程 m.aspxhome.com