A simple Python API for Bluetooth D-Bus calls. Allows easy pairing, connecting and scanning. Also provides a TCP-to-RFCOMM socket bridge for data transfer.
python-dbus
tcpbridge
The package was tested with Python 2.7
pip install bluetool
or clone and run make install
Bluetooth:
list: [{"name": Name, "mac_address": MAC-address}, ... ]
Methods of class Bluetooth:
start_scanning(timeout)
: scan
in backgroundscan(timeout)
get_devices_to_pair()
, returns listget_available_devices()
, returns listget_paired_devices()
, returns listget_connected_devices()
, returns listmake_discoverable()
, returns boolstart_pairing(address)
: pair
in backgroundpair(address)
, returns boolconnect(address)
, returns booldisconnect(address)
, returns booltrust(address)
, returns boolremove(address)
, returns boolset_adapter_property(prop, value)
, returns boolget_adapter_property(prop)
set_device_property(address, prop, value)
, returns boolget_device_property(address, prop)
BluetoothServer:
run()
to create SPPUse shutdown()
to shutdown server.
from bluetool import Bluetooth
bluetooth = Bluetooth() bluetooth.scan() devices = bluetooth.get_available_devices() print(devices)
- Using the RFCOMM-TCP Bridge
```python
import signal
from bluetool import BluetoothServer
def handler(signum, frame):
server.shutdown()
tcp_port = 8100
server = BluetoothServer(tcp_port)
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
server.run()
import signal
from bluetool.agent import Client, AgentSvr
class MyClient(Client):
def request_pin_code(self, dev_info):
print(dev_info)
return raw_input("Input pin code:")
def request_passkey(self, dev_info):
print(dev_info)
return raw_input("Input passkey:")
def request_confirmation(self, dev_info, *args):
print(dev_info, args)
return raw_input("Input 'yes' to accept request:") == "yes"
def request_authorization(self, dev_info):
print(dev_info)
return raw_input("Input 'yes' to accept request:") == "yes"
def handler(signum, frame): svr.shutdown()
svr = AgentSvr(client_class=MyClient)
signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGTERM, handler)
svr.run()
### About the project
This package was written by [Aleksandr Aleksandrov](https://github.com/AD-Aleksandrov) working at [Emlid](https://emlid.com/).
The bluetool was originally written for the [Emlid Reach RTK receiver](https://emlid.com/reach/), but we decided to open source it, as there is no easy Python API for BT pairing/connecting. Feel free to add issues and submit pull requests.