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


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?