IOIO(ヨーヨーと発音)は、 Androidモバイルアプリケーションが外部電子機器とやり取りできるようにする、オープンソースのPICマイクロコントローラベースのボードシリーズです。 [ 2 ] [ 3 ] [ 4 ]このデバイスは2011年にYtai Ben-Tsviによって発明され、最初にSparkFun Electronicsによって製造されました。[ 2 ] [ 5 ] [ 6 ] [ 7 ]「IOIO」という名前は、アプリケーションが外部入力(「I」)を受け取り、外部出力(「O」)を生成できるようにするデバイスの機能に由来しています。[ 4 ]
IOIOボードには、USBホスト/ USBスレーブとして動作し、接続されたAndroidデバイスで実行されているAndroidアプリと通信する単一のPIC MCUが搭載されています。 [ 8 ]このボードは、USB、USB-OTG 、またはBluetoothを介して接続を提供し、Java APIを使用してAndroidアプリケーション内から制御できます。[ 1 ] [ 4 ] [ 9 ] [ 10 ] [ 11 ]
IOIOライブラリは、基本的なデジタル入出力とアナログ入力に加えて、 PWM、I2C、SPI、UART、入力キャプチャ、容量センシング、高度なモーター制御も処理します。[ 3 ]スレーブモードでUSB 2.0を使用する古いAndroidデバイスに接続するために、新しいIOIOモデルはUSB On-The-Goを使用して、そのようなデバイスのホストとして機能します。[ 1 ]一部のモデルは、 Google Open Accessory USBプロトコルもサポートしています。[ 4 ]
IOIO モーター制御 API は、最大 9 個のモーターと任意の数のバイナリ アクチュエータを同期してサイクル精度で駆動できます。[ 12 ] [ 13 ]開発者は、IOIO に一連の高レベル コマンドを送信でき、IOIO はチップ上で低レベルの波形生成を実行します。[ 12 ] [ 13 ] IOIO ファームウェアは、ステッピング モーター、DC モーター、サーボ モーターの 3 種類のモーターをサポートしています。[ 12 ] [ 13 ]
デバイスのファームウェアは、ユーザーが現場で更新できます。[ 3 ]第1世代のデバイスの場合、更新はAndroidデバイスとGoogle Playで入手可能なIOIO Managerアプリケーションを使用して行います。[ 3 ] [ 14 ]第2世代のIOIO-OTGデバイスは、 IOIODudeアプリケーションを実行するデスクトップコンピュータを使用して更新する必要があります。[ 15 ]
IOIOは、コンピュータとAndroidデバイスの両方を第一級ホストとしてサポートし、両方のタイプのデバイスでまったく同じAPIを提供します。[ 3 ]第一世代のデバイスはBluetooth経由でのみPCと通信できますが、IOIO-OTGデバイスはBluetoothまたはUSBのどちらでも使用できます。[ 3 ] PCアプリケーションは、 JavaまたはC#のAPIを使用してボードと通信できます。Javaが公式APIです。[ 11 ] [ 16 ]
IOIOのハードウェアとソフトウェアは完全にオープンソースであり、[ 17 ]世界中で何百ものDIYロボットプロジェクトの作成を可能にしました。[ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ]
このボードは、学生が外部世界と対話できるAndroidアプリケーションを作成するのに役立つことを目的としたさまざまな学習キットに採用されています。[ 3 ] [ 23 ] [ 24 ] [ 25 ]
Qualcomm Snapdragon Micro Roverは、AndroidスマートフォンとIOIOを利用してロボットのモーターとセンサーを制御する3Dプリントロボットです。 [ 26 ] [ 27 ]イスラエルの発明家ガイ・ホフマン博士率いるチームは、IOIOを利用してロボットのハードウェアを制御する、感情に敏感なロボットを開発しました。[ 28 ]
IOIOは、「ギークの楽園」、「AndroidデバイスのUSB接続からI/Oを取得する簡単な方法」、「Androidスマートフォン用のUSB I/Oブレークアウトボードで、お使いの端末を一種のスーパーArduinoに変える」などと様々に評されてきました。[ 18 ] [ 29 ] [ 30 ] [ 31 ] Scientific Computingの記事では、「ギークへの贈り物」として推奨されています。[ 25 ]
オンライン電子機器雑誌「SlashGear」によると、以下の通りです。
IOIO for Androidといくつかの温度センサーを接続すれば、室温を測定し、温度が高くなりすぎた場合にメールで通知するアプリを簡単に作成できます。デジタル入出力、PWM、アナログ入力、I2C、SPI、UART制御など、豊富な入出力オプションのおかげで、家庭用サーモスタットを接続して、温度に応じて暖房を自動的に調整することも可能です。
このデバイスの最初の製造元であるSparkFunによると、次のとおりです。
Androidデバイスの優れた処理能力、インターネット/Bluetooth接続機能、タッチスクリーン、そして様々なセンサーを組み合わせることで、外部世界と連携するための周辺機器を簡単に追加できます。さらに、IOIOを使用するにあたってAndroidデバイスのハードウェアやソフトウェアの変更は一切不要なため、保証も維持され、ハッカー以外のユーザーでもこの機能を利用できます。
この装置の発明者であるイタイ・ベン=ツヴィ氏によると、次のようになる。
Androidスマートフォンは、インターネット接続機能と豊富な内蔵センサー(カメラ、GPS、IMU、タッチスクリーン)を備えた高性能モバイルコンピュータです。Android SDK開発者の優れた開発のおかげで、アプリケーション開発も非常に容易です。多くのアプリケーションにとって、唯一不足しているのは外部周辺機器との接続機能です。まさにこの点でIOIOが役立ちます。IOIOは、Androidデバイス本来の機能に外部回路との通信機能を追加することで、その機能を拡張します。
— Ytai Ben-Tsvi、「IOIO の紹介 - Android 用 I/O」[ 33 ]

第1世代のIOIOボード(IOIO V1として知られる)には、以下のオンボード機能が含まれています。[ 34 ] [ 35 ]この世代はUSBスレーブモードのみをサポートし、ホストとしてUSBマスター(PCまたは最新のAndroidスマートフォン)が必要です。[ 2 ] [ 7 ]
IOIO V1は3.3V ロジックレベルのデバイスで、5V DC/DCスイッチングレギュレータと3.3Vリニアレギュレータを備えています。[ 36 ] 5V レギュレータは5~ 15Vの入力範囲と最大1.5Aの 負荷をサポートします。[ 7 ]これにより、接続されたAndroidデバイスの充電や、複数の小型モーターや同様の負荷の駆動が容易になります。

第2世代のIOIOボード(IOIO-OTGとして知られる)には、次のオンボード機能が含まれています。[ 37 ] [ 38 ] [ 39 ]名前が示すように、この世代の重要な機能は、USBマスターモードまたはスレーブモードをサポートするUSB-OTGの導入です。これにより、IOIOはUSBスレーブモードのみをサポートする古いAndroidスマートフォンにも接続できるようになります。[ 1 ] [ 9 ]
IOIO-OTGは3.3V ロジックレベルのデバイスで、一部のピンは5V 耐性です。5V DC/DCスイッチングレギュレータと3.3V リニアレギュレータを搭載しています。5Vレギュレータは5~ 15Vの入力範囲と最大3Aの負荷 をサポートします。[ 1 ]これにより、接続されたAndroidデバイスの充電や、複数の小型モーターなどの負荷の駆動が容易になります。