que inalambrica coneccion c# bluetooth 32feet .net-gadgeteer

c# - inalambrica - Conecta dispositivos bluetooth a una computadora con la biblioteca Bluetooth de.NET de 32 pies.



coneccion inalambrica bt (1)

Si desea saber cómo usar la biblioteca de 32feet.NET para comunicarse con dispositivos Bluetooth, lea la solución

Actualmente estoy tratando de comunicarme a través de bluetooth entre una computadora y un prototipo Gadgeter de .NET de creación propia.

El prototipo Gadgeteer consta de la placa base, una fuente de alimentación y un módulo Bluetooth. El módulo está en modo detectable.

En la computadora se está ejecutando un programa de bluetooth personalizado basado en 32 pies .NET Bluetooth. El programa detecta todos los dispositivos Bluetooth dentro del alcance e intenta sincronizarlos. Sin embargo, esto no se hace automáticamente en este momento, tengo que ingresar un código de emparejamiento para el dispositivo.

¿Cómo puedo emparejar dispositivos sin ingresar el código de emparejamiento?

Se encuentran los dispositivos, el problema es la parte de emparejamiento. Experimenté mucho, pero no encontré una solución ...

foreach (BluetoothDeviceInfo device in this.deviceList) { try { //BluetoothClient client = new BluetoothClient(this.CreateNewEndpoint(localAddress)); //BluetoothEndPoint ep = this.CreateNewEndpoint(device.DeviceAddress); EventHandler<BluetoothWin32AuthenticationEventArgs> handler = new EventHandler<BluetoothWin32AuthenticationEventArgs>(HandleRequests); BluetoothWin32Authentication auth = new BluetoothWin32Authentication(handler); BluetoothSecurity.PairRequest(device.DeviceAddress, null); } }

Este bloque de código inicia el emparejamiento y funciona, pero Windows me pide que ingrese el código de emparejamiento para el dispositivo. Leí sobre la autenticación BluetoothWin32 para evitar este caso, pero no lo hago bien.

private void HandleRequests(object that, BluetoothWin32AuthenticationEventArgs e) { e.Confirm = true; }

Este es el código del controlador de eventos ( http://32feet.codeplex.com/wikipage?title=BluetoothWin32Authentication )

Si simplemente desea permitir que se realice la vinculación cuando se conecten los dispositivos SSP, entonces el manejo de la devolución de llamada y la configuración e.Confirm = True será suficiente, pero eso es un poco inseguro ...

Estoy confundido -.- El objetivo es que la aplicación y el módulo gadgeteer puedan enviar datos en ambas direcciones sin la interferencia del usuario.

¿Es cierto que no puedo emparejar dispositivos automáticamente sin la interacción del usuario?

¿Es cierto que si dos dispositivos ya estaban emparejados, pueden intercambiar datos sin la interacción del usuario?


Descubrí cómo resolver mis problemas y mi conocimiento sobre las conexiones Bluetooth es un poco más grande ahora. Si alguien más tiene problemas con eso, proporciono mi solución. Los ejemplos de código representan la implementación en C # de un controlador bluetooth con la biblioteca Bluetooth de 32 pies.

Exploración

Esto significa que se detectan dispositivos en rango. Mi código:

// mac is mac address of local bluetooth device BluetoothEndPoint localEndpoint = new BluetoothEndPoint(mac, BluetoothService.SerialPort); // client is used to manage connections BluetoothClient localClient = new BluetoothClient(localEndpoint); // component is used to manage device discovery BluetoothComponent localComponent = new BluetoothComponent(localClient); // async methods, can be done synchronously too localComponent.DiscoverDevicesAsync(255, true, true, true, true, null); localComponent.DiscoverDevicesProgress += new EventHandler<DiscoverDevicesEventArgs>(component_DiscoverDevicesProgress); localComponent.DiscoverDevicesComplete += new EventHandler<DiscoverDevicesEventArgs>(component_DiscoverDevicesComplete); private void component_DiscoverDevicesProgress(object sender, DiscoverDevicesEventArgs e) { // log and save all found devices for (int i = 0; i < e.Devices.Length; i++) { if (e.Devices[i].Remembered) { Print(e.Devices[i].DeviceName + " (" + e.Devices[i].DeviceAddress + "): Device is known"); } else { Print(e.Devices[i].DeviceName + " (" + e.Devices[i].DeviceAddress + "): Device is unknown"); } this.deviceList.Add(e.Devices[i]); } } private void component_DiscoverDevicesComplete(object sender, DiscoverDevicesEventArgs e) { // log some stuff }

Emparejamiento

Esto significa que los dispositivos se acoplan con el dispositivo bluetooth local. Esto debe hacerse una vez ingresando un código de ambos lados. Se puede hacer a través del código para que el usuario ni siquiera note que se agregó un dispositivo. Mi código para este propósito:

// get a list of all paired devices BluetoothDeviceInfo[] paired = localClient.DiscoverDevices(255, false, true, false, false); // check every discovered device if it is already paired foreach (BluetoothDeviceInfo device in this.deviceList) { bool isPaired = false; for (int i = 0; i < paired.Length; i++) { if (device.Equals(paired[i])) { isPaired = true; break; } } // if the device is not paired, pair it! if (!isPaired) { // replace DEVICE_PIN here, synchronous method, but fast isPaired = BluetoothSecurity.PairRequest(device.DeviceAddress, DEVICE_PIN); if (isPaired) { // now it is paired } else { // pairing failed } } }

Conectando

Esto significa establecer una conexión e intercambio de datos. De nuevo un código:

// check if device is paired if (device.Authenticated) { // set pin of device to connect with localClient.SetPin(DEVICE_PIN); // async connection method localClient.BeginConnect(device.DeviceAddress, BluetoothService.SerialPort, new AsyncCallback(Connect), device); } // callback private void Connect(IAsyncResult result) { if (result.IsCompleted) { // client is connected now :) } }

Si mantiene el escaneo de la orden, empareje, conecte, todo debería funcionar bien. Para enviar o recibir datos, use el método GetStream() del BluetoothClient . Proporciona un flujo de red que puede ser manipulado.

Recibiendo una conexión

Si desea que otro dispositivo se conecte con su dispositivo, necesita escuchar las solicitudes de conexión entrantes. Esto solo funciona si el dispositivo ya ha sido emparejado anteriormente. Mi código:

BluetoothListener l = new BluetoothListener(LOCAL_MAC, BluetoothService.SerialPort); l.Start(10); l.BeginAcceptBluetoothClient(new AsyncCallback(AcceptConnection), l); void AcceptConnection(IAsyncResult result){ if (result.IsCompleted){ BluetoothClient remoteDevice = ((BluetoothListener)result.AsyncState).EndAcceptBluetoothClient(result); } }

Reemplace LOCAL_MAC con una dirección de Bluetooth válida (por ejemplo, mediante el uso de BluetoothAddress.Parse(); ). Una vez que los dispositivos están conectados, pueden intercambiar mensajes a través del flujo subyacente. Si la conexión no funciona, puede haber problemas de autenticación, así que intente configurar el pin del dispositivo local en el oyente ( l.SetPin(LOCAL_MAC, MY_PASSWORD);