Skip to content
/ pygatt Public
forked from peplin/pygatt

Python wrapper for gatttool from BlueZ to access Bluetooth LE Devices

License

Notifications You must be signed in to change notification settings

3sigma/pygatt

 
 

Repository files navigation

pygatt - Python Module for Bluetooth LE Generic Attribute Profile (GATT).

This Module allows reading and writing to GATT descriptors on devices such as fitness trackers, sensors, and anything implementing standard GATT Descriptor behavior.

pygatt provides a Pythonic API by wrapping two different backends:

  • BlueZ (requires Linux), using the gatttool command-line utility.
  • Bluegiga's BGAPI, compatible with USB adapters like the BLED112.

Motivation

Despite the popularity of BLE, we have yet to find a good programming interface for it on desktop computers. Since most peripherals are designed to work with smartphones, this space is neglected. One interactive interface, BlueZ's gatttool, is functional but difficult to use programatically. BlueZ itself obviously works, but the interface leaves something to be desired and only works in Linux.

Requirements

  • Python 2.7
  • BlueZ 5.5 or greater (with gatttool) - required for the gatttool backend only.
    • Tested on 5.18, 5.21 and 5.35.

Installation

Install pygatt with pip:

$ pip install https://github.com/stratosinc/pygatt

The BlueZ backend is not supported by default as it requires pexpect, which can only be installed in a UNIX-based environment. If you wish to use that backend, install the optional dependencies with:

$ pip install pygatt[GATTTOOL]

Example Use

The primary API for users of this library is provided by pygatt.backends.BLEBackend and pygatt.BLEDevice. After initializing an instance of the preferred backend (available implementations are found in pygatt.backends, use the BLEBackend.connect method to connect to a device and get an instance of BLEDevice.

import pygatt.backends

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

Note that not all backends support connecting to more than 1 device at at time, so calling BLEBackend.connect again may terminate existing connections.

Authors

Derived from the work of several others, see NOTICE.

Releasing to PyPI

For the maintainers of the project, when you want to make a release:

  • Merge all of the changes into master.
  • Update the version in setup.py.
  • Update the CHANGELOG.mkd
  • Tag the commit and push to GitHub (will need to push to a separate branch of PR first since master is a protected branch).
  • Travis CI will take care of the rest - it will build and deploy tagged commits to PyPI automatically.

License

Copyright 2015 Stratos Inc. and Orion Labs

Apache License, Version 2.0 and MIT License. See LICENSE.

About

Python wrapper for gatttool from BlueZ to access Bluetooth LE Devices

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.5%
  • Makefile 0.5%