Не могу понять, как отправлять команды на устройство Bluetooth - PullRequest
0 голосов
/ 07 ноября 2019

Так что я изо всех сил пытался реализовать сканер отпечатков пальцев Bluetooth, который я получил от Aliexpress. Я уже 2 дня смотрю, как это сделать, и я нахожусь на этапе, когда я могу подключиться и отправить материал. Но я понятия не имею, как это сделать без надлежащего UUID и сервиса. Вот периферийная информация

{
    "characteristics":[
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a00",
            "service":"1800"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a01",
            "service":"1800"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a04",
            "service":"1800"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a29",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a24",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a25",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a27",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a26",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a28",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a23",
            "service":"180a"
        },
        {
            "properties":{
                "Read":"Read"
            },
            "characteristic":"2a2a",
            "service":"180a"
        },
        {
            "properties":{
                "Write":"Write",
                "Read":"Read"
            },
            "characteristic":"49535343-6daa-4d02-abf6-19569aca69fe",
            "service":"49535343-fe7d-4ae5-8fa9-9fafd205e455"
        },
        {
            "descriptors":[
                {
                    "value":null,
                    "uuid":"2902"
                }
            ],
            "properties":{
                "Notify":"Notify",
                "Write":"Write"
            },
            "characteristic":"49535343-aca3-481c-91ec-d85e28a60318",
            "service":"49535343-fe7d-4ae5-8fa9-9fafd205e455"
        },
        {
            "descriptors":[
                {
                    "value":null,
                    "uuid":"2902"
                }
            ],
            "properties":{
                "Indicate":"Indicate",
                "Notify":"Notify"
            },
            "characteristic":"fff1",
            "service":"fff0"
        },
        {
            "properties":{
                "Write":"Write",
                "WriteWithoutResponse":"WriteWithoutResponse"
            },
            "characteristic":"fff2",
            "service":"fff0"
        }
    ],
    "services":[
        {
            "uuid":"1800"
        },
        {
            "uuid":"180a"
        },
        {
            "uuid":"49535343-fe7d-4ae5-8fa9-9fafd205e455"
        },
        {
            "uuid":"fff0"
        }
    ],
    "advertising":{
        "txPowerLevel":2,
        "serviceData":{

        },
        "serviceUUIDs":[
            "fff0"
        ],
        "localName":"FGT19100003",
        "isConnectable":true,
        "manufacturerData":{
            "bytes":[
                2,
                1,
                2,
                12,
                9,
                70,
                71,
                84,
                49,
                57,
                49,
                48,
                48,
                48,
                48,
                51,
                3,
                3,
                240,
                255,
                2,
                10,
                2,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
            ],
            "data":"AgECDAlGR1QxOTEwMDAwMwMD8P8CCgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
            "CDVType":"ArrayBuffer"
        }
    },
    "rssi":-48,
    "id":"88:1B:99:25:AD:54",
    "name":"FGT19100003"

Но я вижу характеристику всего с 4 символами. Теперь, насколько мне известно, они имеют формат XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Я получил некоторый исходный код в JAVA, который я могу загрузить, если кто-то захочет взглянуть на него (он работает, я установил его, он может сканировать отпечаток пальца и возвращает мне его BitMatrix.) (Проект src java: https://filebin.net/7jeo1o0lkgd8x2oy)

Вот код для функции, которую я использую в RN.

    test(peripheral: { connected: any; id: string; }) {
        if (peripheral) {
            if (peripheral.connected) {
                BleManager.disconnect(peripheral.id);
            } else {
                BleManager.connect(peripheral.id).then(() => {
                    let peripherals = this.state.peripherals;
                    let p = peripherals.get(peripheral.id);
                    if (p) {
                        p.connected = true;
                        peripherals.set(peripheral.id, p);
                        this.setState({ peripherals });
                    }
                    console.log('Connected to ' + peripheral.id);


                    setTimeout(() => {
                        BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => {
                            console.log(JSON.stringify(peripheralInfo))
                            var service = '49535343-6daa-4d02-abf6-19569aca69fe';
                            var crustCharacteristic = '49535343-fe7d-4ae5-8fa9-9fafd205e455';

                            setTimeout(() => {
                                BleManager.startNotification(peripheral.id, service, crustCharacteristic).then(() => {
                                    console.log('Started notification on ' + peripheral.id);
                                    setTimeout(() => {
                                        BleManager.write(peripheral.id, service, crustCharacteristic, [0]).then(() => {
                                            console.log('write succes');
                                        });

                                    }, 500);
                                }).catch((error) => {
                                    console.log('Notification error', error);
                                });
                            }, 200);
                        });

                    }, 900);
                }).catch((error) => {
                    console.log('Connection error', error);
                });
            }
        }
    }

У кого-нибудь есть опыт? У меня также есть таблица, в которой, как мне кажется, содержатся все возможные команды(https://i.imgur.com/0TP0etn.png).

1 Ответ

0 голосов
/ 15 ноября 2019

BLE Сервисы и характеристики, которые имеют только 16-битные UUID, являются стандартами, установленными Bluetooth SIG. Их можно найти здесь и здесь соответственно. Большинство характеристик в этом списке являются стандартными, и я бы поспорил только с 128-битным UUID (0x49535343-fe7d-4ae5-8fa9-9fafd205e455), который является пользовательской службой для данных отпечатков пальцев, или 0xFFF0. оказание услуг. У каждого из них есть некоторые характеристики с указанием / уведомлением, так что это те, которые, я думаю, будут иметь данные. 0xFFF0 не является стандартным UUID, но он часто используется в примерах кодов и примерах реализации, но обычно его не должно быть в отгрузочном продукте, но он имеет такой же шанс, что и правильная характеристика, как и другой. Я попытался бы создать очень большой буфер данных и установить характеристики для уведомления / указания в обеих службах, затем выполнить тест отпечатков пальцев и посмотреть, что вы получите.

В качестве альтернативы, вы можете использовать один из мобильных телефонов. BLE отлаживают приложения от Nordic (NRFconnect) или Cypress (CySmart), чтобы выполнить тот же тест и получить представление о правильной характеристике с помощью телефона для выполнения того же теста.

...