20 Februari 2013

Meet IOIO - I/O for Android

I'm very excited to announce the launch of a new product I've been working on for the past months!IOIO (pronounced: yo-yo) is a product which lets you connect electronic circuits to an Android device and control them from an Android application.It is comprised of a small (2.7x1.2" = 7x3cm) PCB that connects to an Android device with a USB cable and a software library (Java .jar file) that you use in your Android app which handles all communications with the board.No firmware programming is required - only Android application authoring with a very simple API (see examples below) for controlling the pins on the board. No modification of the Android device is required - you avoid the complication of modification and the voiding of warranty.IOIO is available for purchase online from SparkFun on this page.The first few boards will ship within a couple of weeks. Around that time, the entire software and hardware are going to be 100% open-source with a permissive license. 48 total I/O pins - all of which can function as digital inputs and outputs.Up to 16 analog inputs (10-bit).Up to 9 PWM outputs.Up to 4 UART channels.Up to 3 SPI channels.Up to 3 TWI (I²C-compatible) channels.On-board switch-mode regulator providing up to 1.5A of 5V supply. Can charge the Android device as well as power a couple of small motors.Bootloader on the board pulls firmware off phone, enabling OTA firmware upgrades and application-specific firmware.Pulse-width measurement, capacitance sensing and more (will be pushed with first OTA firmware upgrade).Just to give you a hint of how simple it would be to write apps using IOIO, here is a small snippet from an app, which controls a single servo motor (on pin 12) and reads a single potentiometer (on pin 40). Exception handling and proper closing have been omitted for clarity.ioio.waitForConnect();AnalogInput input = ioio.openAnalogInput(40);PwmOutput pwmOutput = ioio.openPwmOutput(12, 100); // 100Hzwhile (true) { float reading = input.read(); pwmOutput.setPulseWidth(1000 + Math.round(1000 * reading)); sleep(10);}The Retroid is a retro-designed alarm clock hacked to be controlled by an Android phone.Once connected, the phone's alarm, incoming call and incoming text message notifications appear as different ring and LED patterns on the clock.Thanks to the amazing The Gifts Project folks for hacking this wonderful project over one weekend!

The Visual Charger is another take on a cool docking station for your phone. It charges your phone while presenting charge level percentage (0-9 or "F" for full) on a large 7-segment LED display. It also uses the dot on the display to signal for pending notifications (e.g. missed calls, unread text messages, etc.).This project has been done by Misha Seltzer who is also taking a crucial part in IOIO development.

The Wall Printer is inspired by old-school pin printers. It has 7 markers in a row, each individually controlled by a servo such that it can go up (not paint) or down (paint). When you manually slide it over a wall, the servo motions are carefully timed to produce text messages. These can include manually entered text, SMS messages, GPS coordinates and more.The project is not yet complete, and the video above just demonstrates a simple pattern from an early experiment. I'll post an update once there is progress.This project has been done by my wonderful friend Liat Segal. Android phones are powerful mobile computers having internet connectivity and a rich variety of built-in sensors (camera, GPS, IMU, touch screen). They are also very easy to write applications for, thanks to the great work done by the Android SDK developers. For many applications, all they are really missing is connectivity to external peripherals. This is exactly where IOIO fits in: it enriches the inherent capabilities of the Android device with the ability to communicate with external circuits.From a study of existing solutions, they all suffered from one or more of the below:High cost.Complicated. Especially so for complete beginners.High latency.Low bandwidth.Required replacement of the Android device OS.Large physical size.IOIO does not suffer from any of the above. Its cost (~$50 from SparkFun) is competitive with existing solutions, dead-simple to use, ~3ms one-way latency, ~300KB/sec throughput, works with stock OS, small in size.I would like to thank Google for supporting this project with people's 20%-time. This project would never have come to life without their help.Mostly I would like to thank Ryan Hickman, Arshan Poursohi and Misha Seltzer.All the rest of the guys from Google that contributed to this project with coding, organization of the hackathon event, and providing critical feedback early in the process. You all know who you are :)Aaron Weiss from SparkFun helped a lot with the hardware and taught me how PCB design is done in the real world.My dear friends who took on the task of being the first adopters and built fantastic first IOIO projects.And last but not least, my beloved wife and kids who were patient and supportive of their tired dad.