PyBluez - 蓝牙 Python 扩展模块2024 年 8 月 29 日 | 阅读 6 分钟 引言本教程讨论 PyBluez - 蓝牙 Python 扩展模块。本文旨在向您介绍蓝牙编程,并帮助您入门 PyBluez,这是一个 Python 蓝牙模块。蓝牙套接字编程与网络设计者用于 TCP/IP 连接的套接字编程相同,熟悉这种范式会有帮助,但不是必需的。Python 是一种通用且强大的动态类型面向对象语言,具有简洁的语法和内置的内存管理,因此程序员可以利用现有的算法,而不必担心内存泄漏或括号匹配。我可以集中精力。 Python 拥有庞大且全面的时尚库,但蓝牙支持仍需作为旧分发版的一部分。经过良好文档的 C API 允许软件开发人员创建第三方扩展模块,以扩展语言功能并提供对 Python 中尚不可用的操作系统资源的访问。PyBluez 是一个用 C 编写的 Python 扩展模块,它提供了面向对象的模块化访问系统蓝牙资源的方式。它为 Windows XP 和 GNU/Linux 编写。 蓝牙编程的基本术语和定义是什么?蓝牙地址或设备地址以这种方式制造的每个蓝牙芯片都印有唯一的、众所周知的蓝牙地址或设备地址的 48 位详细信息。这与以太网 MAC 地址相同,用于标识特定的蓝牙设备。 1. 传输协议 在多层网络结构中,传输协议是负责开发数据包、确保同步和鲁棒性以及防止丢失记录的层。Internet 编程使用 TCP 或 UDP 作为传输协议,但对于蓝牙,最常用的传输协议是 L2CAP 和 RFCOMM。 2. 蓝牙配置文件 蓝牙是蓝牙的短距离特性。蓝牙配置文件是某些承诺的组成部分。有单独的配置文件用于在物理环境中替换数据、打印到附近的打印机以及用于附近的调制解调器拨打电话。可能还有一个用于将蓝牙编程减少到 Internet 编程的配置文件。 3. 设备名称 这是蓝牙设备的易于阅读的名称,显示给用户,而不是设备的蓝牙地址。这通常是用户可配置的,并且可以对多个设备相同。用户代理负责将名称翻译成相应的蓝牙地址。TCP/IP 有一个名称服务器用于此目的,但对于蓝牙,客户端程序必须利用设备与用户指定的名称的接近度。 4. 端口号 一旦您知道数字地址和传输协议,蓝牙编程最重要的部分就是选择用于通信的端口号。同一主机上的多个应用程序不能在没有端口号的情况下使用相同的传输协议。此概念也用于 Internet 编程,使用不同的端口,例如 HTTP 和 TCP。端口是 L2CAP 传输协议中的协议服务多路复用器。RFCOMM 有 1 到 30 的通道编号。与 Internet 编程相比,蓝牙的端口数量非常有限。因此,蓝牙端口是根据应用程序需求在运行时分配的。在设计时,客户使用一种称为通用唯一标识符 (UUID) 的 128 位宽数字来了解要查找哪个端口描述。它通过使用称为服务发现协议的内容来实现此目的。 已定义蓝牙传输协议蓝牙上有多种传输协议。传输协议如下所示: 1. L2CAP此传输协议用于每个数据包都不重要但需要传输速度的情况。它与 UDP 协议非常相似,并且用于简化。它发送固定持续时间的可靠数据包,并且对于不同级别的可靠性是相当可定制的。实用程序可以使用三种规则
2. RFCOMMRFCOMM 协议非常类似于 TCP,并提供类似的服务和功能。在许多情况下,它非常容易使用,并且通常用于点对点程序。如果一部分数据在固定时间内未发送,则连接终止。当应用程序停止时,一旦定义了端口计数,它就与串行端口编程非常相似,并且可以使用与任何串行设备相同的实践。这是套接字编程中最直观、最容易的部分。 什么是 Bluez 堆栈和 PyBluez?现在来谈谈邮件中的实际收入。PyBluez 是一个用于蓝牙套接字编程的 C(也称为 Bluez)和 Python 库。PyBluez 是一个用 C 编写的 Python 扩展模块,它以面向对象的模块化方式允许访问设备的蓝牙资源。虽然它在两种语言中都提供了类似的功能,但这里只讨论最好的基于 Python 的实现。PyBluez 可用于 Microsoft Windows(XP 及更高版本)和 GNU/Linux。本教程教授 Python 的基础知识,并熟悉 Linux 运行设备。 使用 Bash 进行蓝牙套接字编程对于某些程序,使用 Bash 编写一些不错的蓝牙通信脚本非常重要。在我们的项目中,我们在转移到 Python 之前使用了这种方法,因为它与 ROS 兼容性很好。这些数据对于想要深入了解 Bash 并学习简单脚本的人来说很有价值。Bash 是一种解释性语言,类似于 Python,并且 Bash 脚本会逐条执行命令,就像您在终端中输入它们一样。用于串行通信的第一个命令是 sdptool。这将允许您在特定通道上使用串行端口。对于 RFCOMM,使用的通道是 22。然后您可以使用 rfcomm watch 命令将通道 22 绑定到 /dev/rfcomm0 22 的开发端口。使用这些简单的命令,您可以在 rfcomm 端口上收听串行统计信息。现在,当您将计算机与蓝牙设备和 Android 手机配对,并使用 BlueTerm 等蓝牙模拟器应用程序时,您应该能够将数据通过串行发送到您的计算机,并将其“echo”到显示屏或文件传输。 使用 PyBluez 进行蓝牙编程的标准步骤蓝牙编程的一般步骤是:
在 PyBluez 的使用中,这些步骤被高度抽象化,应用程序级别的包几乎与与串行设备进行串行通信相同。对于大多数程序,RFCOMM 被用作传输协议,并且预先确定了设备名称以避免混淆。在 PyBluez 中,可以根据设备名称直接指定用于通信的附近设备,而无需了解硬件地址。 编程以套接字编程的形式执行,通过创建 BluetoothSocket 对象。在这些设备的构造函数中,您可以指定要使用的传输协议(RFCOMM/L2CAP)。之后,您可以使用 join 方法实际连接到蓝牙设备。默认情况下,所有通信都在 RFCOMM 端口 1 上进行;但是,您可以动态选择端口。错误处理同样很简单。如果操作失败,将引发 BluetoothError,可以在 Python 中的 try-except 循环中捕获。 PyBluez 最吸引人的功能之一是使用服务发现协议的便利性。如上所述,服务发现协议允许我们在运行时发现我们将要连接的蓝牙端口(RFCOMM 或 L2CAP)。它不依赖于设计时端口号和/或设备地址的唯一性。advertise_service 方法通过本地 SDP 服务器广播服务,find_service 方法搜索所有蓝牙设备以查找特定服务,并且不需要设备 ID。get_available_port 返回给定协议的第一个可用端口变体,但不再存储,因此必须将其绑定到端口。由于时间差异,可用性可能会波动,并且可能会抛出 BluetoothException。还有高级用法选项,例如异步设备发现,它允许系统即使在尚未与设备建立连接时也能返回。此功能在某些情况下非常有用。 |
NumPy 和 Pandas 简介 NumPy 是科学计算的核心 Python 库之一。该库以其动态编程功能而闻名,包括高级语法、对各种硬件和计算设备的兼容性、数值计算实用程序、Python 的多功能性、编译效率...
阅读 6 分钟
Python (x,y) 是一款完全免费使用的工程和科学开发软件。Python (x,y) 软件用于数据分析、数据可视化和数值计算。Python (x,y) 基于 Spyder 交互式科学开发环境、Python 编程语言和 GUI(图形用户界面)...
阅读 4 分钟
在深入探讨这个主题之前,我们需要了解 Python 中的错误和异常,以及这两个词之间的区别。首先,有两种类型的错误——语法错误和逻辑错误。当程序员没有遵循……时会发生语法错误。
阅读 6 分钟
在此问题中,我们将给定一个包含“(" 和 ")" 的字符串表达式。括号可能不以使表达式平衡的方式放置。我们需要反转括号以使表达式平衡。最后,我们必须返回...
阅读 4 分钟
Python seek() 方法用于更改文件句柄的当前位置。文件句柄就像一个光标,用于定义文件中要读取或写入数据的位置。语法:fi.seek(offset, from_where),其中 fi 是...
阅读 2 分钟
我们大多数人可能都知道,有许多网站不允许其用户将网站内容下载为 PDF 格式文件。相反,他们要么要求他们购买其服务的高级版本,要么不提供...
阅读 4 分钟
想象一个数组,其中所有元素都出现三次,除了一个只出现一次的元素。找出只出现一次的那个元素。我们应该在 O(n) 时间复杂度和 O(1) 额外空间内解决这个问题。示例 输入:arr[] = {2, 5, 6, 6, 5, 1,...
7 分钟阅读
在本教程中,我们将编写 Python 程序来反转给定字符串中的元音。这是面试中经常问到的字符串问题。让我们了解一下问题陈述。问题陈述:我们给定一个字符串 s,只反转所有元音...
阅读 4 分钟
?Python 中的单因素方差分析 单因素方差分析(也称为“方差分析”)是一种测试,可用于确定各组结果之间是否存在任何显著的统计差异。假设:单因素方差分析基于以下备择假设和原假设。H0(原假设)...
阅读 2 分钟
Python 初学者项目构想 学习任何编程语言或技术最好的方法是创建项目。目前,Python 是最受欢迎且最具挑战性的语言。我们可以通过为特定项目创建代码来测试自己。它...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India