Himbeere Pi Projekte: LEGO Brick Alternative Sprache

Benötigen Sie ein neues Raspberry Pi-Projekt? Sie können auf dem LEGO-Stein einige Sprachen von Drittanbietern laufen lassen, aber ev3dev bringt eine abgeschnittene Version von Linux auf den Stein. Sie müssen nichts auf dem Backstein ändern, weil ev3dev von einer Mikro-SD-Karte läuft, die in den Ziegelstein eingesetzt wird. Sie können Ihren LEGO-Stein einfach in den ursprünglichen Zustand zurücksetzen, indem Sie einfach die SD-Karte herausziehen.

Der Großteil der Installationsarbeit besteht darin, die SD-Karte mit der Linux-Distribution darauf zu erstellen. Es ist so ähnlich wie die SD-Karte für den Raspberry Pi selbst zu erstellen. Bei ev3dev. org finden Sie Anweisungen zum Erstellen der SD-Karte unter dem Mac-, PC- oder Linux-Betriebssystem.

Nachdem Sie die SD-Karte erstellt haben, können Sie den Stein in den Raspberry Pi stecken. Sie müssen den Stein direkt an eine USB-Buchse des Raspberry Pi (im Gegensatz zu einem USB-Hub) anschließen, damit er funktioniert.

Sie kommunizieren mit dem LEGO-Baustein vom Raspberry Pi über eine SSH-Sitzung (Secure Shell). Öffnen Sie ein Befehlszeilenfenster und richten Sie eine Sitzung ein. Das sehen Sie:

 ssh root @ 192. 168. 2. 3 Wurzel @ 192. 168. 2. 3's Passwort: _____ _ _____ _ | ___ / __ | | _____ __ / _ / / | _ / _ '| / _ / / | __ / V / ___) | (_ | | __ / V / ___ | _ / | ____ / __, _ | ___ | _ / Debian GNU / Linux jessie auf LEGO MINDSTORMS EV3! Die im Debian GNU / Linux System enthaltenen Programme sind freie Software, die genaue Verteilung Die Bedingungen für jedes Programm sind in den einzelnen Dateien in / usr / share / doc / * / copyright beschrieben Debian GNU / Linux enthält, soweit gesetzlich zulässig, KEINE GARANTIE Letzter Login: Mi Nov 5 11: 45: 33 2014 von 192. 168. 2. 1 root @ ev3dev: ~ # 

Für Linux ist alles eine Datei, und die LEGO-Motoren sind keine Ausnahme: Sie sprechen mit ihnen, indem Sie in eine Datei schreiben, und Sie erhalten Informationen indem Sie eine Datei auflisten, da dies Linux ist, funktionieren die normalen Eingabeaufforderungen weiterhin und Sie finden es nützlich, cd zu verwenden, um das Verzeichnis und ls zu ändern, um zu sehen, welche Dateien sich auf der aktuellen Verzeichnisebene befinden.

Um dieses System innerhalb von Python nutzen zu können, müssen Sie eine SSH-Sitzung innerhalb eines Programms verwalten.Die meisten Leute empfehlen die Verwendung von Pexpect, aber Sie können mehr Erfolg mit Paramiko haben. mit folgendem Befehl:

 pip install paramiko --upgrade 

Der folgende Code zeigt Ihnen, wie Sie eine SSH-Sitzung von Python aus öffnen, ausführen und schließen.

 "ssh Sesson für EV3dev" import paramiko import sys import mathematik, zeit, os # Erstellen Sie einen SSH-Client ssh = paramiko. SSHClient () shell = "; debug = True def main (): print" Warten, bis der Baustein kontaktiert wird "login () print" Spricht jetzt mit dem Baustein "send_command (" lsn ") # Linux-Listenverzeichnis ssh.close () "Jetzt herunterfahren" sys. exit () # Funktionen für den Zugriff auf EV3dev def login (): globale Shell ssh. load_system_host_keys () ssh. load_host_keys (os. path. expanduser ("~ /. ssh / known_hosts")) # Vergewissern Sie sich, dass wir den # SSH-Schlüssel des entfernten Servers automatisch mit ssh verbinden. set_missing_host_key_policy (Paramiko. AutoAddPolicy ()) Paramiko. Nutz. log_to_file ("ev3brick. log") # Verbinde mit dem EV3-Baustein # ändere das Passwort zu deinem eigenen ssh. connect ("10. 42. 0. 3", Benutzername = "root", password = "legobrick9") # Erstellen Sie eine Shell shell = ssh. invoke_shell () wait_for_prompt () send_command ("cd / sys / class / tacho-motorn") # macht Befehle kürzer def wait_for_prompt (): # Erzeuge einen neuen Empfangspuffer receive_buffer = "while not" # "in receive_buffer: # Hole den Empfang buffer receive_buffer + = shell.recv (1024) if debug: print receive_buffer def send_befehl senden (befehl): shell send (befehl) receive_buffer = "while not" # "in receive_buffer: receive_buffer + = shell. recv (1024) if debug oder "-bash" in receive_buffer: print receive_buffer wenn __name__ == '__main__': main ()