es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Bluetooth LE solo para dispositivos emparejados en Windows?

Desarrollé un sensor Open-IoT con hardware BLE (CPU Nordic, https://github.com/joembedded/Open-SDI12-Blue), que funciona de manera excelente y puedo acceder fácilmente a él (y sin emparejamiento) a través de la API de Web-Bluetooth (HTML/JS) en Windows y Android.

Ahora, al intentar hacer lo mismo en RAD Studio C++ (usando Windows 11), parece que solo se aceptan dispositivos emparejados para “DiscoverServices()” (los no emparejados generan una excepción). Esto no tiene sentido (especialmente para BLE)…

Noté una opción en la Configuración de Windows para “permitir esto a aplicaciones especiales”, como MS LE Explorer.

Encontré para la entrada “TBluetoothLEDevice*” una opción “Emparejado” (Captura de pantalla de la configuración de Windows) enlace a la imagen (https://i.stack.imgur.com/vPnFQ.png).

¿Alguien sabe si hay una solución automática?

¡Gracias por su ayuda!
Jo (JoEmbedded.de)

// Esto es del DEMO de RAD Studio BLE-Scanner-Demo (solo en C, pero los datos son los mismos para Delphi)

void __fastcall TTPDiscoverServices::Invoke(void){
TBluetoothLE BLEh = FForm->BluetoothLE1;
TBluetoothLEDeviceList *DLh = BLEh->DiscoveredDevices;
TBluetoothLEDevice
BTDev = DLh->Items[FForm->ListBox1->ItemIndex];
bool bres;
if(!BTDev->Paired) {
bres = false;
::MessageBox(NULL,L”¿Dispositivo no emparejado?”,L”**Error**”,MB_OK);
} else {
//original: if(!FForm->BluetoothLE1->DiscoveredDevices->Items[FForm->ListBox1->ItemIndex]->DiscoverServices())
bres = BTDev->DiscoverServices(); // Jo: Excepción Win11 para dispositivos no emparejados
::MessageBox(NULL,bres?L”Descubrimiento OK”:L”Error de descubrimiento”,L”**Descubrimiento**”,MB_OK);
}
if(!bres) TThread::Synchronize(NULL, SynchronizeProc);
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para el problema de descubrimiento de dispositivos BluetoothLE en RAD Studio C++

    Jo, un experto en IT especializado en C++, Windows, Delphi y Bluetooth de baja energía (BLE), ha desarrollado un sensor Open-IoT con hardware BLE. El sensor funciona perfectamente y puede ser accedido fácilmente a través de la API de Web-Bluetooth en Windows y Android sin necesidad de emparejamiento. Sin embargo, Jo se encontró con un problema al intentar conectarse al mismo sensor usando RAD Studio C++ en Windows 11. Parece que solo se aceptan dispositivos emparejados, y los dispositivos sin emparejar provocan una excepción durante la llamada a la función DiscoverServices(), lo cual no tiene ningún sentido, especialmente para dispositivos BLE. Jo encontró una opción en la Configuración de Windows que se puede utilizar para permitir que aplicaciones especiales como MS LE Explorer acepten dispositivos sin emparejar. Jo también descubrió que hay una opción llamada ‘Emparejado’ para la entrada TBluetoothLEDevice*, lo cual puede indicar si un dispositivo está emparejado o no. Jo está buscando una solución automática para este problema.

    Para resolver este problema, Jo puede intentar los siguientes pasos:

    1. En la Configuración de Windows, permitir que aplicaciones especiales como MS LE Explorer acepten dispositivos sin emparejar.
    2. Verificar si el dispositivo BLE está emparejado o no buscando la opción ‘Emparejado’ para la entrada TBluetoothLEDevice*. Si el dispositivo no está emparejado, emparejarlo primero y luego intentar descubrir los servicios.
    3. Si el dispositivo está emparejado y el problema persiste, intentar depurar el código y encontrar la causa raíz de la excepción.
    4. Si no se puede resolver el problema, Jo puede buscar ayuda en la comunidad de RAD Studio o contactar al equipo de soporte de RAD Studio para obtener asistencia adicional.

Comments are closed.