Llevaba bastante tiempo queriendo hacer un proyectillo con la Raspberry PI PICO. Con la llegada del verano he podido sacar algo de tiempo, y quería compartirlo con vosotros por si a alguien le interesa el tema.
Para los que no la conozcais, la PICO es una tarjeta microcontroladora similar a las Arduino. Viene con un conversor analógico-digital de 12 bits, puede emular dispositivos HID, se programa en Micro Python o Circuit Python (o C) y cuesta 6 o 7 euros.

Antes que nada, quería aclarar que no pretendo replicar ningún sistema real, sólo hacer algo útil y que no ocupe demasiado espacio por poco dinero.
OBJETIVO
Los que volais el F18 sabréis que puede visualizar un montón de páginas de datos distintas en los MFD. Algunas practicamente no se usan, otras se usan solo durante el arranque, pero hay un grupo de 5 o 6 que se usan constantemente en vuelo.
Personalmente, me resulta un engorro tener que soltar los mandos, coger el ratón y ponerme a pulsar botones en el MFD sin ver por dónde va el avión. Además, esas páginas tienen funciones (waypoint anterior / siguiente, distancia de radar, etc) que también me obligan a apartar la vista del cielo y coger el ratón.
Así que voy a intentar hacer un dispositivo que me permita seleccionar y configurar las páginas que uso en vuelo con un par de pulsaciones rápidas.
HARDWARE
En primer lugar, necesitaba que la PICO fuera capaz de emular dispositivos HID, concretamente un teclado. Micro Python no tiene soporte para HID, lo que me ha obligado a pasar todo el proyecto a Circuit Python, que me gusta mucho menos.
Mi primera idea fue usar una pantalla OLED de 2". La conexión es muy sencilla y se veía bonita, pero desgraciadamente no se puede elegir o escalar el tamaño de la fuente, y al final el texto era practicamente ilegible. Además, los botones que trae la pantalla eran bastante incómodos.

Hay alternativas para solucionar este problema, pero no eran muy inmediatas y no quería atascarme con la pantalla. Así que al final decidí usar una pantalla LCD de las de toda la vida, y un joystick analógico que tenía por aquí.

Parecía fácil... pero no lo ha sido. Circuit Python no tenía driver para esta pantalla, así que he tenido que coger el driver del fabricante en Micro Python y portarlo a Circuit Python. El joystick no me ha dado ningún problema.
El cableado es muy sencillo, aunque tuve que añadir un par de resistencias de 10 ks a la conexión I2C porque Circuit Python deshabilita las resistencias de la PICO. En fin, si a alguien le interesa puedo compartir los esquemas.

SOFTWARE
Llegamos a la parte más divertida, al menos para mi. Para implementar la funcionalidad del dispositivo he usado un autómata de estado finito. Este método me gusta mucho porque crea programas muy robustos, pequeños, y rápidos. Así que es ideal para una tarjeta microcontroladora.
Este es la pantalla principal.

En la linea superior visualizo las opciones que se pueden seleccionar con el joystick. En este caso, podemos seleccionar el MFD izquierdo o el derecho. En la linea inferior muestro el estado del MFD en el avión, en este caso las dos pantallas estan en modo EW y HUD
Seleccionando el MFD de la derecha (por ejemplo) podremos seleccionar las páginas RADAR, HUD y FLIR.

Con otra pulsación del joystick arriba selecciono la página HUD. El programa envía una secuencia de pulsaciones de teclas al simulador para cambiar a esa página, y vuelve a la pantalla principal.

Me quedan cosas por hacer, pero de momento la primera prueba de concepto funciona y es útil. Ahora a probarlo y ver en qué se puede mejorar.