3

我想通過UWP應用程序找到找到並通過藍牙連接Arduino的方法,因此我找到了兩種方法(找不到任何官方的MS文檔) 所以一個方法是Windows 10 UWP與Arduino的藍牙連接

  DeviceInformationCollection availableDevices = await BluetoothSerial.listAvailableDevicesAsync(); 
     foreach (DeviceInformation device in availableDevices) 
     { 
      deviceList.Add(device); 

     } 

這將返回名爲「開發B」藍牙設備,它實際上是我的Arduino的藍牙模塊。即使有其他設備可用配對/不配對,此方法始終只返回「Dev B」。

然後我用這個功能來與Arduino的

  var selectedDevice = (DeviceInformation)DeviceListView.SelectedItem; 
     uint BaudRate = 9600; 
     var connection = new BluetoothSerial(selectedDevice.Name); 
     arduino = new RemoteDevice(connection); 
     connection.begin(BaudRate, SerialConfig.SERIAL_8N1); 
     connection.ConnectionEstablished += OnConnectionEstablished; 

     ConnectedDeviceTextBox.Text = "Connected with Arduino."; 

連接它奇妙的作品,並得到連接。一切是好到現在

,是因爲我需要找到可我發現下面的方法

  var selector = BluetoothDevice.GetDeviceSelectorFromPairingState(true); 
     var devices = await DeviceInformation.FindAllAsync(selector); 
     foreach (DeviceInformation device in devices) 
     { 
      deviceList.Add(device); 
     } 

這給了我所有配對的藍牙設備,但是藍牙模塊的名稱現在是HC的所有藍牙設備-05(這實際上是Windows在藍牙設置和其他地方顯示的名稱)。但是,如果我將此設備信息傳遞給上面的Connection代碼,則它不會連接。我試着在

var connection = new BluetoothSerial(selectedDevice.Name); 

使用設備名稱,但它不工作,我也試過路過的設備本身

var connection = new BluetoothSerial(selectedDevice); 

仍然沒有運氣。

有人可以請解釋名稱的差異,爲什麼它不與第二種方法連接。提前致謝。

回答

2

第一個api BluetoothSerial實際上在藍牙的RFCOMM設備上運行。你可以找到它的實現here

第二個api BluetoothDevice實際上在藍牙耳機等傳統藍牙設備上運行。

它們實現了不同的藍牙協議,分別屬於Windows Runtime中的Windows.Devices.Bluetooth.RfcommWindows.Devices.Bluetooth命名空間。

基於以上原因,您將BluetoothDevice通過BluetoothSerial接口並獲得失敗,這是合理的。

至於設備名稱,我認爲,因爲它在調用兩種類型的設備API的結果中有不同的表示,所以它們是不兼容的。

+0

謝謝你Rita, 瞭解Rfcomm和BluetoothDevice類之間的區別。 至於名稱,我嘗試更改HC-05藍牙模塊的名稱,除了我的應用程序以外,它的更新位置仍然以第一種方法顯示Dev B。如果我找到了某些東西,我會繼續研究並更新線程。 –