Как подключиться к устройству BLE? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь установить соединение с устройством с BLE.Мне нужно подключиться к определенному устройству автоматически.Я не понимаю, как я могу сделать, чтобы подключиться непосредственно к устройству.Позвольте мне объяснить лучше, в данный момент я могу сканировать и получить все устройства Bluetooth.Вместо этого я хотел бы напрямую подключиться к конкретному устройству.- Я должен поэтому выбрать только один тип устройства - Подключите меня напрямую

Что вы думаете, я могу сделать?

С этим кодом я выбираю имя

return (

        <View style={{borderBottomColor: 'lightgrey', borderBottomWidth: 1, alignItems: 'stretch'}}>
            <View style={{flexDirection: 'row', alignItems: 'center', padding: 15}}>
                <View style={{flex: 1}}>
                    <Text style={{fontSize: 20, color: '#888'}}>{`${peripheral.name}`}</Text>
                </View>
                  <View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
                    <Btn onPress={() => onConnect(peripheral)}>
                        {`Connect`}
                    </Btn>

                  </View>
            </View>
        </View>
    )

С этим кодом я сканирую

return (

            <View style={{flex: 1 , paddingTop: Theme.navbarHeight }}>

                <StatusBar
                  /*  backgroundColor={Theme.color}*/
                  /*  barStyle="light-content" */
                />


                {
                    Object.keys(peripherals).length === 0 ? (
                        <View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
                            { uiState === UiState.scanning && <ActivityIndicator size='large' color={Theme.color}/> }
                            <Text style={{marginBottom: 10, fontSize: 18, color: '#999'}}>
                                Nessun Risultato
                            </Text>
                            { uiState === UiState.idle && <Btn onPress={this._doScan}>Scansione</Btn> }
                        </View>
                    ) : (
                        <ScrollView style={{ flex: 1 }} contentContainerStyle={{ alignItems: 'stretch' }}>
                            {
                                Object.keys(peripherals).map(key => peripherals[key]).map(
                                    peripheral => (
                                        <Peripheral
                                            key={peripheral.id}
                                            peripheral={peripheral}
                                            onConnect={onConnect}
                                        />
                                    )
                                )
                            }
                        </ScrollView>
                    )
                }
            </View>
        )
    }

    _renderScanButton = () => {
        let {uiState} = this.state;
        if (uiState === UiState.scanning) {
            return <ActivityIndicator color='white'/>
        }
        return (
            <TouchableOpacity onPress={this._doScan}>
                <Text style={{color: 'white', width: 100, textAlign: 'right'}}>Scansione</Text>
            </TouchableOpacity>
        )
    }


    _doScan = () => {
        if (this.state.uiState !== UiState.idle) {
            return;
        }

        this.setState({ uiState: UiState.scanning, peripherals: {} });
        BleManager.scan([], 5, true)
            .then(results => {
                console.log('Scansione in corso...');
            })
            .catch(() => {
                this.setState({ uiState: UiState.idle })
            })
    }
}

1 Ответ

1 голос
/ 13 мая 2019

Вы используете react-native-ble-manager.Согласно их документам , вы можете подключиться к периферийному устройству, используя метод connect:

BleManager.connect('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX')
  .then(() => {
    // Success code
    console.log('Connected');
  })
  .catch((error) => {
    // Failure code
    console.log(error);
  });

. Вы должны получить UID периферийного устройства из метода сканирования results:

BleManager.scan([], 5, true)
  .then(results => {
    // Success code
    console.log(results);
  });

Лично я не использую пакет react-native-ble-manager, но пакет react-native-ble-plx, но процесс довольно похож.Вот как я это делаю:

manager.startDeviceScan(null, null, async (error, device) => {
    console.log("scanning bluetooth...")

    if (device.name === "MY_DEVICE_NAME") {
        manager
            .connectToDevice(device.id, {
                autoconnect: true,
                timeout: BLUETOOTH_TIMEOUT
            })
        // ............
    }
})
...