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第三方库


热门话题
在Android应用程序中处理新活动时出现java NullPointerException   从PSV文件读取Java   在JavaSwing中将方法从一个类传递到另一个类   带有MongoDB错误的java Vertx ClassNotFoundException:com。mongodb。联系溪流工厂   在java中替换2D数组中的数字?   java Avro方案空布尔和双整数布尔的写并集   java导入组织。neo4j无法解决?   从另一个获取变量。使用反射的java文件   Java:以格式化字符串的形式返回具有非常不同的条目长度的2D数组   java客户端应用程序正在从IBMMQ接收不同格式的消息体   java在我的主循环中的步骤有问题   java如何正确安装来自sslforfree的证书。tomcat服务器上的com   java RecyclerView变更单永久   java如何获得屏幕的精确中间位置,即使调整了大小