IOIO

IOIO (pronounced "yo-yo") is a series of open source PIC microcontroller-based boards that allow Android mobile applications to interact with external electronics. The device was invented by Ytai Ben-Tsvi in 2011, and was first manufactured by SparkFun Electronics. The name "IOIO" is inspired by the function of the device, which enables applications to receive external input ("I") and produce external output ("O").
Features.
The IOIO board contains a single PIC MCU that acts as a USB host/USB slave and communicates with an Android app running on a connected Android device. The board provides connectivity via USB, USB-OTG or Bluetooth, and is controllable from within an Android application using the Java API.
In addition to basic digital input/output and analog input, the IOIO library also handles PWM, I2C, SPI, UART, Input capture, Capacitive sensing and advanced motor control. To connect to older Android devices that use USB 2.0 in slave mode, newer IOIO models use USB On-The-Go to act as a host for such devices. Some models also support the Google Open Accessory USB protocol.
The IOIO motor control API can drive up to 9 motors and any number of binary actuators in synchronization and cycle-accurate precision. Developers may send a sequence of high-level commands to the IOIO, which performs the low-level waveform generation on-chip. The IOIO firmware supports 3 different kinds of motors; stepper motors, DC motors and servo motors.
Device firmware may be updated on-site by the user. For first-generation devices updating is performed using an Android device and the "IOIO Manager" application available on Google Play. Second-generation IOIO-OTG devices must be updated using a desktop computer running the "IOIODude" application.
The IOIO supports both computers and Android devices as first-class hosts, and provides the exact API on both types of devices. First-generation devices can only communicate with PCs over Bluetooth, while IOIO-OTG devices can use either Bluetooth or USB. PC applications may use APIs for Java or C# to communicate with the board; Java being the official API.
Applications.
The IOIO hardware and software is entirely open source, and enabled the creation of hundreds of DIY robotic projects around the world.
The board has been featured in various learning kits, which aim to help students write Android applications that can interact with the external world.
The Qualcomm Snapdragon Micro Rover is a 3D printed robot that leverages an Android smartphone and the IOIO to control the robot's motors and sensors. A team led by Israeli inventor Dr. Guy Hoffman created an emotionally-sensitive robot, that relies on the IOIO to control the robot's hardware.
Reviews.
The IOIO has been variously described as a "geek's paradise", "an easy way to get I/O from an Android device’s USB connection" and "a USB I/O breakout board for Android smartphones which turns your handset into a super-Arduino of sorts". It featured as a recommended "gift for geeks" in a Scientific Computing article.
According to SlashGear, an online electronics magazine:
According to SparkFun, the first manufacturer of the device:
According to Ytai Ben-Tsvi, the inventor of the device:
Technical details.
IOIO V1.
The first-generation IOIO boards (known as "IOIO V1") contain the following on-board features: This generation only supports USB slave mode, and requires a USB master as the host (PC or newer Android phones).
The IOIO V1 is a 3.3 V logic level device, and features a 5 V DC/DC switching regulator and a 3.3V linear regulator. The 5 V regulator supports a 5–15 V input range and up to 1.5 A load. This facilitates charging a connected Android device as well as driving several small motors or similar loads.
IOIO OTG.
The second-generation IOIO boards (known as "IOIO-OTG") contain the following on-board features: As the name suggests, a key feature of this generation is the introduction of USB-OTG, supporting USB master or slave mode. This enables the IOIO to connect to older Android phones that only support USB slave mode, in addition.
The IOIO-OTG is a 3.3 V logic level device, with some of the pins being 5 V tolerant. It features a 5 V DC/DC switching regulator and a 3.3 V linear regulator. The 5 V regulator supports a 5–15 V input range and up to 3 A load. This facilitates charging a connected Android device as well as driving several small motors or similar loads.