Esempio n. 1
0
def connect_ble_device(device):
    print('found device: ', str(device))

    if str(device).find('NOA_BLE_UART') > -1:
        lock.acquire()
        print('Start connect')
        device.connect()
        print('Start discover')
        device.discover()
        for key, val in device.characteristics.items():
            print("- GATTCharacteristic: 0x%x" % key)

        write_uuid = uuid.gattlib_uuid_str_to_int(
            '6e400002b5a3f393e0a9e50e24dcca9e')
        write_characteristic = device.characteristics[write_uuid]

        notify_uuid = uuid.gattlib_uuid_str_to_int(
            '6e400003b5a3f393e0a9e50e24dcca9e')
        notify_characteristic = device.characteristics[notify_uuid]
        notify_characteristic.register_notification(notify_progress)
        notify_characteristic.notification_start()

        while True:
            content = input("Please input content\n")
            if content == 'disconnect':
                device.disconnect()
                break
            else:
                write_characteristic.write(content.encode())
                print('write success: ', content)

        print("Quit success")
        default_adapter.scan_disable()
        default_adapter.close()
        lock.release()
Esempio n. 2
0
def sound_service(args, gatt_device):
    global m_mainloop

    NORDIC_THINGY_SOUND_SERVICE = uuid.gattlib_uuid_str_to_int(
        "EF680500-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_CONFIG_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680501-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_SPEAKER_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680502-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_SPEAKER_STATUS_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680503-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_MICROPHONE_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680504-9B35-4933-9B10-52FFA9740042")

    config_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_CONFIG_CHAR]
    speaker_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_SPEAKER_CHAR]
    speaker_status_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_SPEAKER_STATUS_CHAR]
    microphone_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_MICROPHONE_CHAR]

    try:
        DBusGMainLoop(set_as_default=True)
        m_mainloop = GLib.MainLoop()

        speaker_status_characteristic.register_notification(
            speaker_status_notification)
        speaker_status_characteristic.notification_start()

        if args.wav:
            threading.Thread(target=play_wav_file,
                             args=(config_characteristic,
                                   speaker_characteristic, args.wav)).start()
        else:
            threading.Thread(target=play_sample,
                             args=(config_characteristic,
                                   speaker_characteristic)).start()

        m_mainloop.run()
    except KeyboardInterrupt:
        m_mainloop.quit()
    finally:
        speaker_status_characteristic.notification_stop()
        gatt_device.disconnect()
Esempio n. 3
0
def environment_service(args, gatt_device):
    NORDIC_THINGY_WEATHER_STATION_SERVICE = uuid.gattlib_uuid_str_to_int(
        "EF680200-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_TEMPERATURE_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680201-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_PRESSURE_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680202-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_HUMIDITY_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680203-9B35-4933-9B10-52FFA9740042")
    NORDIC_THINGY_AIR_QUALITY_CHAR = uuid.gattlib_uuid_str_to_int(
        "EF680204-9B35-4933-9B10-52FFA9740042")

    temperature_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_TEMPERATURE_CHAR]
    pressure_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_PRESSURE_CHAR]
    humidity_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_HUMIDITY_CHAR]
    air_quality_characteristic = gatt_device.characteristics[
        NORDIC_THINGY_AIR_QUALITY_CHAR]

    # Initialize graph
    threading.Thread(target=graph_init).start()

    try:
        DBusGMainLoop(set_as_default=True)
        mainloop = GLib.MainLoop()

        temperature_characteristic.register_notification(
            temperature_notification)
        temperature_characteristic.notification_start()

        pressure_characteristic.register_notification(pressure_notification)
        pressure_characteristic.notification_start()

        humidity_characteristic.register_notification(humidity_notification)
        humidity_characteristic.notification_start()

        mainloop.run()
    except KeyboardInterrupt:
        mainloop.quit()
    finally:
        humidity_characteristic.notification_stop()
        pressure_characteristic.notification_stop()
        temperature_characteristic.notification_stop()
        gatt_device.disconnect()
Esempio n. 4
0
parser.add_argument('mac',
                    type=str,
                    help='Mac Address of the GATT device to connect')
parser.add_argument(
    'action',
    choices=['read', 'write'],
    help='Tell if we want to read/write the GATT characteristic')
parser.add_argument('uuid', type=str, help='UUID of the GATT Characteristic')
parser.add_argument('value',
                    type=str,
                    nargs='?',
                    help='Value to write to the GATT characteristic')
args = parser.parse_args()

gatt_device = device.Device(adapter=None, addr=args.mac)
gatt_device.connect()

uuid = uuid.gattlib_uuid_str_to_int(args.uuid)
if uuid not in gatt_device.characteristics:
    raise RuntimeError("Failed to find GATT characteristic '%s'" % args.uuid)

characteristic = gatt_device.characteristics[uuid]

if args.action == "read":
    value = characteristic.read()
    print(value)
elif args.action == "write":
    characteristic.write(value)

gatt_device.disconnect()