# IOIO

IOIO (pronunciado yo-yo ) es una serie de placas basadas en microcontroladores PIC de código abierto que permiten que las aplicaciones móviles de Android interactúen con dispositivos electrónicos externos. El dispositivo fue inventado por Ytai Ben-Tsvi en 2011 y fue fabricado por primera vez por SparkFun Electronics. El nombre "IOIO" está inspirado en la función del dispositivo, que permite a las aplicaciones recibir una entrada externa ("I") y producir una salida externa ("O").

## Características

La placa IOIO contiene una única MCU PIC que actúa como host USB / esclavo USB y se comunica con una aplicación de Android que se ejecuta en un dispositivo Android conectado. La placa proporciona conectividad a través de USB, USB-OTG o Bluetooth, y se puede controlar desde una aplicación de Android usando la API de Java.
Además de la entrada / salida digital básica y la entrada analógica, la biblioteca IOIO también maneja PWM, I2C, SPI, UART, captura de entrada, detección capacitiva y control de motor avanzado. Para conectarse a dispositivos Android más antiguos que usan USB 2.0 en modo esclavo, los modelos más nuevos de IOIO usan USB On-The-Go para actuar como host para dichos dispositivos. Algunos modelos también son compatibles con el Google Open Accessory USB protocol.
La API de control de motores IOIO puede manejar hasta 9 motores y cualquier número de actuadores binarios en sincronización y precisión de ciclo. Los desarrolladores pueden enviar una secuencia de comandos de alto nivel al IOIO, que realiza la generación de formas de onda de bajo nivel en el chip. El firmware IOIO admite 3 tipos diferentes de motores; Motores paso a paso, motores DC y servomotores .
El Dispositivo de firmware puede ser actualizado en el sitio por el usuario. Para la primera generación de dispositivos de la actualización se lleva a cabo utilizando un dispositivo Android y la IOIO Manager application de aplicaciones disponibles en Google Play. La segunda generación de IOIO-OTG debe ser actualizado utilizando un equipo de escritorio que ejecute el IOIODude aplicación.
IOIO es compatible con computadoras y dispositivos Android como hosts de primera clase, y proporciona la API exacta en ambos tipos de dispositivos. Los dispositivos de primera generación solo pueden comunicarse con PC a través de Bluetooth, mientras que los dispositivos IOIO-OTG pueden usar Bluetooth o USB. Las aplicaciones de PC pueden usar API para Java o C # para comunicarse con la placa; Java es la API oficial.

## Aplicaciones

El hardware y software de IOIO es completamente de código abierto, y ha permitido la creación de cientos de proyectos robóticos en todo el mundo.
El dispositivo ha sido presentado en varios kits de aprendizaje, cuyo objetivo es ayudar a los estudiantes a escribir aplicaciones de Android que puedan interactuar con el mundo externo.
El Qualcomm Snapdragon Micro Rover es un robot impreso en 3D que aprovecha un teléfono inteligente Android y el IOIO para controlar los motores y sensores del robot. Un equipo liderado por el inventor israelí Dr.Guy Hoffman creó un robot emocionalmente sensible, que se apoya en el IOIO para controlar el hardware de dicho robot.

## Opiniones

El IOIO se ha descrito de diversas maneras como un "paraíso geek", "una forma fácil de obtener I / O de la conexión USB de un dispositivo Android" y "una tarjeta de ruptura de I / O USB para teléfonos inteligentes Android que convierte su teléfono en un super-Arduino ". Apareció como un "regalo para geeks" recomendado en un artículo de la Scientific Computing.

## Detalles técnicos
### IOIO V1

Las tarjetas IOIO de primera generación (más conocidas como IOIO V1 ) contienen las siguientes funciones integradas: Esta generación solo admite el modo USB Slave, y requiere un USB maestro como host (PC o teléfonos Android más recientes).
El IOIO V1 es un 3.3 Dispositivo de nivel lógico V, y cuenta con un 5 V DC / DC regulador de conmutación y un regulador lineal de 3.3V. Los 5 El regulador V soporta un 5–15 Rango de entrada V y hasta 1,5 Una carga. Esto facilita la carga de un dispositivo Android conectado, así como la conducción de varios motores pequeños o cargas similares.
| Característica | Detalles | Descripción |
| Conector USB | tipo A, hembra | Se utiliza para conectarse al dispositivo Android. |
| Pines GND | 9 pines | Conexión a tierra. |
| Pines VIN | 3 pines | Se utiliza para la alimentación de la placa. Voltaje entre 5-15 V debe ser suministrado. |
| 5 Alfileres en V | 3 pines | Normalmente se utiliza como 5 Salida de V a la electrónica del usuario, cuando la placa se alimenta desde VIN. Puede usarse como entrada de 5V en caso de que VIN no esté conectado. |
| 3.3 Alfileres en V | 3 pines | 3.3 Salida V a la electrónica del usuario. |
| Pines de E / S | 48 pines | Pines de E / S de propósito general. Algunos tienen funciones especiales, como ADC, captura de entrada, UART, PWM, comparador o para programar el PIC MCU ( ICSP ). |
| LED de encendido | | Se enciende cuando el IOIO está recibiendo energía. |
| Stat LED | | Se enciende brevemente durante el encendido y luego queda bajo el control de la aplicación. |
| Pin MCLR | | Normalmente no se utiliza. Su propósito es programar el nuevo firmware del cargador de arranque en la placa IOIO. |
| Recortador de corriente de carga (CHG) | | Ajusta la cantidad de corriente de carga suministrada en la línea VBUS del USB al dispositivo Android. Girar en la dirección (+) aumenta la corriente de carga. |

### IOIO OTG

Las tarjetas IOIO de segunda generación (conocidas como IOIO-OTG ) contienen las siguientes características integradas: Como su nombre indica, una característica clave de esta generación es la introducción de USB-OTG, que admite Modo maestro o esclavo USB. Esto permite que IOIO se conecte a teléfonos Android más antiguos que solo admiten el modo esclavo USB, además.
El IOIO-OTG es un 3.3 Dispositivo de nivel lógico V, con algunos de los pines siendo 5 V tolerante. Cuenta con un 5. V DC / DC regulador de conmutación y un 3.3 V regulador lineal . Los 5 El regulador V soporta un 5–15 Rango de entrada V y hasta 3 Una carga. Esto facilita la carga de un dispositivo Android conectado, así como la conducción de varios motores pequeños o cargas similares.
| Característica | Detalles | Descripción |
| Conector USB | micro-AB, hembra | Se utiliza para conectarse a una computadora host, un dispositivo Android o un dongle Bluetooth. |
| Conector de alimentación | 2 pines JST, hembra | Se utiliza para la alimentación de la placa. Voltaje entre 5-15 V debe ser suministrado. |
| Pines GND | 10 pines | Conexión a tierra. |
| Pines VIN | 3 pines | Se utiliza para enviar la tensión de alimentación a su circuito, o como una entrada alternativa al conector de alimentación. |
| Pines 5V | 3 pines | Salida de 5 V desde el regulador a bordo, que puede usarse en su circuito. |
| 3.3 Alfileres en V | 3 pines | 3.3 V del regulador a bordo, que se puede utilizar en su circuito. |
| Pines de E / S | 46 pines | Pines de E / S de propósito general. Algunos tienen funciones especiales, como ADC, captura de entrada, UART, PWM, comparador o para programar el PIC MCU ( ICSP ). |
| LED PWR | rojo | Se enciende cuando el IOIO está recibiendo energía. |
| LED de estado | amarillo | LED de uso general a bordo, bajo control de la aplicación. |
| Pin MCLR | | Normalmente no se utiliza. Su propósito es programar el nuevo firmware del cargador de arranque en la placa IOIO. |
| Pin de arranque | | Pin especial utilizado para poner el IOIO en el modo de cargador de arranque en el encendido. Tenga en cuenta que este pin se comparte con el LED de estado. |
| Recortador de corriente de carga (CHG) | | Ajusta la cantidad de corriente suministrada en la línea VBUS del USB cuando actúa como un host USB. Normalmente se usa en una aplicación de batería con Android para evitar que Android agote la batería rápidamente. Girar en la dirección (+) aumenta la corriente de carga. |
| Interruptor de host | | En el modo "A", el IOIO-OTG detectará si debe actuar como host o como dispositivo automáticamente, según el conector USB que esté conectado (micro-A o micro-B). Para admitir cables USB o adaptadores no estándar que utilizan el tipo micro-B, mueva el interruptor a la posición "H" para forzar el modo host. |