Jeffrey Cross
Jeffrey Cross

PeerTalk, BeagleBone und Raspberry Pi

Dieser Beitrag wurde ursprünglich in zwei Teilen [1,2] auf The Daily ACK vom 25. August 20012 veröffentlicht. Er wird hier auf der MAKE-Website mit Erlaubnis veröffentlicht.

Ich bin auf ein hervorragendes Stück Zauberei von Rasmus Andersson gestoßen, genannt PeerTalk. Es ist eine Objective-C-Bibliothek, mit der Sie über das USB-Dock-Kabel über TCP-Buchsen zwischen Ihrem iPhone und Ihrem Mac kommunizieren können.

Mein erster Gedanke war, dass, wenn dies wirklich nur von der USB-Hostmodus-Funktion am anderen Ende abhängt, derselbe Mechanismus verwendet werden kann, um mit etwas wie dem BeagleBone oder dem Raspberry Pi zu sprechen, nicht nur mit Ihrem Mac. Auf diese Weise können Sie Ihr Telefon direkt an die Mikro-Controller-Platine anschließen und Hardware direkt ansteuern, ähnlich wie das Redpark-Kabel, jedoch ohne das externe Zubehör-Framework von Apple.

Also fing ich an, im Quellcode herumzuschauen, um zu sehen, ob alles von OS X abhängt. Es stellte sich heraus, dass es sich bei PeerTalk hauptsächlich um wirklich guten Socket-Code auf dem USB-Multiplex-Daemon (usbmuxd). Diese Software ist für die Kommunikation mit Ihrem iPhone über USB und die Koordination des Zugriffs auf seine Dienste durch andere Anwendungen verantwortlich. Das ist das, was iTunes und Xcode verwenden, um mit Ihrem Telefon zu sprechen, wenn Sie es an den USB-Anschluss Ihres Mac anschließen.

Daher muss jedes Gerät, das mit dieser Methode mit dem iPhone kommunizieren möchte, dies tunusbmuxd. Glücklicherweise gibt es für mich eine Reihe von Leuten, die herausgefunden haben, wie man unter Linux mit dem iPhone spricht, und es funktioniertusbmuxd für Linux.

Es gibt auch einige andere Abhängigkeiten, die in der Ångström-Linux-Distribution auf meinem BeagleBone nicht vorhanden sind, oder sogar Pakete überopkgGebäudeusbmuxd auf meinem BeagleBone erfordertlibusb undcmake. Also vor dem BauenusbmuxdIch musste bauencmakeDies bedeutete die Behebung einiger Probleme mit den mit Ångström gelieferten Standard-Komprimierungsbibliotheken.

Einige Stunden später, nachdem ich genug auf das Erstellen von Software gewartet hatte, um mich zu überzeugen, dass ich vor dem ernsthaften Entwickeln des BeagleBone wirklich eine ARMv7-Toolchain auf meinem Mac erstellen musste, um die Dinge crosskompilieren zu können, anstatt sie direkt auf dem Board zu erstellen ...

… Habe ich eine einfache bekommen"Hallo" von meinem iPhone zum BeagleBone und dann viaBildschirm auf meinem Mac mit Portweiterleitung und dem alten Standby,Telnet.

Während ich daran gearbeitet hatte, das zu schaffen, war ich nicht alleine. David House schaute durch einige der Gassen, um PeerTalk dazu zu bringen, mit seinem Raspberry Pi zu sprechen, und wir bekämpften das Problem auf Twitter, während wir darauf warteten, dass sich der Code bis in die Nacht hinein kompilierte.

Während ich an einem Ende arbeitete, arbeitete David an dem anderen und baute einen Klienten auf dem Raspberry Pi, der oben drauf saß usbmuxd das würde nativ mit PeerTalk unter iOS sprechen, das er Peertalk-Python nannte. Da wir den Quellcode beider Seiten hatten, war es nicht so schwer. Einfach nur schwer genug.

Wenn Sie dies auf dem BeagleBone oder dem Raspberry Pi replizieren möchten, sollten Sie zunächst die PeerTalk-Bibliothek herunterladen und erstellen. Anschließend müssen Sie die iOS- und OSX-Beispielanwendungen erstellen und bereitstellen.

Dann verbinden Sie sich und booten Sie Ihren BeagleBone. Sie müssen die Karte über ein Netzteil mit Strom versorgen, wenn Sie etwas kompilieren. Es ist möglich, dass Sie so viel Strom ziehen, dass Ihr Computer den USB-Anschluss ausschaltet, um sich selbst zu schützen und den BeagleBone auszuschalten. Das passierte mir ein paar Mal, bevor ich endlich ein Netzteil aus meiner Büroschublade zog. Da Sie die Karte jedoch über das Stromnetz mit Strom versorgen, müssen Sie auch ein Ethernet-Kabel anschließen, damit Sie dies tun könnenssh [email geschützt] und melden Sie sich über das Netzwerk an der Karte an.

1. Melden Sie sich als root bei Ihrem BeagleBone an. 2. Herunterladen, erstellen und installierenlibusb. VVersion 1.0.9 baut, verlinkt und installiert in Ordnung. 3. Herunterladen, Erstellen und Installierencmakedie Sie bauen müssenusbmuxd später. Sie müssen sich die neueste Git-Nightly-Kaufabwicklung besorgen, da ältere Versionen nicht erstellt werden und Probleme mit dem Bestand habenlibbz2Kompression auf dem BeagleBone.

4. Wir brauchen auchlibplist,Dies ist jedoch als Teil des Paketverwaltungssystems unter Ångström Linux verfügbar. Sie müssen also nur Typ installierenopkg install libplist-dev auf die Aufforderung.

5. Herunterladen, erstellen und installierenusbmuxd. Version 1.0.8 erstellt, verlinkt und installiert in Ordnung, auch wenn Sie möglicherweise verwendet werdenccmake und von Hand konfigurieren, anstatt zu verwendencmake wie es scheint, das nicht zu findenlibusb Include-Dateien, die in installiert wurden/ usr / local. 6. Erstellen Sie eineusbmux Nutzer

groupadd -r usbmux -g 114 useradd -r -g usbmux -d / -s / sbin / nologin -c "usbmux user" -u 114 usbmux

7. Da das BeagleBoard syslog nicht standardmäßig aktiviert hat und Sie es zum Debuggen benötigen, schalten Sie es einsyslogd aus dem entsprechenden Skript in/etc/init.d.

8. Laufen Sie hochusbmux deamon, durch tippenusbmuxd -v -vauf die Aufforderung. 9. Schließen Sie Ihr iPhone an den (Host-seitigen) USB-Anschluss Ihres BeagleBoard an. In diesem Fenster sollte ein Debugger angezeigt werden/ var / log / messages.

10. Laden Sie David House´s herunterPeertalk-Python und seine Abhängigkeiten.

11. Starten Sie auf Ihrem iPhone den PeerTalk-Client für iOS.

12. Starten Sie den Python-Client auf dem BeagleBone durch EingabePython ./peertalk.py auf die Aufforderung.

Geben Sie an der Eingabeaufforderung eine Nachricht ein, und es sollte so etwas angezeigt werden…

Von da aus ist es ziemlich trivial, eine zu bauen"Hallo Welt" B. einfach mit Davids Code herumhacken und die Heartbeat-LED umschalten, wenn das BeagleBone Nachrichten empfängt.

def run (self): Rahmenstruktur = struct.Struct ("! IIII") ledOn = 'echo 1> / sys / class / leds / beaglebone :: usr0 / helligkeit' ledOff = 'echo 0> / sys / class / leds / beaglebone :: usr0 / Helligkeit 'i = 0, während self._running: try: msg = self._psock.recv (16) if len (msg)> 0: frame = framestructure.unpack (msg) size = frame [3] msgdata = self._psock.recv (Größe) print "Received:% s"% msgdata, wenn i == 0: os.system (ledOn) i = 1 andernfalls: os.system (ledOff) i = 0, außer: pass Was bringt Sie zu diesem Punkt ...

Welches ist der Punkt, an dem ich jetzt gerade erreicht habe. Die nächsten Schritte sind eine geeignete Anwendung für iOS-Endanwendungen mit einer allgemeineren Steuerung der BeagleBone-Header-Pins und einem flexibleren Python-Backend für den BeagleBone selbst. David House hat es auch geschafft, alles auf den Raspberry Pi zu bringen.

Die einzige Änderung gegenüber dem BeagleBone-Einrichtungsverfahren besteht darin, dass Sie greifen solltenLibplist mitapt-get eher, alsopkgund da Sie nicht als root angemeldet sind, sollten Sie daran denkenSudousbmuxd -v -v wenn Sie den USB-Daemon starten. Abgesehen davon solltest du gut sein…

Aktie

Leave A Comment