Nach dem erfolgreichen Versuch, mein Nexus One mit dem Open Accessory Mode (ADK) mit einem Arduino zu verbinden, folgt nun ein anderer Ansatz. Das Android Handy über die Android Debug Bridge (ADB) mit einem Fez Domino Board zu verbinden. Für Arduino gibt es das schon durch die MicroBridge Firmware von Inopia alias Romfont. Aber für .NETMF ist das schon eine kleine Premiere. Den Open Accessory Mode für .NETMF gibt es auch schon.
Hardware
Die benötigte Hardware ist für ABD dieselbe wie bei ADK, ein USB Hsot wird benötigt. Da das Fez Domino Board über einen USB Host Anschluss verfügt, ist dafür kein extra Shield notwendig. Grundsätzlich empfiehlt es sich zudem, das Android Handy über einen USB Hub mit eigener Stromversorgung zu betreiben. Per Definition hat der USB Host die Stromversorgung für den USB Client zur Verfügung zu stellen. So ein Handy kann dabei auch mal locker 500mA ziehern, wenn der Akku gerladen wird. Das ist schon etwas zu viel für den Spannungsregler auf dem Fez Domino Board. Der wird schon nach kurzer Zeit sehr warm Deshalb besser den USB Hub verwenden.
Software
Die FezBridge Software beruht auf dem MicroBridge Project für Arduino. Die Portierung auf die .NETMF Plattform war nicht ganz einfach. Zuerst mal war Grundlagenforschung zum Thema USB angesagt. Trotz vieler bestehender USB Host Beispiele findet man darin kaum Infos, wie sich USB Geräte anmelden, wie es sich mit Interfaces und Endpoints verhält und wie man eine Kommunikation mit einem Endgerät aufbaut. Zum Glück hatte ich mit dem Arduino + USB Host Shield und der MicroBridge Anwendung ein funktionierendes Beispiel. So konnte ich mir die USB Aus- und Eingaben mitprotokollieren und mit meinen eigenen Versuchen vergleichen. Schließlich habe ich nun ein halbwegs spielfähige Version fertiggestellt.
Als Android App wird die ServoControl App aus dem MicroBridge Projekt verwendet. Das Programm wurde nur leicht modifiziert. Anstatt die Kommandos in Bytes zu senden, wird ein simples ASCII Protokoll verwendet.
x:90;y:90;
steuert zum Beispiel die beiden Servos
a0:15.23456;
soll den Wert des Analogsensor darstellen. Das funktioniert leider im Moment noch nicht. Zwar wird der Wert gesendet, aber auf der App Seite kommmt scheinbar nicht das richtige an. Die Android App weis überhaupt nichts davon, dass gier die ADB Schnittstelle verwendet wird. Jede bestehende App die über TCP/IP kommuniziert kann im Prinzip verwendet werden. Der Trick besteht darin, das über das ADB Interface TCP/IP port umgeleitet weden können. Gerne würde ich professionelle Apps wie TouchOSC verwenden, leider verwenden diese UDP als Protokoll, nicht TCP/IP.
Video
Auf dem Video wird die ServoControl Android app gezeigt die 2 Servos steuert, die am Fez Domino angeschlossen sind.
httpv://www.youtube.com/watch?v=sDUndL7bEic