🛠 Limites d'AOA sur Android moderne et alternatives

Arduino Mega ADK (Rev3) · avance · Schéma : IMG-mega-adk-avance-3-mega-adk-limites-aoa-modernes.svg — Mega ADK classée retired et alternatives modernes : ESP32 en USB natif, module Bluetooth, adaptateur série USB-OTG vers Android

Objetivos

Hacer un repaso honesto de lo que funciona (o no) en 2026 con la Mega ADK y el protocolo AOA, y elegir la alternativa adecuada según el proyecto. Observaciones con fuentes: la placa está retirada (página oficial en docs.arduino.cc/retired, tienda con error 404); la documentación de Google ADK se ha retirado y redirige a la página genérica de «accesorios»; la wiki histórica de la ADK es un error 404 sin archivo; AOAv2 ha deprecado el audio USB en Android 8.0; AOA y MTP no pueden funcionar simultáneamente; las aplicaciones de accesorios deben gestionar correctamente el permiso USB y el evento device-detached, y algunos teléfonos muy recientes tienen drivers USB caprichosos (hilos de foros sobre placas ADK que se enumeran pero no se abren). El propio protocolo AOA sigue documentado (source.android.com) y el modo accesorio está disponible desde Android 3.1, retroportado a 2.3.4: por el lado de la API de Android, no ha desaparecido nada.

Material

Código completo

Plantilla Java para la gestión robusta de un accesorio AOA en Android moderno (permiso, desconexión, reconexión):

// AccessoireBridge.java — le minimum vital sur Android récent
public class AccessoireBridge {
    private UsbManager mgr; private UsbAccessory acc;
    private FileInputStream in; private FileOutputStream out;

    public boolean attacher(Intent intent) {
        String a = intent.getAction;
        if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(a)) {
            acc = UsbManager.getAccessory(intent);
            if (!mgr.hasPermission(acc)) {
                mgr.requestPermission(acc, PendingIntent.getBroadcast(ctx, 0,
                    new Intent("com.atelier.adk.PERM"), 0));
                return false;              // reprise après la popup
            }
            ParcelFileDescriptor pfd = acc.open(mgr, true);
            if (pfd == null) return false; // le téléphone refuse parfois
            in  = new FileInputStream(pfd.getFileDescriptor);
            out = new FileOutputStream(pfd.getFileDescriptor);
            return true;
        }
        if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(a)) { detacher; }
        return false;
    }
    public void detacher {
        try { if (in != null)  in.close;  } catch (IOException ignored) { }
        try { if (out != null) out.close; } catch (IOException ignored) { }
        in = null; out = null; acc = null;  // l'UI passe « hors ligne »
    }
    // Côté manifeste : intent-filter ACCESSORY_ATTACHED + accessory_filter
    // (accessory-manufacturer) ; ne JAMAIS envoyer de trame sans out != null.
}

Verificación esperada

Con la Mega ADK: el teléfono se enumera correctamente con VID 0x18D1, pero la apertura del flujo puede fallar en algunos modelos recientes — la plantilla anterior debe entonces mostrar «fuera de línea» sin bloquearse, y reconectarse al volver a enchufar. Si el teléfono cambia a MTP (modo de transferencia de archivos por defecto en muchos fabricantes), AOA no se inicia: hay que volver a enchufar en modo solo carga. Conclusión de la matriz: para un proyecto nuevo, AOA en esta placa retirada ya no es una opción por defecto; mantenla para el host HID y la preservación patrimonial, y pasa a las alternativas siguientes para el enlace con el teléfono.

Errores frecuentes

  1. Creer que AOA está «muerto en el lado de Android»: la API UsbAccessory sigue funcionando; lo que ha desaparecido es el ecosistema ADK (paquete de 2011, wiki, docs), y los drivers USB de los teléfonos son variables.
  2. Olvidar gestionar ACCESSORY_DETACHED y las IOException: en Android reciente, el sistema «desconecta eléctricamente» el cable (cambio a MTP, ahorro de energía) sin avisar a la aplicación.
  3. Usar el audio USB de AOAv2: deprecado desde Android 8.0 — no construyas un proyecto sobre esto.
  4. Cadena de versión ausente en el descriptor de accesorio: posible reinicio de teléfonos Android ≤ 10 durante la enumeración.
  5. Alternativas mal elegidas: el adaptador USB-OTG serie (FTDI/CP210x) asume que el teléfono es el host — lo contrario del modelo AOA — y exige el driver USB-serial-android; el ESP32-S2/S3 ofrece USB nativo Y Bluetooth/BLE, y el Bluetooth serie o BLE es casi siempre más simple que AOA en 2026; el BLE es la vía sin cable ni permiso USB.
  6. Comparar velocidades: AOA 1.0 sigue siendo un enlace USB a velocidad completa (el MAX3421E es un controlador de velocidad completa; > SIN VERIFICAR: 12 Mbit/s exactos, hoja de datos no recuperada) — ampliamente suficiente para sensores y comandos; si tu proyecto exige flujo de vídeo o audio, cambia de familia de hardware.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales