Jeffrey Cross
Jeffrey Cross

PeerTalk, BeagleBone și Raspberry Pi

Acest post a fost publicat inițial în două părți [1,2] pe ziarul The Daily ACK 25 august, 20012. Acesta este reprodus aici pe site-ul MAKE cu permisiune.

Am dat peste un excelent vrajitor de Rasmus Andersson numit PeerTalk. Este o bibliotecă Obiectiv-C care vă permite să comunicați între iPhone și Mac prin intermediul cablului de andocare USB utilizând mufe TCP.

Gândul meu imediat a fost că dacă acest lucru ar depinde doar de capacitatea de a avea modul gazdă USB la capătul îndepărtat, același mecanism ar trebui să poată fi utilizat pentru a vorbi cu ceva de genul BeagleBone sau Raspberry Pi, nu doar Macul tău. Acest lucru vă va permite să conectați telefonul direct la placa de microcontroler și să conduceți hardware direct, mult ca și cablul Redpark, dar ocolind cadrul extern al accesoriilor Apple.

Așa că am început să săd în interiorul codului sursă pentru a vedea dacă depinde de ceva ce urma să fie specific pentru OS X, a devenit evident că PeerTalk a fost în mare parte un cod de socket foarte frumos, care stătea în partea de sus a daemonului USB Multiplex (usbmuxd). Acest bit de software este responsabil de a vorbi cu iPhone-ul prin USB și de a coordona accesul la serviciile sale prin alte aplicații. În mod eficient, iTunes și Xcode utilizează pentru a vorbi cu telefonul când îl conectați la portul USB al Mac.

Deci, orice dispozitiv care vrea să vorbească cu iPhone folosind această metodă are nevoieusbmuxd. Din fericire pentru mine există un număr de oameni care au lucrat cum să vorbească cu iPhone-ul de pe Linux, și există un lucruusbmuxd pentru Linux.

Există și alte câteva dependențe care nu sunt prezente pe distribuția distribuției Ångström Linux pe BeagleBone, sau chiar pe pacheteopkg, clădireusbmuxd pe BeagleBone-ul meu necesitălibusb șicmake. Deci, înainte de a construiusbmuxd, A trebuit să construiesccmake, ceea ce a însemnat rezolvarea unor probleme cu bibliotecile de compresie stoc care au fost livrate împreună cu Ångström.

Cu toate acestea, câteva ore mai târziu, după ce am așteptat destul timp pentru a construi software-ul pentru a mă convinge că, înainte de a face o dezvoltare serioasă pe BeagleBone, trebuia să construiesc un set de instrumente ARMv7 pe Mac pentru a compila lucruri în loc să le construi direct pe tablă.

... am reusit sa obtin un simplu"Salut" de la iPhone la BeagleBone și apoi viaecran la Mac-ul meu folosind port forwarding și acel stand vechi,telnet.

În timp ce eram hacking departe de a obține acest lucru, nu am fost singur. David House se uita în jos pe aceleași alei din spate pentru ca PeerTalk să-i vorbească lui Raspberry Pi și am bătut problema pe Twitter și în timp ce așteptau ca codul să se compileze bine în noapte ...

În timp ce lucram la un capăt, David lucra la celălalt, punând împreună un client pe zmeura Pi stând pe partea de sus usbmuxd care vor vorbi nativ cu PeerTalk pe iOS pe care el la numit peertalk-python. Deoarece am avut codul sursă de ambele capete, nu a fost așa de greu. Destul de greu.

Dacă doriți să replicați acest lucru pe BeagleBone sau pe Raspberry Pi, ar trebui mai întâi să descărcați și să construiți biblioteca PeerTalk, apoi să construiți și să implementați aplicațiile de exemplu iOS și OSX și să le lansați.

Apoi conectați-vă și porniți BeagleBone-ul. Va trebui să alimentați placa utilizând un adaptor de rețea ca atunci când compilați lucruri. Este posibil să atrageți suficientă energie încât calculatorul dvs. să oprească portul USB pentru a se proteja și, prin urmare, să vă alimenteze BeagleBone. Mi sa întâmplat asta de câteva ori înainte să scot în sfârșit un adaptor de rețea din sertarul meu de birou. Totuși, din moment ce alimentați placa din rețea, va trebui să conectați un cablu Ethernet astfel încât să putețissh [protejat prin e-mail] și conectați-vă la bord în rețea.

1. Continuați și conectați-vă la BeagleBone ca rădăcină. 2. Descărcați, construiți și instalațilibusb. Version 1.0.9 construiește, se leagă și se instalează bine. 3. Descărcați, construiți și instalațicmake,care va trebui să construițiusbmuxd mai tarziu. Veți avea nevoie să achiziționați cel mai recent checkout Git pe timp de noapte, deoarece versiunile mai vechi nu se construiesc, având probleme cu stocullibbz2compresie pe BeagleBone.

4. De asemenea, avem nevoielibplist,cu toate acestea, acest lucru este disponibil ca parte a sistemului de management al pachetelor de pe Ångström Linux, deci tot ce trebuie să faceți pentru a instala acest tip esteopkg instala libplist-dev la promptitudine.

5. Descărcați, construiți și instalațiusbmuxd. Versiunea 1.0.8 construiește, se leagă și se instalează bine, deși este posibil să folosițiccmake și configurați manual, mai degrabă decât utilizândcmake, deoarece nu pare să găseascălibusb include fișierele în care a fost instalat/ Usr / local. 6. Creați unusbmux utilizator

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

7. Deoarece BeagleBoard nu are syslog activat implicit și veți avea nevoie de depanare, pornițisyslogd din scriptul relevant din/etc/init.d.

8. Rulațiusbmux deamon, prin tastareusbmuxd -v -vla promptitudine. 9. Conectați-vă iPhone-ul la USB (pe partea gazdă) de pe BeagleBoard, ar trebui să vedeți o deplasare de depanare în/ var / log / mesaje.

10. Descărcați David House'speertalk-python și dependențele sale.

11. La iPhone porniți clientul PeerTalk pentru iOS.

12. Porniți clientul python pe BeagleBone tastândpython ./peertalk.py la promptitudine.

Introduceți un mesaj la prompt și ar trebui să vedeți ceva de genul acesta ...

De acolo e destul de banal să construiești o"Salut Lume" de exemplu, doar prin hacking în jurul valorii de cu codul lui David și a comuta LED-ul de inima atunci când BeagleBone primește mesaje.

def rute (self): framestructure = struct.Struct ("! IIII") ledOn = 'echo 1 / sys / class / leds / beaglebone :: usr0 / beaglebone :: usr0 / luminozitate 'i = 0 in timp ce auto._running: try: msg = auto._psock.recv (16) if len (msg)> 0: frame = framestructure.unpack = self._psock.recv (size) print "primite:% s"% msgdata dacă i == 0: os.system (ledOn) i = 1 altceva: os.system (ledOff) i = 0 excepție: Ce te face să faci acest punct ...

Care este cam acolo unde am ajuns acum. Pașii următori reprezintă o aplicație adecvată la sfârșitul iOS a lucrurilor cu control mai generic al știfturilor BeagleBone și un backend mai flexibil al Python pe BeagleBone. David House a reușit, de asemenea, să obțină totul și să lucreze la Raspberry Pi.

Singurele modificări de la procedura de configurare a BeagleBone sunt că ar trebui să apucațilibplist utilizândapt-get Decatopkg, și din moment ce nu vă veți fi logat ca rădăcină, trebuie să vă amintițisudousbmuxd -v -v când porniți daemonul USB. În afară de asta, ar fi bine să mergi ...

Acțiune

Lasa Un Comentariu