diff --git a/ButtonControls/RPiBluetooth.py b/ButtonControls/RPiBluetooth.py new file mode 100644 index 0000000000000000000000000000000000000000..5ad351d4a82dc6729618148c3231e0b9f6721730 --- /dev/null +++ b/ButtonControls/RPiBluetooth.py @@ -0,0 +1,64 @@ +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()