python蓝牙le(低能耗)和gatt库

vernierpygatt的Python项目详细描述


pygatt-蓝牙通用属性配置文件(gatt)的python模块。

此模块允许读取和写入设备上的gatt描述符 例如健身跟踪器、传感器和任何实现标准的东西 gatt描述符行为。

pygatt通过包装两个不同的后端来提供pythonic api:

  • Bluez(需要Linux),使用 gatttool 命令行实用程序。
  • BlueGiga的BGAPI,与BLED112等USB适配器兼容。

动机

尽管ble很流行,但我们还没有找到一个好的编程 桌面计算机上的IT接口。因为大多数外围设备 设计用于智能手机,这个空间被忽略了。一 bluez的gatttool交互界面是功能性的,但很难实现。 程序化地使用bluez本身显然可以工作,但是接口 留下一些需要的东西,并且只能在Linux中工作。

要求

  • python 2.7.5或更高版本,或python 3.5或更高版本
      < DL>
      Python2.7.3的 struct 库有一个错误,它将破坏Pygatt-2.7.5
      建议
      或更高版本。
  • bluez 5.18或更高(含gattool)-gattool所需 仅限后端。
    • 在5.18、5.21、5.35和5.43上测试
  • gattoolbackend需要Linux(即不兼容Windows)

安装

使用来自pypi的pip安装pygatt

$ pip install pygatt

默认情况下不支持bluez后端,因为它需要 pexpect ,它只能安装在基于unix的环境中。如果 要使用该后端,请使用以下命令安装可选依赖项:

$ pip install "pygatt[GATTTOOL]"

使用pip:

安装最新开发版本的 pygatt
$ pip install git+https://github.com/peplin/pygatt

示例使用

此库用户的主要api由 pygatt.blebackend pygatt.blevice 。在初始化 首选后端的实例(找到可用的实现 在pygatt.backends中,使用blebackend.connect方法连接 到设备并获取bleDevice的实例。

importpygatt# The BGAPI backend will attemt to auto-discover the serial device name of the# attached BGAPI-compatible USB adapter.adapter=pygatt.BGAPIBackend()try:adapter.start()device=adapter.connect('01:23:45:67:89:ab')value=device.char_read("a1e8f5b1-696b-4e4c-87c6-69dfe0b0093b")finally:adapter.stop()

请注意,并非所有后端都支持连接到 此时,再次调用blebackend.connect可能会终止现有的 连接。

下面是使用gattool后端的相同示例。一模一样 除了后端的初始化:

importpygattadapter=pygatt.GATTToolBackend()try:adapter.start()device=adapter.connect('01:23:45:67:89:ab')value=device.char_read("a1e8f5b1-696b-4e4c-87c6-69dfe0b0093b")finally:adapter.stop()

通知示例

本例使用gattool后端连接到具有特定 mac地址,订阅特征上的通知,并打印 每次通知中返回的数据。

importpygattfrombinasciiimporthexlifyadapter=pygatt.GATTToolBackend()defhandle_data(handle,value):"""
    handle -- integer, characteristic read handle the data was received on
    value -- bytearray, the data returned in the notification
    """print("Received data: %s"%hexlify(value))try:adapter.start()device=adapter.connect('01:23:45:67:89:ab')device.subscribe("a1e8f5b1-696b-4e4c-87c6-69dfe0b0093b",callback=handle_data)finally:adapter.stop()

调试

在使用pygatt调试软件时,查看 发生在图书馆里。您可以启用调试日志记录并 它用以下代码打印到您的终端:

import pygatt
import logging

logging.basicConfig()
logging.getLogger('pygatt').setLevel(logging.DEBUG)

在Windows中找不到BGAPI设备

您可能需要显式指定bgapi兼容的com端口 Windows中的设备,例如:

adapter = pygatt.BGAPIBackend(serial_port='COM9')

如果您提供了COM端口名,但仍然会收到如下错误 WindowsERROR(2,'系统找不到指定的文件') ,请尝试 将设备的COM端口更改为小于10的值,例如 com9

作者

释放到pypi

对于项目的维护者,当您想发布时:

  • 将所有更改合并到 master
  • 更新setup.py中的版本
  • 更新 changelog.mkd
  • 标记commit和push-to-github(将需要push到一个单独的 pr的第一个分支,因为 master 是受保护的分支。
  • travis ci将负责其余的工作-它将构建和部署 标记自动提交到PYPI。

许可证

版权所有2015 Stratos Inc.和Orion Labs

apache许可证,版本2.0和mit许可证。请参阅许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有嵌套JAR的java RCP ClassNotFoundException   java在输入框中设置默认值,crud应用程序使用spring   java如何在Heroku中使用fs创建新文件   java将JPanel放在JFrame中   java这个正则表达式会匹配“i.imgur.com/xxx”吗?   java在片段内创建RecylerView,而无需在Android中设置片段   Android上Groovy导致java错误的双精度浮点精度损失   swing Java查找JFrame属于JPanel的内容   java Spring junit自连线自定义类本身必须有构造函数吗?   java textswitcher支持前面的文本   从Android客户端到JAXRS的java Post自定义对象   java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进   拒绝用户“root”@“localhost”的java c3p0访问(使用密码“是”)   使用Selenium Webdriver自动化ExtJS应用程序时java面临的问题