Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

PyPI Licence

SimplePyBLE

The ultimate cross-platform library and bindings for Bluetooth Low Energy (BLE), designed for simplicity and ease of use.

Key Features

  • Cross-Platform: Enterprise-grade support for Windows, macOS, Linux

  • Easy Integration: Clean, consistent API across all platforms

  • Multiple Language Bindings: Production-ready bindings for C, C++, C#, Python, Java and Rust, with more coming soon

  • Commercial Ready: Source-available commercial license for proprietary applications

Support & Resources

We’re here to help you succeed with SimpleBLE:

Don’t hesitate to reach out if you need assistance - we’re happy to help!

Installation

You can install SimplePyBLE from PyPI using pip:

pip install simplepyble

When building from source on Debian or Ubuntu, install the DBus development headers first:

sudo apt-get install libdbus-1-dev

Usage

Scan for nearby devices:

import simplepyble

adapters = simplepyble.Adapter.get_adapters()
if not adapters:
    raise SystemExit("No Bluetooth adapters found.")

adapter = adapters[0]
print(f"Using adapter: {adapter.identifier()} [{adapter.address()}]")

adapter.set_callback_on_scan_found(
    lambda peripheral: print(
        f"Found: {peripheral.identifier()} [{peripheral.address()}] {peripheral.rssi()} dBm"
    )
)

adapter.scan_for(5000)

print("Scan results:")
for peripheral in adapter.scan_get_results():
    state = "connectable" if peripheral.is_connectable() else "not connectable"
    print(f"- {peripheral.identifier()} [{peripheral.address()}] {state}")

See the code examples on GitHub for connect, read/write, notify, local peripheral hosting, and Dongl pairing flows.

Asynchronous Support

SimplePyBLE provides an asynchronous API via the simplepyble.aio module. This module is designed to work with asyncio and provides a more idiomatic way to handle asynchronous operations in Python.

Example:

import asyncio
from simplepyble.aio import Adapter

async def main():
    adapters = Adapter.get_adapters()
    adapter = adapters[0]

    async with adapter:
        await adapter.scan_for(5000)
        peripherals = adapter.scan_get_results()
        for peripheral in peripherals:
            print(f"Found: {peripheral.identifier()} [{peripheral.address()}]")

if __name__ == "__main__":
    asyncio.run(main())

Check out the async examples for more details.

License

Since January 20th 2025, SimpleBLE is now available under the Business Source License 1.1 (BUSL-1.1). Each version of SimpleBLE will convert to the GNU General Public License version 3 after four years of its initial release. Qualifying non-commercial users may instead continue using and distributing that version under the original BUSL-1.1 terms under the Non-Commercial Perpetual Use Grant in LICENSE.md.

The project is free to use for non-commercial purposes, but requires a commercial license for commercial use. We also offer FREE commercial licenses for small projects and early-stage companies - reach out to discuss your use case!

Why purchase a commercial license?

  • Build and deploy unlimited commercial applications

  • Use across your entire development team

  • Zero revenue sharing or royalty payments

  • Choose features that match your needs and budget

  • Priority technical support included

  • Clear terms for integrating into MIT-licensed projects

Looking for information on pricing and commercial terms of service? Visit www.simpleble.org for more details.

For further enquiries, please email us or leave us a message on our website and we can discuss the specifics of your situation.


SimpleBLE is a project powered by The California Open Source Company.

Metadata

Release files for simplepyble 1.2.1.dev100

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for simplepyble 1.2.1.dev100
File
simplepyble-1.2.1.dev100-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 13.0+ x86-64 Details
simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_universal2.whl CPython 3.10 CPython 3.10 macOS 13.0+ universal2 (ARM64, x86-64) Details
simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_arm64.whl CPython 3.10 CPython 3.10 macOS 13.0+ ARM64 Details

Total release size: 4.7 MB

Release files / simplepyble-1.2.1.dev100-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL simplepyble-1.2.1.dev100-cp310-cp310-manylinux_2_28_aarch64.whl
Size 3.1 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ff912d48525e94dbce3ecbf2019d809f31c8be762920893dd4bd415945485576
BLAKE2b-256 checksum
How to use checksums
d299ae7aeeba3a0a76e02eb79b19abb5bfdc1da821360f366c91a6cfb57cc073
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_x86_64.whl

Download URL simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_x86_64.whl
Size 417.2 kB
Tags CPython 3.10 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
b111423cb2fe09e38e61c940aeea4c18475c18328a6c84520a7ec0991083dcf5
BLAKE2b-256 checksum
How to use checksums
212325b9da2b7a5c4bf4690e17974fa2449de63c9621d891a2f86c14d5f3c1b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_universal2.whl

Download URL simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_universal2.whl
Size 785.3 kB
Tags CPython 3.10 macOS 13.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
34b56ee3e917ae6707826713bfb59ac92d11292c03e2b14b9d91eb9acc16f3fe
BLAKE2b-256 checksum
How to use checksums
1cbbe6f84c6971d0bc42caeb350aa15bb3743ac8252c775b0be72323bc369ec3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_arm64.whl

Download URL simplepyble-1.2.1.dev100-cp310-cp310-macosx_13_0_arm64.whl
Size 384.5 kB
Tags CPython 3.10 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
4b9ab86a51c40b2dd210393cf111d7376f3b6a6287278784599e86d5ec511b9d
BLAKE2b-256 checksum
How to use checksums
43d43d448af8063a0ec4ae8b076c68cbd194d943631fb5cff77a7240490c94a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.2.1.dev100 This release

4 release files

1.2.0

46 release files

1.1.0

46 release files

1.0.0

46 release files

0.9.1

54 release files

0.9.0

47 release files

0.7.3

47 release files

0.7.1

47 release files

0.6.1

39 release files

0.6.0

38 release files

0.5.0

38 release files

0.0.5

36 release files

0.0.4

36 release files

0.0.3

36 release files

0.0.2

36 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page