У меня проблема с подключением модуля Bluetooth Arduino к моему компьютеру (имя модуля HC-06). Я пробовал класс port.devices в .net, но мне нужен класс UWP для его переноса на гололинзы, но я не могу попасть в Devices.Bluetooth Framework, потому что я не знаю, как получить Uuid с устройства для подключения к услугам или правильный метод, чтобы получить DeviceInformation.
Каждый раз, когда я получаю исключение NullReferenceException от port = await BluetoothDevice.FromIdAsync (bdeviceInfo.Id); Иногда это работает, но когда я использую port.Hostname, появляется то же исключение. Также устройство HC-06 указано дважды, почему? Кто-нибудь пробовал это еще? Мне легко работать с этим классом Port. Я не так глубоко разбираюсь в протоколлах Bluetooth и т.д., так что, может быть, я что-то пропустил. Я также попытался получить службу rfcomm от устройства, которое также не работает, но я думаю, что это проблема из-за неправильного идентификатора из bdeviceInfo.Id. Иногда это говорит ArgumentException. Это может быть связано со случайным списком этих двух перечисленных устройств. Я надеюсь, что кто-нибудь может помочь мне или рассказать мне больше о классе. Спасибо!
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Networking.Sockets;
namespace connectAppDice
{
using System.Collections;
using System.Collections.Generic;
using System;
//using System.IO.Ports;
//#if ENABLE_WINMD_SUPPORT && WINDOWS_UWPP
using System.Threading.Tasks;
using Windows.Devices.SerialCommunication;
using Windows.Devices.Bluetooth;
using Windows.Storage.Streams;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Devices.Bluetooth.Rfcomm;
using Windows.Storage;
public class connectAndReadDiceBluetooth
{
private IInputStream input;
private Task readThread;
private static Guid guid = new Guid("e0cbf06c-cd8b-4647-bb8a-263b43f0f974");
void ReceiveData()
{
while (readThread.Status == TaskStatus.Created) {
}
}
private void OnApplicationQuit()
{
//readThread.Abort();
//port.Close();
}
public static async Task listPorts()
{
StreamSocket _socket;
string bDeviceSelect;
DeviceInformationCollection bdevices;
DeviceInformation bdeviceInfo;
BluetoothDevice port;
DataWriter dataWriter;
bDeviceSelect = BluetoothDevice.GetDeviceSelector();
bdevices = await DeviceInformation.FindAllAsync(bDeviceSelect);
//create buffer to write
Console.Write(bdevices.Count + "\n");
if (bdevices.Count > 0) {
bdeviceInfo = bdevices[1];
for (int i = 0; i < bdevices.Count; i++)
{
Console.Write(bdevices[i].Name + " is NOT the preferred Device! \n");
}
for (int i = 0; i < bdevices.Count; i++) {
if (bdevices[i].Name == "HC-06") {
bdeviceInfo = bdevices[i];
Console.Write(bdevices[i].Name + " is the preferred Device! \n");
Console.Write("The second dice is " + bdevices[i].Name + "\n");
break;
}
}
try {
port = await BluetoothDevice.FromIdAsync(bdeviceInfo.Id);
Console.Write(port.Name + "\n");
Console.Write(port.HostName + "\n");
//Guid uuid = BluetoothUuidHelper.FromShortId((uint)bdeviceInfo.Id);
//var service = await port.GetRfcommServicesForIdAsync(RfcommServiceId.FromUuid(guid));
//_socket = new StreamSocket();
/*await _socket.ConnectAsync(port.HostName, "{00001101-0000-1000-8000-00805f9b34fb}",
SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);*/
/*await _socket.ConnectAsync(bdeviceInfo., "{00001101-0000-1000-8000-00805F9B34FB}",
SocketProtectionLevel.PlainSocket);*/
Console.Write("Ready");
} catch (Exception ex) {
Console.Write("Exception happend \n");
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
Console.Write("DeviceInfo \n");
Console.Write(bdeviceInfo.Name + "\n");
} else {
Console.Write("Sorry, no device found. \n");
}
}
}
//#endif
}