Skip to content
Snippets Groups Projects
Commit 0510219d authored by Paul-Winpenny's avatar Paul-Winpenny
Browse files

Create RPiBluetooth.py

parent a564f3f6
No related branches found
No related tags found
1 merge request!1App now has a basic structure and BLE support
This commit is part of merge request !1. Comments created here will be created in the context of that merge request.
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
ADVERTISING_UUID = '00001801-0000-1000-8000-00805f9b34fb'
def register_ad_cb():
print("Advertisement registered")
def register_ad_error_cb(error):
print(f"Failed to register advertisement: {error}")
def register_advertisement(adapter, advertisement):
ad_manager = dbus.Interface(adapter, 'org.bluez.LEAdvertisingManager1')
ad_manager.RegisterAdvertisement(advertisement.get_path(), {},
reply_handler=register_ad_cb,
error_handler=register_ad_error_cb)
class BLEAdvertisement(dbus.service.Object):
def __init__(self, bus, index):
self.path = f"/org/bluez/example/advertisement{index}"
self.props = {
'Type': dbus.String('peripheral'),
'ServiceUUIDs': dbus.Array([dbus.String(ADVERTISING_UUID)]),
'LocalName': dbus.String('MyRaspberryPi')
}
super().__init__(bus, self.path)
def get_path(self):
return dbus.ObjectPath(self.path)
@dbus.service.method('org.bluez.LEAdvertisement1', in_signature='', out_signature='a{sv}')
def GetProperties(self):
return self.props
@dbus.service.method('org.bluez.LEAdvertisement1', in_signature='', out_signature='')
def Release(self):
print(f"{self.path}: Released")
def main():
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
# Access the Bluetooth adapter
adapter = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.bluez.Adapter1')
# Make sure the adapter is powered on
adapter_props = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.freedesktop.DBus.Properties')
adapter_props.Set('org.bluez.Adapter1', 'Powered', dbus.Boolean(1))
# Create the BLE advertisement and register it
advertisement = BLEAdvertisement(bus, 0)
ad_manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.bluez.LEAdvertisingManager1')
ad_manager.RegisterAdvertisement(advertisement.get_path(), {},
reply_handler=register_ad_cb,
error_handler=register_ad_error_cb)
print("BLE Advertising started. Press Ctrl+C to stop.")
mainloop = GLib.MainLoop()
mainloop.run()
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment