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.
Main features:
- 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).
Example Code
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); // 100Hz while (true) { float reading = input.read(); pwmOutput.setPulseWidth(1000 + Math.round(1000 * reading)); sleep(10); }
Example Projects
The Retroid
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.
The Visual Charger
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.
Wall Printer
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.
Why?
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.
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.
Credits
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.
With limited knowledge we are very impressed by the group's working together and their results. We are looking forward to it's future---RIGHT ON GUYS!!! Gerald & Elaine
ReplyDeleteGreat project, congratulations!
ReplyDeleteI can see million Arduino projects ported to java.
Nice work! Does it by any chance use the ADB implementation from the MicroBridge project? It's at code.google.com/p/microbridge
ReplyDelete@inopia No, I did my own implementation as this was about 8 months ago, and I believe MicroBridge had not been published at the time.
ReplyDeleteSince then, we've done tons of stuff above this layer in order to really provide good, high level experience, OTA upgrades, etc. That is the reason for the delay in publication.
@Ytai: I'm looking forward to reading your code. Congratulations on the project, it looks really nice and polished!
ReplyDeletegreat stuff! will the PIC firmware be open source?
ReplyDeleteDoes my android device have to support USB host mode?
ReplyDeleteEverything will be open sources within a couple of weeks.
ReplyDeletePhone does not need to be USB host, IOIO is a USB host.
If/when USB OTG becomes official widely available on Android, it should be very easy to change the hardware and lowest software layer so the IOIO can act as host, possibly powered by the Android.
(I'm the person who asked about USB host)
ReplyDelete<3 you guys, thank you very much. Back-ordered one from SparkFun! Going to integrate with an in-dash android tablet in my car to replace HVAC controls, navigation, music, lighting, and some engine diagnostics!
This comment has been removed by a blog administrator.
Deletehi guys i started out to do the exact same thing but had no idea how i could achieve it.. you two guys seem to be quite more experienced than me. let me know if you have achieved something.
DeleteSuper-cool!
ReplyDeleteA word of warning: we haven't yet tested with any tablets. In theory it should be no different, but as an engineer, I tend not to believe in theories :)
If you do, however, get it working, let me know - would be great. Would also love to see the end result.
Note that you'll be able to power the IOIO directly from the car's 12V, so it can be a permanent installation.
Very very cool! Thanks for sharing.
ReplyDeleteCan't wait to buy one. Already have some projects in mind!
That is really nice. All sorts of interesting potential applications.
ReplyDeleteFinbarr
This is awesome, going to order some now!
ReplyDeleteIs there a plan for a follow-on product that connects over Bluetooth? I think this would widen the possibilities significantly as there are more limited applications where the user actually wants to fiddle with cables...
ReplyDelete@Yeroc
ReplyDeleteAndroid + Arduino via Bluetooth is a solved problem.
Where IOIO differentiates is lower cost, higher bandwidth, lower latency.
Having said that, implementing the IOIO wire protocol on a board that speaks BT with the Android device, thus keeping the Android-side software compatible sounds like a good idea.
Very interesting project. Is there any way to power the target board from the phone?
ReplyDelete@Anonymous
ReplyDeleteNope.
The stock OS can only function as USB device and thus pulls current from the USB VBUS line.
IOIO has been designed with that constraint in mind, so it can only function as USB host.
In the future, if/when Android supports USB OTG (host/device), it would make sense to make a slight modification to the board to enable it to act as either host or device according to the user's choice.
Fantastic, I really like what you have done. Also a great blog, good information with lots of detail.
ReplyDelete- Otto Belden
{droooool}
ReplyDeletehohoho ! Nice Project! I Love Androdi!
ReplyDeleteGreat! I've been experimenting with android --bluetooth--> arduino as a Midi interface but the bluetooth latency was to high. With your board, this should be possible. Do you have any ambitions to develop a commercially available midi interface for android like midi mobilizer (http://de.line6.com/midimobilizer/) for iOs? This would enable many music apps to directly talk with music hardware.
ReplyDeleteA fantastic job indeed !
ReplyDeleteJust wondering, what could be the "killer application" for your great solution ?
In your opinion, what difficult (and day-by-day) problem it will be able to solve ?
Hi Ytai, I wanted to ask, can this board be used to control car components? For example, turn on/off an audio amplifier and read the tachometer output?
ReplyDeleteI'm interested in using an Android tablet as an in-car computer/navigator/audio-video system and it would be nice if things could be controlled from the touch screen.
I'm not very skilled at this, but the way I see it, the PWM output only needs to provide a few volts to a transistor that will work as the switch (for turning components on/off), and the analog input should be able to monitor the tachometer (and show the engine's RPM on the tablet's screen).
Can the IOIO do something like this?
Thank you!
Hey Nate....I am working on exactly the same application....have you completed it???
DeleteI have the plan. But was going to go the Arduino way as I played with it before. But android + IOIO seems to be a better form factor than arduino + miniPC.
DeleteMaybe we can join up in this effort. I am in no way an expert has never played with android sdk, but i di have a bit of understanding on programming and planing to take the plunge anyway. Email me if you are planning to have a 'party'
Bonus point: i am a videoguy by trade and motion graphic designer by nature. Might not be in context but, i build and fly a multirotor, so i am not so bad at soldering.
@Anonymous (one that talked about MIDI): I didn't know about midimobilizer until just now. Definitely seems doable, as MIDI is a UART-based protocol, and the IOIO offers up to 4 of these. So it seems like you'll only have to build the analog frontend (opto-isolator circuit). I wouldn't commit to doing something like that commercially, but will happily provide support to anyone who does.
ReplyDelete@Andy: mostly I was annoyed by the fact that in the Arduino-world, advanced sensors (GPS, camera, IMU, etc.) and internet connectivity are both expensive and complicated to use, while in the phone-world, these are all readily available, but you can't connect to anything else (actuators, additional sensors). Killer app? I don't know, but I'm sure there are quite a few out there that I just removed a road-block for... :)
@Nate: The IOIO can do everything you mentioned. However, I cannot answer about the car-side, since I have no idea how it works and what interfaces it exposes. You better research it a little and ask me again once you have detailed information on how the systems you're connecting to work.
Hey Ytai,
Deletei want to do the same like Nate, who asked you in 2011 about connecting ioio board to a car network.
After some research i know which protocol my car uses and how it works.
Is it possible to email you?
You can email me directly, or just raised the subject on ioio-users (there might be more people there to help).
DeleteCan an Android cell phone and IOIO be used for control and data acquisition at a remote location? That is install a low cost Android cell phone and IOIO at a remote location and then access the cell phone from a distant location. This could be useful in places that don't have internet connectivity.
ReplyDeleteHowaed
@hrh1818: Not sure what you mean by "access the cell phone from a distant location". Access how, if it doesn't have connectivity? Do you mean something like accumulate data at the remote location, then upload it as soon as it gets connectivity? What sort of data would that be?
ReplyDeleteBy access I mean send a text message to the remote cell phone and IOIO. The text message could be either a request for data or commands to output data. Hopefully the cell phone and IOIO could be configured so all that had to be sent to the cell phone was a trigger to acquire and transmit data. By data I mean the digitized readings from selected analog input channels and the state of selected digital input channels. The analog input may be the output of a temperature, pressure, rain gauge or similar environmental transducer. The digital input signals could come from relay contacts or limit switches. Depending upon the application all that may be required is to only collect data on demand. Other applications may require the cell phone to accumulate data and then say download the data once a day.
ReplyDeleteAs a minimum commands should be available for setting the state of selected digital output and the level of selected digital to analog converter channels.
Howard
This would be awesome if it could work with an Electronic brick or Grove system from Seeedstudio. Reading sensors values into an Android and submitting it through the data connection would be very cool.
ReplyDelete@Ytai Awesome project. I hope to get my hands on one sometime soon. I work with android stuff, in T.A, so if you'd like a local test monkey let me know :D
ReplyDelete@hrh1818 While technically possible, it is rather overkill. Simpler solutions exist with, say, just a cellular module which often even have python interpreters built in and a bunch of GPIOs. Either project is worthy for an avid DIYer though ;)
@Nate look into CAN-bus. It would probably be simpler to somehow stack the IOIO with another CAN-bus solution, kind of like #include, but for hardware :)
can we expect arduino's connectivity with the same protocol from which IOIO is connected to Android ?
ReplyDeleteYtai,
ReplyDeleteAny chance there will be another rev of this board that uses a micro w/ CAN?
ruZZ.ii said
ReplyDelete"@hrh1818 While technically possible, it is rather overkill. Simpler solutions exist with, say, just a cellular module which often even have python interpreters built in and a bunch of GPIOs. Either project is worthy for an avid DIYer though ;)"
I didn't know simpler solutions already existed. Where can I get more information on "cellular modules with a built in python interpreter and a bunch of GPIOs".
Otherwise it seems like from the Android side the best use of this technology would be to have a low cost cell phone or tablet have similar functionality as PC running a terminal emulation program. Then use a cell phone or tablet to control any of the small low cost computer modules like Arduino, mbed or netduiino. The object of this combination is portability.
Howard
What's the highest sample rate possible on the sensors? specifically, on the analog ones.
ReplyDeleteReally nice project, I certainly going to use this on projects where a microcontroller alone is not enough.
ReplyDeleteHello Ytai,
ReplyDeleteI love this project! Do you plan on making the code available for other chips? I see you used a PIC24. I was wondering if this code could be ported to a PIC32? Im thinking it shouldn't be too difficult...but i've been wrong so many times before. :) Awesome work. This blog post and IOIO has inspired me to begin developing for the Android device all over again.
Wow this is exactly what i was looking for!I was trying to find a combo of my favorite hobbys: Android programming and building a lasertag system. With this board it should be possible!Thanks for the effort!
ReplyDeleteKind Regards,
Martijn
What about turning Ioio into an arduino shield?
ReplyDeleteWhat about Scripting Languages for Android? Will this device work with SLA? Thanks.
ReplyDeleteDo you think it is possible to create a robot with that? I have a "dead" tablet, and i would like to make it usefull, do you think it's possible?
ReplyDeleteIt's GPIO on an Android. What better definition of "killer app" is there? Just ordered one for myself and recommended our research lab grab one, too. THANK YOU!
ReplyDeleteGreat work. I do agree that if you were thinking of a second act, a Bluetooth(BT) rather than USB version would be awesome too. I'm presently using Google's App Inventor with its built-in BT lib along with Sparkfun's BT-to-serial board to control my projects. Its incredibly easier to use App Inventor rather than the full blown Jave Dev sys. for small projects.
ReplyDeleteAny idea of what the latency is on the various outputs since it is better than BT? Looking forward to getting this.
ReplyDeleteA quick note to all the people whining about Bluetooth connectivity, note that the board has a USB connector on it. The standard bulk transfer protocol for talking to BT dongles is only slightly more involved than ADB, so you can always drop in a $2 dongle from DX and be done with it. Of course it'll mean you actually have to write some firmware yourself (gasp!), but USB programming really isn't rocket science.
ReplyDelete@ytai: this might actually be a fun feature for a 2.0 version.
I can see this leading to awesome innovation and loads of new gadgets for android , thanks for this
ReplyDeleteAdding WiFi to this would be a nice ad-don option if you plan to do extension boards in the future
This is great!!! How many parts are you getting made? Including the two I have on order :) Will volume be able to drive this down a lot if we come up with a 400 pc opportunity?
ReplyDeleteHi Ytai, great project, i was thinking about this for a long time and without me knowing someone was already working on it :).
ReplyDeleteDo you have an email address where we can talk more about the project?
@Ytai: Great! What are the chances i can get a peak at your code to readapt it to PIC32? Or if an early peak is too much to ask for, whats the eta for the release of the source? Thanks! So excited. :)
ReplyDeleteBeen lagging on the comments for a while...
ReplyDeleteThanks everyone for the interesting suggestions and discussion! Some answers below.
@hrh1818 I see what you're saying now. Definitey doable with IOIO I think.
@baseer It is theoretically possible, only that Arduino is lacking many of the features offered by IOIO (see above), so you'd get sort of a crippled IOIO for higher cost. What's the gain?
@n0f8r Currently analog pins are fixed to 1KHz. But the MCU supports up to 500KHz (total, for all pins). So it can be increased with some software changes. For now, I didn't want to risk saturating the USB link. But yeah, for audio applications or oscilloscope, etc. one would need a higher bandwidth. Definitely on the roadmap.
@Cid Actually, the first prototype was developed on a PIC32. The code that handles USB, ADB, etc. would port easily, while the code that handles the peripherals would probably need rewriting.
@Anonymous How about turning Arduino into a IOIO shield? :)
@scherbi The IOIO wire protocol is very simple and runs on top of a simple TCP socket. So one would definitely be able to implement it in Python with a high-level API within a couple of days' work. I'll publish the protocol spec along with the rest of the code.
@Loïc Possible? That's what I made it for! One of our first sample project was a self-balancing bot (like a Segway), which uses the phone's IMU. Worked like a charm! Don't have it on video unfortunately...
@DavidN Latency is in the order of 3ms one-way.
@inopia I absolutely LOVE your idea!!! Definitely something to put on the short term roadmap. The board can be made to work with either way transparently, and so does the Java-side library. I guess it would make a super-cheap BT solution that's also very versatile and can use wired USB connection where applicable.
@Steve You should talk to SparkFun about this. They're probably making as many as people are willing to buy :) AFAIK they have discounts for large quantities. If you don't mind my curiosity: what will you do with 400pcs? - sounds like fun!
>I'll publish the protocol spec ...
DeleteIs this available somewhere? I looked and could not find it
Thanks and keep up the good work
I haven't yet found the time to organize this document to a form readable by anyone but me.
DeleteHowever, you can figure it out from the code:
protocol_defs.h and IOIOProtocol.java.
When do we find out what the license is? Looking forward to seeing the code.
ReplyDelete-n6nz (too lazy to log in)
@n6nz You only had to ask :) FreeBSD.
ReplyDeleteGreat project!!
ReplyDeleteAs Steve pointed, Do you have any plans of adding wifi connectivity any time soon? There is a hundred applications I can think right now using that capability.
Again, awesome work!!!!
@Anonymous Following @inopia's brilliant observation about Bluetooth dongles, I think Wifi dongle can serve the same purpose. So it will only be a matter of adding several different drivers on the IOIO USB layer and allow it to automatically open a channel on top of whichever connectivity it detects. On the phone side, you'd be able to choose how to reach your IOIO.
ReplyDeleteYeah, definitely something to look into soon.
I once had to recompile Android's kernel to enable usb comms. ( http://code.google.com/p/android-serialport-api/ )
ReplyDeleteWhat's the difference? How is it done in IOIO?
Very interesting project, btw.
@chema: If I understand your solution correctly, you're not using USB at all, but rather taking advantage of the fact the HTC phones (ab)use the USB connector for UART when VBUS isn't detected.
ReplyDeleteIn IOIO, you never need to modify the kernel. Also, since it is a real USB connection, it'll work on *any* Android device and will offer a much higher bandwidth than you'd get with UART.
Another thing: establishing a serial connection side-to-side is only ground zero. You then need a protocol implemented on both sides, and perhaps as in the IOIO's case a bootloader, etc.
actually the board should work with any other hardware, not only on Androids... are there any developments in this direction?
ReplyDelete@ytai: WiFi dongles are a lot more complex than either ADB or Bluetooth, as there is no 'standard' USB protocol. The cheap dongles especially really only implement the lower layers and expect the host machine to take care of everything else.
ReplyDeleteAbsolutely AMAZING!
ReplyDeleteYour work opens new exciting possibilities! I'm writing a book on advanced android programming and I'd love to include a chapter on IoIo. Is there a way to collaborate on this?
excellent!
ReplyDelete@gerdavax: Sounds very cool.
ReplyDeleteMy Gee - mail account is ytaibt (hopefully every human understands this sentence and every non-human doesn't :) )
Feel free to contact me.
I have my own question...
ReplyDeleteIs it possible to make an xbee link between two ioio each connected to an indivudual android phone to control the wireless of a DIY android along with sending the data of another android app trough xbee so it could be shown in the other phone touchscreen??
If its possible that actually means that in long therm speakin you have destroyed the single board computer market such as the beagleboard cause of the cheapness of any future cellphone...
@Anonymous: not sure I'm following - why would you need an XBee for communicating between devices that have BT, Wifi, 3G, etc.?
ReplyDeletewho will be first to implement this to get Android phone to control SDR Radio :)
ReplyDelete@Ytai
ReplyDeleteWhat do you think the level of effort would be to have IOIO to consume a HID USB device and forward it on to whatever Android device you already have attached?
Are you using a pre-existing USB stack or did you write your own?
@ResidentHooligan
ReplyDeleteConnector-wise it'll be hard, since there's only one receptacle. You could probably use a hub and do what you proposed. That would require messing around with the USB stack slightly.
I'm using Microchip's stack, implemented the Android ADB driver myself.
@Ytai
ReplyDeleteWhen you say connector-wise, are you using hardware USB OTG support or is everything done in software?
This is actually for a commercial product, so we'd need to build out a new layout with just the two connectors. Would this be something you'd be interested in helping us with? If you're interested you can shoot me an email (gmail).
@ResidentHooligan
ReplyDeleteWhen I said connector-wise I meant that physically there's only one connector on the IOIO board, but now I understand that the board itself isn't what you're interested in.
The board has PIC24FJxxxDAxxx. I has hardware support for USB with DMA access. The software stack is based on the Microchip USB framework.
It sounds interesting, but I might be a little swamped in the near future...
My gmail is written above - better contact me directly if you want to get into technical details.
Is there any support for accessing a sqlite database on the phone from the sketch running on the ioio?
ReplyDeleteI'd love to see a couple wrapper functions for doing quick inserts and selects. Being able to log sensors directly into a relational schema is very useful!
@Kamilion
ReplyDeleteThere isn't really the concept of "sketch" on IOIO. The mainstream use-case is using the "stock" application firmware on the IOIO, which enables the Android app a high degree of control of the IOIO's I/O peripherals.
Having said that, since all the source will be released, development of custom application firmwares is certainly possible, and requires C coding skills and familiarity with the PIC24. Using the bootloader, one wouldn't even need a programmer for installing this custom application on the IOIO!
Back to your original question: if you write your own custom IOIO-side application, you can do with IOIO anything you can do with the adb command from your PC (open a TCP port, access files, install apps, execute shell commands etc.). Not sure about sqlite, but just research how it would be done from a PC. Also note that on non-rooted phones, the permissions of what can be done with adb are rather limited.
Hope this helps.
Ytai.
Is it possible to use a wireless dongle to make the ioio connect to the android via wi?
ReplyDelete@Anonymous See the discussion on the subject above. Short story: it is claimed that BT should be easy while WiFi may be more complicated.
ReplyDeleteEither way, it is not going to be supported right away, but definitely one of the top priorities for the next firmware upgrade.
@Ytai
ReplyDeleteOne of the projects I am looking into doing with the ioio board is essentially creating a car audio and navigation system that is powered by an android phone. At minimum, the things that I want the ioio board to do are 1) extend the graphic display of the android phone to a larger (tablet sized) touch screen, 2) take inputs from the larger touch screen, and 3) transfer audio signal to other hardware that can output it through the car's speakers. Do you think the ioio board has the hardware capabilities of doing these display and audio processes? Or do you think there is some other hardware it can be coupled with to perform this?
Thanks!
-Justin
@Justin
ReplyDeleteWhy not use a tablet? Do you need a special form factor to fit the car?
Why not output the audio from the audio jack? Which format do you need?
As far as IOIO is concerned, it seems like both video and audio will require high bandwidth, possibly higher than what IOIO is capable of (300KB/s).
Also, I remember hearing something about a screen capture utility based on ADB, perhaps you should look into it.
What protocols are we talking about for the display and audio?
Is there a list of tested phones? I've been putting off getting an Android, and I was thinking about getting an LG-Vortex.
ReplyDeleteApril 17th is my Birthday!
@Alan
ReplyDeleteSo far we have verified G1, Nexus One, Nexus S, Galaxy S and Droid X.
We will update the SparkFun product page as soon as users report success with other models.
Happy birdthday!
@Ytai It doesn't seem to work on the LG Vortex, while working on other phones. Is there something I can do to get it to work? Any advice, pointers would be extremely appreciated. Thanks.
DeleteTwo things to look into:
Delete1. Charging current: make sure the trimmer is all the way clockwise.
2. Firmware: upgrading to the latest version may help in some cases.
@Ytai thanks for responding. I actually did try both of these to no avail. I even got another power supply that could supply up to 2A. Phone shows that its charging. And even after updating the firmware the catlogs show that the phone and ioio try to make a connection but always fail.
DeleteBy upgrading the firmware, I meant upgrade the bootloader to V3.03 AND the app to V3.23. Are these the versions you have?
DeleteThis is turning into a sort of a discussion, let's take it to ioio-users, OK?
Wow! That's pretty cool. I want one too.
ReplyDeletediscounted digital board
Hi.
ReplyDeleteIOIO is exectly what I am looking for but...
I like to use Basic4Android, can IOIO be controlled by it ?
The Basic4Android is an israely company product (Anywhere Software
Moshav Yodfat, 20180
Israel)
Thanks
Meir.
@MM
ReplyDeleteI don't know much about Basic4Android and how extensible it is. The Android-side of IOIO is just a standard Java library, so if the IDE provides ready-made blocks for using it, it will work.
I've had such thoughts regarding AppInventor, where non-programmers will easily be able to use ready-made blocks for interacting with the IOIO.
Hi,
ReplyDeleteI was looking for something like that for a while now :)
I have a very specific question : one major drawback I see with that approach is that Android applications are subject to garbage collection so you can not thrust the timing from java code (since the app can freeze ~50ms during GC, with Android 2.3 it's now ~3ms) unless you manage to retain all objects you allocate (which can be tedious). Was the interface library designed with GC in mind ?
I guess in most project that is not really important, and for more complex one, programming bare C on the PIC and making your own interface protocol with the phone will become useful. Glad to learn it will be possible !
I have an idea for this project, you could made your phone a portable firmware loader, just like what PICkit 2 and PICkit 3 for their programmer-to-go feature.
ReplyDeleteSorry for the late replies...
ReplyDelete@Alexandre
Good point. The Java library does very little memory allocations. I guess that with some effort they could be eliminated completely, so feel free to look into it once I publish the sources.
@Jun
It is already happening :)
During development I'm flashing new firmware all the time via Bluetooth: the phone runs a small service that listens for BT connections containing new firmware images, and when they come, it stores them in a location where the bootloader picks them from.
When do you expect it to ship now?
ReplyDelete@Anonymous
ReplyDeleteThe authoritative source for this question is SparkFun's customer support. But the short answer is that they should start shipping these days :)
What an incredibly great project - we, that is: a very small community of hardware tinkerers around Frankfurt, Germany - can't wait to get our hands on it and give it a try. SparkFun is possibly not the best choice of supplier for us, though - it would be much easier to have a small quantity manufactured around here.
ReplyDeleteAs the EAGLE PCB files are on the SparkFun site, this would be easy - but what do you say? Have you open-sourced them yet? And what if we were to sell the occasional board to interested hackers around here?
@untergeek
ReplyDeleteWe made the hardware open-source so that people can make their own. Clearly, for many people, buying from SparkFun works out, and for others it doesn't. Make it, sell it if you wish. If you are kind enough - give proper credit, but that's not a requirement :)
I'll open-source everything in a day or two, just getting the site in good shape. I can send you the firmware in binary form if you happen to get the boards done sooner.
I just got IOIO / Droid 2 running...Eclipse/ADK on Ubuntu. Awesome, awesome idea. I owe you a beer.
ReplyDeletedoesn't seem to work yet on samsung captivate.
ReplyDeletethe status light comes on and stays on as soon as plug ioio into phone. can't control led or pins with ioio hello app
what android version and phone do I need to get?
do any boards have issues like shorts?
please help,
thanks john
@john
ReplyDeleteFirst, the best place for such questions is now the discussion group:
https://groups.google.com/forum/?pli=1#!forum/ioio-users
and there should also be some useful info on the Wiki:
http://codaset.com/ytai/ioio/wiki
The IOIO library works on any Android version from 1.5 and up (which is practically every Android device). It has been verified to work on all the Google models and on several other Samsung, HTC and motorola models. AFAIK, each board leaves SparkFun after having passed rigorous testing that checks all the pins for shorts and cold joints. So it is not very likely a hardware problem, although these things do happen and the header soldering might have shorted something too. But I don't believe this is a hardware defect anyway.
The symptoms you're experiencing can typically result from:
* Forgetting to enable USB debugging on the phone.
* Insufficient charge current - turn your 'chg' trimmer all the way clockwise.
* Unstable / insufficient power supply - make sure you use a decent 5V-15V source.
If one of those doesn't help - please let me know and please add details on whether you're getting the "charge" (lightening) icon on your phone's status line and whether you're getting the USB / ADB icons.
Hope this all works out and you can soon start with the real fun!
Hi, i have a question about the IOIO and The anouncement that google made yesterday. Is the IOIO compatible with the ADK (android Accessory Developpment Kit? or is it possible to do it? It could be a really cool thing no?
ReplyDeletelink to the ADK http://developer.android.com/guide/topics/usb/adk.html
IOIO does not currently support this interface, but it is possible with software modifications. I intend to give it a shot soon, using ADK when possible and ADB as a fallback for older devices. It is indeed cool!
ReplyDeleteSee (and join) some discussions on the subject:
https://groups.google.com/forum/?pli=1#!topic/ioio-users/3JDn6XZJ9aE
Guy, you rock! thank for the work ;)
ReplyDeleteHi. I'm very interested in your project, and i want buy any IOIO board, but in Sparkfun it's out of stock. Do you know when it will be available?
ReplyDeleteThanks.
@Loic
ReplyDeleteSorry, missed your comment. See the discussion on this subject here
IOIO will soon be able to work on top of the ADK protocol when it's supported, and seamlessly fall back to ADB when it's not. Stay tuned on the mailing list for details.
@Jorge
I don't know. SparkFun customer support is your best bet, and I've noticed that some other Web stores have started stocking it. From what I know, the fact that it's currently out of stock doesn't necessarily mean that the lead times are long. If you have the patience and will, you can try to make one yourself - the hardware is open-source too, and some people have already done that (including myself).
I'd like to see IOIO running on Linux. This thing kicks the crap out of serial connections.
ReplyDeleteHm, I bet this could operate as a USB-to-serial device also. I hope the open-source community goes crazy with this board, it has a ton of potential beyond Android and Java.
@Maave
ReplyDeleteIOIO is a USB host - it cannot directly connect to a PC. It will be possible once Bluetooth support comes.
I'm interested in knowing what are the main things that make you want to connect it to your PC better than an Arduino - it'll help me focus my efforts on filling real needs that aren't properly solved today.
Tried one of your IOIO boards today with an Archos tablet. It's fantastic. Seriously, this opens up a whole new world for me!
ReplyDeleteThe only problem is I have been developing Android apps (mainly graphical user interface simulations) using Flash CS5/Actionscript 3. I'm not experienced enough to figure out whether the IOIO library can be ported so that it can be used within Actionscript 3. Do you know anyone who might be able to do that? If not I guess I'm going to have to put some time into learning how to code Android apps in Eclipse. There aren't enough hours in the day!!
Thanks again for your hard work.
@Mark
ReplyDeleteThanks for the kind words!
I'm guessing it should be too hard to port IOIOLib from Java to ActionScript, and will probably be useful for many people.
Technically, the IOIOLib merely sends/receives bytes over a TCP socket - I'm certain that AS can do that. The tricky parts (as often is the case) are the threading-related stuff - making sure every possible event is handled gracefully at any point in time. Don't know enough about AS to help on this front...
@Ytai
ReplyDeleteThat sounds promising!
If it's ok with you I'm going to do some searching around to see if I can find someone who might be able to port the library to AS.
If you can think of anywhere I might find someone like this let me know!
@Mark
ReplyDeleteOf course it's OK with me - sounds like a cool project! I (and others) would appreciate if you could share this development with the community once it's done. I'll be happy to host it on the main code site.
Hello
ReplyDeletedo you think it's possible to do I/O data connexion between android phone and usb key with IOIO module ?
@stephane
ReplyDeleteUsing the IOIO hardware, you should be able to connect both an Android device and a USB stick through a USB hub, and running an appropriate firmware on the IOIO, transfer the data between them.
The current IOIO firmware does not support a USB hub, nor does it support a mass storage device driver.
This looks awesome. I am an electrical engineer and know which end of a soldering iron to hold. I have also done some programming (back in the days of BASIC). I'd like to use this system to control a model aircraft over a pre-set GPS track and take aerial photographs at preset points before returning to the take off point. You think this is possible as a first project?
ReplyDelete@YellowPinkie
ReplyDeleteWell, I think your main challenge, given your experience, is going to be mastering object oriented programming, Java and the Android framework. None of this is rocket-science, but does require some patience, effort and time. I say, definitely give it a go. Start from the IOIO examples, and search for examples of using camera, GPS, etc. in Android, and go from there. You can seek assistance for IOIO issues on the ioio-users Google group and for Android issues on stackoverflow.
@YellowPinkie
ReplyDeleteCheckout diydrones.com for arduino based autopilot.
Has anyone tested it?
ReplyDeletecan i connect serial devices?
where can i buy 'IOIO - I/O for Android' ?
It has been successfully tested by quite a few people. See this thread for devices reported to work OK.
ReplyDeleteSupport for UART is documented here.
You can buy it from SparkFun here.
Thanks Ytai
ReplyDeleteMy project is controlling some hardware device (like RFID kit) from
ReplyDeleteAndroid Emulator which is installed in a PC... But i am not getting
how to control the external hardware which is connected to PC from
Android Emulator.... Can u help me on this topic??? Is it same doing
project under windows and Linux??
http://www.basic4ppc.com/
ReplyDeletehttp://www.basic4ppc.com/forum/additional-libraries-official-updates/8942-ioio-board-library.html
"
ReplyDeleteHas anyone tested it?
"
It work fine for me
It is a interesting blog. I am newbie for android. Can you give me more information about it.
ReplyDeleteCheers!
ReplyDeleteAll IOIO documentation is on the IOIO Wiki
Support is on the ioio-users discussion group
General Android documentation is on the Android developer site
Hi Ytai ,
ReplyDeleteFirstly I thank you for a wonderful kit.
Basically I work for a service based MNC in India and Iam planning to start a team to build up the capability on IOIO using Android(I am an Android developer)..
May I know which all the companies using IOIO based Android initiatives.
@Dodla,
ReplyDeleteTo be honest, I haven't got a clue... What sort of information are you after?
Ytai ,
ReplyDeleteActually when I explored the stuff about IOIO , I thought of bringing this combination(Android + IOIO) and implement it in my organization by doing some POC projects.. So I went and proposed this to my Manager. He asked me to check whether any other companies who are using this so that we can also start this initiative and aim on providing solutions to some of the costumers... I searched in the web for this information on which all organizations have opted for IOIO+Android pathway but didn't find any info ... This was the information I was expecting from you
Hope its clear for u now :)
NASA seem to be using it :)
ReplyDeletehttp://googleblog.blogspot.com/2011/09/android-in-spaaaace-part-2.html
the IOIO is awesome ! great work.
ReplyDeleteI used it to control a RC car from my computer over WIFI/3G. I used the UDP protocol to send the video and sensors values to the PC, and receive commands from the PC.
here is the video:
http://www.youtube.com/watch?v=n6ypGlTCbKk
Super nice! I'll post a link on the ioio-users list.
ReplyDeleteCongratulations, Ytai!
ReplyDeleteThe page SparkFun page said that this product has been retired.
How do I buy a IOIO card?
Many thanks
Not retired, just replaced with a newer version:
ReplyDeletehttp://www.sparkfun.com/products/10748
Thank you, Ytai.
ReplyDeleteI've just ordered one board to try out.
I am just curious what will be next. Usually people think only about themselves but this could really change because we have such people who partake their knowledge and information
ReplyDeleteYtai, do you know what the effective clock speed of the board is?
ReplyDeleteI'm considering options to hook the board up to a pair of rotary optical encoders (eg tracking telescope position). http://www.usdigital.com/assets/general/82_s6_datasheet_3.pdf
I assume that I'd need to do a variant of the firmware and an application on the IOIO which could be queried by the Android device.
I played with encoders on an Arduino some time back, 2.5k step encoders can give an effective 10k step resolution if interupts are fired on state changes on each line but the Arduino lost count unless the encoders were turned fairly slowly. Notes I put onto a Sparkfun forum at the time http://forum.sparkfun.com/viewtopic.php?f=8&t=20137&view=print
I don't know if others would be interested in having an optical encoder interface in the firmware but it may be worth considering for future enhancements.
Bob
@Bob,
ReplyDeletecan you please raise this topic on the ioio-users group?
it will be interesting and relevant for many people.
can you make libs from your code base so for example if I want ADB only and use a pic24jf64gb002 instead would be great, your bluetooth stack etc.
ReplyDeletethanks.
everything is already in libraries. libadb, libbtstack, etc.
ReplyDeleteYtai, you said "Support for UART is documented here." but unfortunately the codaset site has shut down.
ReplyDeleteCan you provide any other links or examples of using serial devices with IOIO?
Specifically I am attempting to read temperatures with the DS18B20 thermometer.
Thank you very much.
Codaset has been dead for quite a while now. We moved to GitHub, and the UART docs are there.
ReplyDeleteUsing a UART is very straightforward if you're used to Java. It gives you an InputStream and and OutputStream. You can open the output (TX) in open-drain mode as this sensor requires and you can set the input to pull-up so you might even not need the external pull-up (unless the value of the internal pull-up is too high).
If you have further questions, the ioio-users group is the best place to get answers.
Ytai, thank you very much for the reply. As soon as I got on the GitHub I realized I had been there before and forgot about it. I'll look into the ioio-users group as I proceed with my project.
DeleteWhy USB and not bluetooth? Seems like a major limitation that to rig a device up to your phone (like the retroid alarm clock for example) that you have to take it out of your pocket and plug it in to something...
ReplyDeleteYou should read the later posts :)
ReplyDeleteIOIO supports Bluetooth for quite a while now.
Hi Ytai.
ReplyDeleteI write for some questions.
For my project, I need to control in the same time some analog signals and electric actuators.
I need read lambda sensor (0-1000 mV), throttle position and manifold pressure via MAP sensor on my car constant air/fuel management.
Other: I need to know time aperture of fuel injector to compare with vehicle speed for to know the instant fuel consuption.
I read that the one of latest firmware revision can permit to the IOIO to read frequency and duty cycle, It can use this features for know fuel injector aperture during the moritoring of nalalog signals like previous frase?
thanks
fabrio
That should be possible. Really depends on the exact details of the signal though.
DeletePlease direct further discussions to the ioio-users list.
Hello! What a wonderful project! Can somebody tell me how to connect a thermometer to this to measure temperature of a liquid substance? Thank you! :-)
ReplyDeleteIt really depends on which thermometer you'll be using. Different sensors will have different interfaces. There's a very good chance that the interface will be supported, as most of them use standard protocols (either simple analog input, I2C or UART).
DeleteThe way you connect the sensor and the way you read its data will depend on which protocol is used, but either way it should be close to trivial.
Please direct further discussions to the ioio-users list.
H Ytai, I have had your ioio board for a few weeks now but have been unable to connect it to my tablet. My tablet has a usb Host A controller and there are no cables for going from host a to host a. Do you have any suggestions for workarounds for this? I did find something called a usb null modem cable from usbgear, but they apparently they discontinued it after I ordered it. I discovered that FTDI also has one that one can get from MOuser or Digikey, but before I sink $35 into it,
ReplyDeleteI wanted to know what your(or anyone) thoughts were on that. The tablet is a ematic Eglide II with Android 2.2 on it. I got it for free. I really would like to use your board, but have become at a loss as to how to get these 2 things to connect. Thank you sir
Host and host don't work together. It's not just about the cable.
DeleteHow do you intend to program this tablet if it doesn't have USB device mode?
Hi Ytai, I was afraid you'd say something like that
ReplyDeleteThe tablet supports USB debugging mode(Is that the same thing as device mode?)
Looking at http://developer.android.com/guide/topics/usb/host.html
IT says host mode isn't supported until Android 3.1 and this Tablet is at 2.2 so it seems like it is a device mode tablet, they just used an A type connection for connecting to storage devices
The USB connection is really a 24 pin transfer box. Now that I think about it, if I could find transfer box that had mini B or any type of B connection that might work for me. Though so far I haven't found anything like that.
G
Not sure which part of my answer you found disappointing.
DeleteWhether or not your device has host mode support doesn't matter in this case, since IOIO (being a USB host itself) works only with USB devices and not with other USB hosts.
Bottom line is that as long as you can connect it to your PC and program it, you can connect it to IOIO and have it working. IOIO uses the exact same kind of connection (both physically and software-wise) as the PC uses for programming / debugging.
Figure out how to connect it to your PC USB (with the 24 pin connector or other), and that will solve how to connect it to IOIO.
Oh sorry, I was referring to where you mentioned its not just about the cable. You right its not. It's also the connector. I have been unable to connect to PC. The more I research this, the more I realize how, well, screwed I am. One site mentioned its a standard for Korean mobile devices. Several others mention that to get a 24 pin to usb cable, it can only be ordered from China.And that one person that did get it, it wouldn't work with SDK eclipse. So if it won't work with eclipse, then it probably wont with the ioio board. :-( . I"m going to have to find some cheap used table with a mini or micro B usb connector. Sorry for the trouble. Thank you for the info.
ReplyDeleteG
If it's not working with eclipse, it doesn't matter whether or not it works with IOIO, as you won't be (easily) able toput your apps on it.
DeleteI'm using this one and pretty satisfied.
True, but it's not to hard to get them on there. I am able to put any apps I create(Right now very simple ones) onto the tablet. It's a two step process.Copy to flash drive from computer, then plug flash drive into the 24 pin usb transfer box. Go to the file browser and tap the APK icon to install it.
ReplyDeleteCool. Neat tablet.
Hi, neat looking project. With a min 5V supply I have real problems, hardware apps I have in mind are physically very small, work with an AAA or Li-ion cell, otherwise have to go to a 9V battery.
ReplyDeleteI am sorely tempted to re-run the PCB with a SEPIC converter on board for this reason, but it sort of defeats the purpose of buying this hardware at the price it is. Will have to mull this over, cheers, Rickygee
First, there are pretty small (compared to the IOIO size) 2-cell LiPos, which are great.
DeleteSecond, if you're working over USB, your Android will draw some current, and a small battery will discharge very quickly. 9V aren't good for the same purpose. If you're using Bluetooth, then you should be fine.
As for a version with a step-up: be patient just a little bit longer :)
Is there a version that is look like on the picture in the article?
ReplyDeleteSo I can use breadboard jumper wires and breadboard for prototyping?
I don't want to solder anything and also I don't have tools for soldering.
Or is this available in kit like Arduino? (for example: http://www.sparkfun.com/products/10173 )
At the moment the only option is to buy the board without headers. This may change - stay tuned!
DeleteCan this device, monitor inputs. If so what is the maximum voltage it can monitor and how many different imputs can be monitored simultaneously?
ReplyDeleteYes. 3.3V, 16 inputs, 1KHz currently, but will be increased soon.
DeleteSee https://github.com/ytai/ioio/wiki/Analog-Input
I have few questions:
ReplyDelete-does it work with bluetooth 4.0 (low energy) adapter? (e.g. Kensington K33902US Bluetooth USB Micro Adapter). Btstack seems to have "Early support for Bluetooth Low Energy", but did anyone check it?
-is it possible to connect usb hub so we can connect e.g. bluetooth adapter and keyboard at the same time?
-can it be powered using usb? If yes, can it be powered using cellphone battery charger? I'm not electronics expert but in this case does it have to act in slave mode or host mode is also good enough?
- I have not yet integrated the latest version of btstack (I intend to soon).
Delete- USB hub is not supported unfortunately. It is a hardware limitation.
- IOIO is a USB host, so it must provide power on the USB line. It cannot work the other way at the moment. It might change in the future.
Please forgive my ignorance to this matter, but may be some one can help me. After seeing this technology at work I am realizing that I need to apply this android robotic technology to a current project that I have on my fabrication table. Could a application of this sort control this wiper motor?
ReplyDeletehttp://www.youtube.com/watch?v=NhsYr85Gngw
If so, is there someone that I can hire to build the technology for my application?
In order for me to answer your first question, you need to specify what exactly is the interface to the motor driver and what sort of control do you want over it. If it's merely PWM output that you can about, it is doable with IOIO. If you want a closed loop control using an encoder, things get trickier.
DeleteAs for your question about hiring someone: personally - no, but you can ask on the ioio-users group if anyone is interested.
Hi,
ReplyDeleteSparkfun doesn't have it on stock anymore can I get it somewhere else or something similar?
They probably will in a few days. There are several other vendors online. Try Jaycon Systems.
DeleteHi Ytai:
ReplyDeleteGreat product. I was hoping to use an IOIO to interface to a DHT-22 temperature/humidity sensor (http://www.sparkfun.com/products/10167) but it supports a proprietary single-bus protocol that requires reading a bit stream encoding ones as 70 microsecond pulses and zeros as 27 microsecond pulses (with 50 microsecond intervals). Given the relatively low frequency and garbage-collected non-real-time world of Android can I use IOIO to interface to this sensor? It seems to require native code running on the MCU (a la Arduino)?
From your description of the sensor interface, it seems that the way to go is custom firmware. The IOIO code is designed in such a way that it's relatively easy to add new functionality and expose it in high-level Java on the Android side. It is still certainly more difficult than using the built-in functionality though.
DeleteIf you decide to go for it, and need some help, shoot an email to the ioio-dev list.
Hello Ytai! I have a question regarding input voltage to the IOIO board.
ReplyDeleteI have an ESC (EFLA1080B) with 5.5V BEC, and would like to use it to power IOIO board. from previous experience with arduino adk i know that it is not stable with Vin below 7v for this matter i would like to confirm that IOIO runs stable with 5.5v supply.
also, you recommend to bypass the original voltage regulator having constant 5.0v would you recommend doing this with 5.5v? in the case you do will it be ok to put 5amps (my BEC current) on the Vout pins (divided among 6 servos altitude sensor and android phone being chargd)
Yeah. 5.5V input works great. Just make sure it never drops below 5V, especially if your application might introduce current spikes. Servos often do. I wouldn't bypass the IOIO vreg because 5.5V violates the USB spec and may make your Android unhappy.
Deletethx for the advice! i am using 8000mAh 5s Lipo and 5amp on the BEC should be enough to cover the demand of the servos,,, which spikes were you talking about? do those happen during the servo work or after?
Deletealso, would "trimming" the charge voltage with the pot to get the 5.0 solve the android being not happy? or is the pot a part of the ioio vreg?
DeleteRe servos: standard size servo introduce a 1-1.5A spike when going from rest to motion. They may also draw a considerable amount if stalled.
DeleteRe trimmer: it's just a resistor sitting on the vbus. It will limit current but not voltage. You can put a diode between your because and the IOIO 5V if you don't want to use the vreg, but I really see no reason why not to use it. Using it will be more power efficient as well as provide a better stabilized signal.
i have full 5amps to spend coming from the BEC and i will need all those amps.... this is the reason why i would want to bypass the vreg. otherwise i will have to power my servos directly from the BEC having the signal coming from IOIO (if this is possible)... this will complicate things a little, the most elegant way would be to have both power and signal coming from the ioio...
ReplyDeleteWhat I meant was to use the vreg to power the ioio, not the servos. The latter can be in parallel with the ioio vin. The IOIO vreg can handle only 1.5A of load.
DeleteI just searching this kind of things in search engines. My searching was ending here. Keep up your good work. I bookmarked it for general updates.
ReplyDeleteCan IOIO be used in my project?
ReplyDeleteRequirements of project:
1) IOIO should be able to acquire data from RS232 port of 4 sensors which continuously log data every 10ms each and pass it on to android application that can process it (find average and use mean values) to generate stepper motor rotation values that can be passed on through IOIO pwm out put to control 4 stepper motors simultaneously on the go.Each motor rotation is controlled separately by individual sensor input so four instances of same algorithm run simultaneously.
What are the capabilities of IOIO in respect of handling simultaneously analogue and digital inputs and passing on the output values. Are there any limitations of doing so from IOIO/android side?
I have one more query- if bluetooth is used as mode of communication can IOIO be paired with any bluetooth device (PC/ any other mobile phone(JAVA MIDP enabled) that can receive and pass on data to IOIO and then to connected peripheral sensor/ motor etc.? The application required to communicate with IOIO would necessarily be developed for the OS supported by respective mobile phone (Say symbian/BADA/ JAVA/iOS)..However dont know if IOIO is specifically for android in bluetooth mode?
1) There's no problem to do all of this in parallel. The easiest way is to spawn a few threads. The API is completely thread-safe. Stepper motor control has not yet been released, but will be on the next version (it already works for me). However, the first version will include only speed control and not position control. The latter will eventually be implemented too. The only limitations on doing so on the Android side is possibly latency. OpenAccessory would give you ~1ms one-way, ADB would give you 3-4ms and Bluetooth 30-40ms.
Delete2) IOIO is simply a SPP (serial port) device. It doesn't really know whether an Android is talking to it or something else. However, working with the low-level protocol would be very inconvenient. This is where the IOIOLib Java library helps, by exposing a high-level API and translates that to the low-level protocol. IOIOLib is currently for Android only. The good news is that it is very loosely coupled with Android. The even better news is that I'll soon release a PC version for it. The only requirement would be Java.
Thank you for the earnest reply...
DeleteThe stepper motor can be controlled using a separate motor controller (as the one mentioned in Chap.5 of Simon Monk's book "Making android accessories with IOIO". In this example the stepper motor is controlled for both speed and direction using a sparkfun motor controller. As you mentioned the next version of IOIO will have speed control..
1)Does is mean that no separate motor controller will be required (which I think may not be)?
2)Would it be possible to control stepper motors requiring higher voltages (say 24v) to operate using IOIO (motor is supplied with external required voltage and only pwm input via IOIO)?
3)Next version is firmware update only or has any hardware changes to IOIO also? When we can expect it in market?
The IOIO within its capabilities is a powerful device which can be used to develop low cost technologies... Thank you for creating IOIO.
The robot in Simon's book uses DC gearmotors, not steppers!
DeleteSteppers need different drivers, such as this one.
1) The IOIO doesn't drive the motors directly, but it can generate the control signals that the driver expects (step and dir).
2) This driver can handle up to 35V, 2A. There are drivers for higher voltages and currents that get the same control inputs I believe.
3) There are no hardware changes, it is strictly a firmware change. What I meant is that the coming version will only let you set a certain speed, while the next versions will also let you control a precise number of steps. Please join the ioio-users list for more details. There was recently a thread about this very issue, and also I posted a project I made with stepper motors.
Thank you Ytai for the quick reply...Sorry for the ignorance and wrongly quoting DC gear motors as steppers..I have joined the IOIO-users list..which has lots of already answered questions. Thanks..
DeleteHi Ytai
ReplyDeleteI'm a novice when it comes to electronics but your cool IOIO board has really sparked my interest in wanting to learn more and I hope you will help me. One of my friends is an android app developer and we would like to make a small hobby project which makes it possible to use the phone to activate/deactivate an electric lock. I have a couple of questions I hope you will answer:
1) The lock comes in a lot of different versions ranging from 5-24V ac and dc - what will the IOIO board be able to power?
2) Which outputs or channels on the board do I use to connect the lock to the board?
3) Do I need an external power supply/battery or is the IOIO board or smart phone able to power it all?
4) Is it possible to connect the IOIO board to the smart phone via a usb hub to allow more ports for connecting e.g. a web cam (if this is even possible)?
As I mentioned I am pretty new to this, so it would be a tremendous help if you could mention any additonal hardware/equipment needed to make our small project come to life besides the phone, IOIO board and lock as we are starting completely from scratch. All I can come to think of is wires and crocodile clips pretty much..
Thank you in advance!
Best regards Casper
1) I'm guessing this lock is some sort of a solenoid. You can choose a rating suitable to whichever power source you intend to use. You better choose a power supply between 5V-15V, so that you can use the same supply to power the IOIO. 12V is probably a good bet.
Delete2) I'm making some assumptions on this "lock", guessing it is a standard solenoid. In that case, any pin, in digital output mode can be used to control it. However, you'll need to connect it through a transistor, and not directly, since it will sure consume too much current. If you send me the specs of this lock, I can help you select a transistor.
3) You must have and external power. Almost all phones are USB devices rather than hosts, which means they cannot provide power, but rather consume power from the USB.
4) No. IOIO doesn't support USB hubs. Even if it did: what would it do with the camera? It is not like the camera will automatically be bridged by the IOIO to the Android and that the Android will have drivers for dealing with it. It is not unfeasible, but requires a substantial amount of specific work to achieve.
Please register to the ioio-users list and raise the subject there. It is a better medium for discussions of this sort, and there will be more people involved.
Thank you for your quick reply. Your answers were very helpful.
ReplyDeleteIt would be very much appreciated if you would help us select a transistor. Can I send the lock specs in an email? The data sheet is a .png file.
FYI I live in Denmark where the power outlets are 230 volt and the power supply I am looking at can deliver:
12 V DC : 2500 mA 19 V DC : 1900 mA
13 V DC : 2400 mA 19,5 V DC : 1870 mA
14 V DC : 2300 mA 20 V DC : 1850 mA
15 V DC : 2200 mA 21 V DC : 1800 mA
16 V DC : 2100 mA 22 V DC : 1750 mA
17 V DC : 2000 mA 23 V DC : 1700 mA
18 V DC : 1950 mA 24 V DC : 1650 mA
18.5V DC : 1920 mA
Casper, kindly take this to the ioio-users list and post your question there with a link to the datasheet.
DeleteThanks!
Anyone know why the 5V supply is driven from an expensive TI DC-DC switching regulator rather than a simple 7805 linear regulator?????
ReplyDeleteThanks
-Donald
Linear regulators convert the extra voltage to heat. Thus they are very inefficient and will get quite hot when the voltage differential and current draw are significant.
DeleteAlso, even the lowest dropout regulators have SOME dropout voltage, whereas switchers can literally output their input voltage.
I understand what they are....but the cost difference is significant. A 7805 is 30 cents while the switching regulator is $5....for a product like an android gizmo....thats a big bite into profit...
DeleteSo....it's simply because of energy efficiency and heat then?
Let's assume for a second and application powered by 12V and consuming 1.5A of current (say, charging the Android + two small motors). The voltage drop across your LDO will be 7V. Times 1.5A is 10.5W (!). According to the 7805 datasheet, this will be a +230 deg C differential, which other than violating the specs and imposing a safety hazard, it is just enough to melt the solder on the pads :D
DeleteOther than that, the 7805 would need at least 7V input, which is less convenient.
Last, assuming a 12V battery power, your battery will last 2.5x less time if you used a LDO.
Bottom line: I would personally consider an LDO-based solution significantly inferior and very bad engineering. Lucky for me, cutting costs is not my only consideration...
Wonder if it will work with the maestro servo driver board? Maestro has USB interface, can receive either serial data or ttl, and has the servo logic programmable - it works great directly coupled to the PC as I've written a VB6 to adjust and control the servos for a remote compact camera... If it solves my wireless problem I'll be delighted!
ReplyDeleteThe IOIO doesn't work with arbitrary USB devices (nor it's intended to). It works with lower level interfaces, such as SPI, UART or I2C.
DeleteHello, is it possible to run a MAX7219/MAX7221 8-Digit LED Display Driver with the IOIO Board?
ReplyDeleteSeems like it's a SPI chip. The IOIO has 3 SPI buses, so the answer is probably yes.
DeleteWhere could I contact you for a special project ?
ReplyDeleteMy user is ytaibt at the mail service provided by Google.
DeleteHi, I can not import eclipse android sample code to use service.
ReplyDeleteUsing Java6. The code gives an error.
Directory:
ioio / software / applications / HelloIOIOService
Please go to ioio-users with that.
DeleteWhy is that the IOIO is sold with no conectors ?
ReplyDeleteI need female pin headers and going through the soldering.
That's mostly because this is standard in SparkFun modules. One good reason is that different applications call for different connectors. I've used both female or male in the past.
DeleteThe IOIO Mint variant comes with headers, though, if that's what you prefer.
hello, guys i'm doing my final year project according to android app. if you guys gt any idea on this pls guide me. pls guys i want some sample of programing on android app. where i can get it..
ReplyDeletePerhaps you can find some inspiration on the IOIO pinterest gallery.
DeleteThere are quite a lot of code samples out there. Start with the ones included in the IOIO software bundle and then look for online examples.
Some ideas:
- https://play.google.com/store/apps/details?id=com.inex.ioioexample
- http://mitchtech.net/category/tutorials/ioio/
- http://www.ioiobook.com/