Ir al contenido

Wii Remote

Status: hardware-validated vía el forwarder TCP.

El Wii Remote no se lee por el Bluetooth de la PC. Una pequeña app homebrew corre en la Wii / Wii U, lee hasta cuatro Wiimotes y reenvía su IMU sobre un socket TCP plano. Por lo tanto, el lado de la PC es solo un socket listener sin código de Bluetooth.

  • El bridge enlaza un TCP listener en 127.0.0.1:9909 (configurable).
  • La consola se conecta como cliente (keep-alive, no-delay).
  • Cada frame la consola envía N × 17 bytes (un registro por slot de Wiimote 0-3) como una sola escritura binaria - sin framing HTTP.
  • El bridge responde con 5 bytes: 4 flags de rumble por slot + 1 byte de intervalo de frame (ms). Corta la conexión si una lectura no es múltiplo de 17 bytes, lo que provoca una reconexión.

Registro por control (17 bytes, little-endian)

Sección titulada «Registro por control (17 bytes, little-endian)»
Offset Tamaño Campo
0 1 Slot id (0-3); 0xFF = slot vacío (el registro se envía igual, relleno de ceros)
1 2 Accel core X (i16 LE)
3 2 Accel core Y
5 2 Accel core Z
7 2 data X - gyro MotionPlus o accel de Nunchuk
9 2 data Y
11 2 data Z
13 1 Nunchuk conectado (0/1)
14 1 MotionPlus soportado (0/1)
15 1 Nivel de batería (0-100)
16 1 Flag de botón (1/2 presionado → gesto de reset)

El triplete data tiene doble propósito: gyro MotionPlus cuando no hay Nunchuk conectado, si no el acelerómetro del Nunchuk (el Wiimote no puede transmitir ambas extensiones a la vez de forma limpia).

  • Acelerómetro core: cero en raw 512, ~200 LSB/g → a = (raw − 512) / 200 × 9.80665 m/s². Verifica que ‖a‖ ≈ 9.81 en reposo.
  • Gyro MotionPlus: centrado cerca de 8192; resta y aplica ~0.07 dps/LSB → rad/s. El signo y el eje están pendientes de validación en hardware.
  • Accel de Nunchuk (cuando está conectado): mismo mapeo 512/200.

Un Wii Remote pelado es solo acelerómetro - sin gyro, la fusión recurre a orientación basada solo en gravedad y el yaw deriva sin restricción. El Wiimote Plus o un accesorio MotionPlus expone un gyro de 3 ejes. El companion habilita la extensión, espera a que se estabilice, reenvía sus valores crudos y arbitra contra el Nunchuk (gyro por defecto; accel de Nunchuk si hay un Nunchuk conectado).

El flag de botón (byte 16) impulsa el recentrado cuando se presiona 1 o 2.