Implementando un dispositivo Bluetooth HID

4

Construí un detector de velocidad (de una rueda giratoria) basado en PIC32. Por ahora, estoy enviando la velocidad a la PC a través de UART, pero me gustaría enviarla a través de Bluetooth como un dispositivo HID porque me gustaría usar los controladores del sistema operativo.

He estado buscando en Google durante bastante tiempo y he aprendido algunas cosas sobre Bluetooth y HID. Así que probablemente compraré RN42 de Microchip, que anteriormente soporta perfil HID. Sin embargo, aún necesito un consejo, sé que se puede hacer ( example ), pero no sé cómo hacerlo.
Por ejemplo, ¿cómo crearía mi propio descriptor para enviar al host? ¿O uso uno existente? Se debe enviar un descriptor al conectar el dispositivo HID al host, ¿no?

También leí algo sobre el modo raw. ¿Es HID en modo raw lo que estoy buscando?

    
pregunta Luka

2 respuestas

5

Si la memoria me funciona bien, el RN42 solo le permite usar sus descriptores HID definidos. Esto le obligaría a usar el teclado, el mouse, el joystick, etc. El ejemplo al que se vinculó usa el Bluegiga WT12. El WT12 en realidad le permite definir su propio descriptor HID. Podría hacer un informe específico del proveedor y definir cómo el sistema operativo interpreta los datos que se envían desde su dispositivo. Tenga en cuenta que usar algo como el desplazamiento del perfil del mouse hará que el sistema operativo se desplace a donde sea que esté enfocado en el momento en que se envían los datos.

Debería poder encontrar otros ejemplos del WT12 en línea. Puede que no sean para PIC, pero deberían darle una idea general de cómo usarlos. El WT12 utilizando el protocolo iWRAP de Bluegiga.

También puedes hacer HID sobre GATT, que es para Bluetooth Low Energy. Algo así como el módulo BT121 podría hacer eso. Bluegiga tiene un ejemplo HID para BGScript, que es como programar en Basic, o tiene la opción de hacerlo por comunicaciones en serie.

    
respondido por el Jeremiah
1

Revise el Roving Networks HID Users Manual . Hay varios perfiles existentes, como el ratón, el teclado o la palanca de mando. El mejor perfil H uman I nterface D depende de su caso de solicitud. Si desea asignar los valores de sus sensores a un comportamiento de desplazamiento, una buena decisión sería un perfil del mouse con una variable de desplazamiento del mouse. Tenga en cuenta que estos valores son relativos. Un perfil de joystick, por ejemplo, proporciona valores absolutos en el eje. Si implementa su propio perfil HID, debe ir más en detalle y es un poco más complejo.

El siguiente ejemplo le da un punto de partida para un perfil de joystick simple con un Arduino:

// Command Mode
// --------------
bluetooth.begin(9600);
delay(50); 
bluetooth.print("$$$");
delay(50); 
bluetooth.print("SN,HIDJoystick\r\n");
delay(50); 
bluetooth.print(" SU,57\r\n");
delay(50); 
bluetooth.print("S~,6\r\n");
delay(600); 
bluetooth.print("SH,0240\r\n");
delay(200); 
bluetooth.print("R,1\r\n");  
delay(400);

// HID Joystick Report
// --------------
bluetooth.write((byte)0xFD); //Start HID Report
bluetooth.write((byte)0x6);  //Length byte

// 1. X/Y-Axis
bluetooth.write(45);  //First X coordinate
bluetooth.write(-33); //First Y coordinate

// 2. X/Y-Axis
bluetooth.write(45);  //Second X coordinate
bluetooth.write(-33); //Second Y coordinate

// Buttons
bluetooth.write(B10000001); // Second Byte (Buttons 1-8)
bluetooth.write(B10000000); // Second Byte (Buttons 9-16)
    
respondido por el user3704293

Lea otras preguntas en las etiquetas