Aller Anfang ist leicht

Emulierter Raspberry Pi unter Windows

Praxis & Tipps | Praxis

Zu teuer, zu umständlich, zu langwierig? Mit unserem Pi-Emulator gibt es keine Ausflüchte mehr: Beschäftigen Sie sich mit dem populären Mini-Rechner und realisieren erste eigene Programmierprojekte – unter Windows und kostenlos.

Mit dem Emulator-Paket für Windows auf der DVD können Sie ohne Installation, Konfiguration und Anstöpseleien weiterer Hardware sofort erste Schritte in der Welt des Raspberry Pi unternehmen – ohne tiefer gehende Linux-Kenntnisse. Dazu genügt es für den Anfang, das Archiv zu entpacken und die Datei start.bat auszuführen. Der Emulator Qemu öffnet ein Fenster und startet das Raspberry-Image (Raspbian). Im Fenster lässt sich der Bootvorgang des Pi verfolgen – etwaige Fehlermeldungen kann man getrost ignorieren. Das Hochfahren nimmt einige Zeit in Anspruch, der emulierte Pi läuft selbst auf schnellen Rechnern sogar etwas langsamer als ein echter Raspberry.

Mit einem Klick auf das Qemu-Fenster werden Tastatur und Maus für den Pi aktiv. Alsdann gibt man am Log-in-Prompt pi und als Passwort raspberry ein. Wer sich mit Debian-artigen Linuxen auskennt, wird sich gleich heimisch fühlen: Die Raspbian-Software beruht auf Debian Wheezy. In der aktiven Shell kann man in den Verzeichnissen herumstöbern: mit den Befehlen cd (change directory) und ls (list).

Im Home-Verzeichnis findet sich der Ordner python_games mit einfachen Spielen, die in der Skript-Sprache Python geschrieben wurden. Das Spiel Wormy lässt sich beispielsweise mit python wormy.py direkt in der Shell starten. Das Spielkonzept (Steuerung mit den Tasten A, S, W, D) und die Grafik sind zwar eher simpel, aber genau darum geht es beim Raspberry ja: Raspbian und Pi sind in erster Linie als Lernsysteme konzipiert, die junge Menschen an den kreativen Umgang mit Computern heranführen sollen. Dazu gehört insbesondere die Programmierung mit Skript-Sprachen wie Python. Daher stammt im Übrigen auch der Name: Pi steht für Python Interpreter, der ursprünglich fester Bestandteil des Raspberry Pi werden sollte. Die Pläne, von einer festen Firmware zu booten, hat man jedoch verworfen und ist stattdessen auf SD-Karten als Speicher umgestiegen.

Die Raspbian-Distribution ist mit allem Wichtigen ausgestattet, was man für Python-Programme benötigt. Praktischerweise gehört auch die Modulsammlung Pygame dazu, mit der sich beispielsweise Grafik, Sound und Joystick-Steuerung für Spiele kinderleicht programmieren lassen. Einen exzellenten Einstieg in Python und Pygame bieten die auf der Webseite inventwithpython.com kostenlos verfügbaren Bücher im PDF-Format „Invent Your Own Computer Games with Python“ und „Making Games with Python & Pygame“ von Al Sweigart. Beide sind zwar in Englisch geschrieben, allerdings auch für Englisch-Anfänger verständlich. Und die Bücher sind ein gutes Argument, warum es wichtig sein kann, schon früh mit Fremdsprachen zu beginnen. Wer es partout nicht auf Englisch mag, findet auf der DVD zu diesem Heft eine Leseprobe des deutschen Buches „Python kinderleicht!“ aus dem dpunkt-Verlag.

Zum Zeichnen eines Quadrats, einer Linie und eines Kreises genügen mit Pygame 16 Zeilen einfacher, fast schon selbsterklärender Code:

import pygame, sys
from pygame.locals import *
pygame.init()
windowSurface = pygame.display.set_mode((500, 400),⤦
0, 32)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
pygame.draw.polygon(windowSurface, GREEN, ((146, 0),⤦
(146, 306), (340, 306), (340, 0)))
pygame.draw.line(windowSurface, BLUE, (60, 60),⤦
(320, 60), 4)
pygame.draw.circle(windowSurface, RED, (300, 50), 20, 0)
pygame.display.update()
while True:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            pygame.quit()
            sys.exit()

Man definiert ein Fenster (windowSurface), in das man mit verschiedenen Farben verschiedene Figuren zeichnet. Die While-Schleife ist in Spielen und anderen Programmen der Dreh- und Angelpunkt, um auf Ereignisse zu reagieren und etwa Sprites zu bewegen, Kollisionen zu erkennen und Musik abzuspielen. In unserem Beispiel hält sie nur das Fenster offen und schließt es bei einem Tastendruck.

Üblicherweise gibt man die Zeilen in einem Editor ein, in der Shell beispielsweise mit dem Programm nano. Übersichtlicher und komfortabler als in der Shell dürfte für die meisten Windows-verwöhnten Anwender die Arbeit mit der grafischen Desktop-Umgebung LXDE sein. Der Befehl startx startet die Oberfläche mit dem Raspberry-Logo als Hintergrund in einer Auflösung von 800 × 600. Das Emulator-Fenster lässt sich unter Windows beliebig vergrößern, wozu man mit der Tastenkombination Strg+Alt die Maus aus dem Qemu-Fenster löst. Mit dem Mauszeiger auf der rechten unteren Kantenecke zieht man das Fenster auf die gewünschte Größe. Allerdings ändert das nichts an der Auflösung des LXDE-Desktops im Qemu-Fenster, nur die Pixel werden größer. Um mit der Maus wieder den Pi-Desktop zu steuern, genügt ein erneuter Klick ins Qemu-Fenster.

Ein Klick auf den Button links unten auf dem LXDE-Desktop öffnet das Anwendungs-Menü, ähnlich dem Start-Menü unter Windows. Unter „Entwicklung“ findet man die Python-eigene integrierte Entwicklungsumgebung IDLE, unter „Zubehör“ residiert der Editor Leafpad. Entscheidet man sich für IDLE, öffnet sich ein Fenster mit einer Eingabeaufforderung, die sogenannte Python Shell (>>>), an der man Einzelbefehle eingeben und sofort ausführen kann. Skripte gibt man besser in einem neuen Fenster ein (Strg+n) und startet sie mit F5. Aufgrund der fehlenden Sound-Emulation funktionieren Beispiel-Skripte mit Audio-Ausgabe in Qemu leider nicht. Der Pi hat eine etwas extravagante Art der Signalerzeugung (PWM am Kopfhörerausgang oder digital über HDMI), die noch kein Emulator unterstützt.

Visuell

Da Python bereits ein gewisses Abstraktionsvermögen voraussetzt, ist die Skriptsprache gerade für Kinder im Grundschulalter weniger geeignet. Für sie (und erwachsene Anfänger) bietet sich eher die erziehungsorientierte visuelle Programmiersprache Scratch an. Dort bewegt man im einfachsten Fall das Maskottchen „Scratch Cat“ über den Bildschirm, in dem man Bewegungsmodule wie „Gehe 10er Schritt“, „Drehe 15 Grad“ und „Gehe zu x y“ auf einer Programmfläche ablegt und mit Ereignissen und Schleifen kombiniert. Insgesamt acht Modul-Kategorien helfen beim Erstellen von Animationen, Spielen und Präsentationen. Das vom MIT entwickelte System ist mit einer großen Community verknüpft, die ihre Programme online für andere Lernende veröffentlicht. Die Funktionen zum Hochladen der eigenen Programme und dem Herunterladen fertiger Programme sind Bestandteil der Umgebung.

Da man bei Scratch keine Befehle eintippen muss, gibt es auch keine Syntaxfehler oder vergessene Zeichen, die bei anderen Sprachen zu langwieriger Fehlersuche führen können. Die Bausteine rasten beim Ziehen auf die Programmierfläche ab einer gewissen Nähe zueinander automatisch bei den bereits abgelegten Modulen ein.

Mathematisch

Weitere Argumente, warum es sich lohnen könnte in die Pi-Welt einzusteigen, sind die Software Mathematica und die Programmiersprache Wolfram Language. Mathematica ist eine umfassende Sammlung mathematisch-naturwissenschaftlicher Tools, zum Lösen von Gleichungen und zur Darstellung von Graphen sowie Grafiken. Mathematica bietet Funktionen zur Lösung von Aufgaben aus Ingenieurwesen, Finanz- und Versicherungsmathematik, Mathematik, Statistik, Physik, „Chemical Computing“ sowie Naturwissenschaften.

Für den Raspberry Pi und Raspbian stellt der Hersteller Wolfram Research Mathematica kostenlos bereit. Normalerweise kostet eine Lizenz zwischen 35 Euro für Studenten pro Semester) und um die 9000 Euro für Unternehmen. Aufgrund der Hardwareausstattung lässt sich Mathematica auf einem Pi zwar nicht als Number Cruncher einsetzen, für heimische Berechnungen reicht es aber allemal. Im offiziellen Raspbian-Image sind die Programme bereits vorinstalliert, sodass man mit einem echten Pi sofort loslegen kann. Auf unserem Image mussten wir aus Lizenzgründen Mathematica und Wolfram Language leider entfernen. Beide lassen sich über das Raspbian-Repository aber leicht mit dem Befehl sudo apt-get install wolfram-engine über die Shell (unter LXDE etwa mit LXTerminal) nachinstallieren. Zuvor muss man jedoch die Netzwerkunterstützung einrichten, weiteres dazu im Kasten „Netzwerkfähig“.

Nach der Installation des Software-Pakets findet man im Startmenü unter „Bildung“ die Einträge „Mathematica“ und „Wolfram“. Der Startbildschirm von Mathematica ist schlicht und vermittelt nicht gerade den Eindruck, als hätte man ein leistungsfähiges Tool vor sich. Zur Eingabe eines Ausdrucks muss man das graue Pluszeichen anklicken und im sich dann öffnenden Auswahlmenü „Wolfram Language Input“ wählen. Für ein einfaches Funktions-Plotter-Beispiel reicht der Ausdruck Plot[Sin[x], {x, 0, 2 Pi}].

Leider zeigt sich auch hier wieder ein kleiner Mangel der unvollständigen Emulation: Die Alt-Gr-Taste zum Eingeben der eckigen und geschweiften Klammern funktioniert nicht. Abhilfe schafft das virtuelle Keyboard xvkbd, das man über sudo apt-get install xvkbd nachinstalliert. Damit kann man über die Maus die Klammern eingeben. Standardmäßig klickt xvkbd alle 500 Millisekunden selbsttätig, was störend sein kann. Über das links unten mit xvkbd beschriftete Hauptmenü kann man unter „Property“ dieses Verhalten abstellen.

Am Ende der im Bild unten aufgeführten Plot-Zeile drückt man Shift-Return, damit Mathematica den Ausdruck auswertet und das Ergebnis als Sinuskruve darstellt.

Erheblich komplexer sind 3D-Darstellungen wie diese im Rahmen der One-Liner-Competition im Raspberry-Blog veröffentlichten Zeilen für ein Echidnahedron:

Graphics3D[{Opacity[.8],⤦ 
Glow[RGBColor[1,0,0]],⤦ 
EdgeForm[White],Lighting ->⤦ 
None,PolyhedronData["Echidnahedron","Faces"]}]

das dem Wolfram-Logo „Spikey“ ähnelt, sowie einer Nachbildung des Raspberry-Logos:

Graphics3D[{Red, Sphere /@⤦ 
PolyhedronData["Icosidodecahedron"][[1, 1]], Green,⤦ 
GeometricTransformation[Cylinder[], {{# {1, 0, -1}, {0, 0,⤦ 
.3}, {1, 1, -1}}, {-# .1, 0, 1.5}}] & /@ {-1, 1}}]

Wolfram stellt die gesamte Dokumentation zu Mathematica nebst Beispielen und Tutorial online zur Verfügung (siehe c’t-Link am Ende des Artikels). Daneben stellen Autoren im Blog unter http://blog.wolfram.com/ regelmäßig Lösungen für Einzelprobleme vor, etwa zur Spieltheorie von Schere-Stein-Papier oder dem Rendern von kollidierenden respektive verschmelzenden Galaxien.

Wolfram Language

Alternativ zur Mathematica-Oberfläche kann man seine Formeln auch in der Wolfram-Language-Shell eingeben (Startmenü/Bildung/Wolfram). Darin ist zwar eine Auswertung der Funktionen möglich, grafisch anzeigen lassen sie sich jedoch nicht. Stattdessen kann man sie per Export-Funktion in eine Bilddatei schreiben. Gänzlich neu ist Wolfram Language eigentlich nicht, im Grunde ist es nur ein anderer Name für die bisherige Mathematica Programmiersprache M. Ziel des Herstellers ist es offenbar, auch außerhalb der bisherigen Zielgruppe Anwender zu erreichen, ohne sie gleich mit dem bisherigen Markennamen zu verschrecken. Zudem soll sich die Sprache als System für das Internet der Dinge etablieren.

Wolfram Language ist eine funktionale Programmiersprache mit Netzwerk- und Hardwarefunktionen sowie einer großen Bibliothek zur Verarbeitung etwa von Bildern, Audio, Video und vielem mehr. So kann man beispielsweise Sensordaten abholen, verarbeiten und auf bestimmte Ereignisse reagieren. Auch die analogen und digitalen Ein- und Ausgänge des Pi lassen sich von Wolfram Language aus mit wenigen Zeilen steuern – leider jedoch nicht in unserer emulierten Umgebung, dazu bedarf es eines echten Pi. Auf den Raspberry zugeschnittene Beispiele veröffentlicht Wolfram auf seiner Community-Seite unter www.wolfram.com/raspberry-pi/.

Diverse Hersteller (Liste unter http://devices.wolfram.com/) springen auf den Zug auf und bieten Mathematica-Bibliotheken für ihre Hardware an. Tinkerforge hat beispielsweise Anfang Februar für seine Sensoren und Aktoren Software zur Einbindung in Mathematica respektive Wolfram Language veröffentlicht. Die Abfrage eines Temperatursensors und die grafische Ausgabe des Temperaturverlaufs passen damit in eine Zeile Code.

Umzug

Für den Fall, dass man sein emuliertes System auf einen echten Pi umziehen will, muss man einige Konfigurationen rückgängig machen. Dazu ist zunächst die Datei /ect/X11/xorg.conf zu löschen und anschließend der Pi sauber herunterzufahren (sudo poweroff). Anschließend startet man das System erneut mit der Batch-Datei init.bat. Diesmal bootet der emulierte Pi nicht vollständig. Am Prompt „#“ gibt man nano /etc/ld.so.preload ein. Achtung, da die Tastaturbelegung noch auf Englisch eingestellt ist, findet man / auf der Taste -. Im Editor löscht man nun das Hash-Zeichen der einzigen vorhandenen Zeile und speichert die Datei mit Strg-o ab. Der Befehl nano /etc/udev/rules.d/90-qemu.rules öffnet eine weitere Datei (der Bindestrich liegt auf ß). Den beiden darin enthaltenen Zeilen stellt man das #-Zeichen voran, um sie unwirksam zu machen und speichert mit Strg-o (# findet sich auf Shift-3). Abschließend schließt man das Qemu-Fenster einfach.

Das auf der DVD beiliegende Tool Win32Diskimager schreibt das Image 2013-12-20-wheezy-raspbian.img auf eine mindestens 4 GByte große SD-Karte. Ein echter Raspberry Pi kann nun ganz normal von der Karte booten. Bereits installierte Programme und Skripte sind erhalten geblieben und lassen sich nun anders als zuvor ohne jegliche Einschränkungen nutzen. Viel Spaß beim Forschen und Entwickeln. (dab)

Emulator

Grundlage unseres Bundles sind die freie Software Qemu (engl., Quick Emulator) und eines der offiziellen für den Raspberry Pi erstellten Datei-Images. Dazu kommt noch ein spezieller für die ARM-Plattform kompilierter Kernel, der für einige Besonderheiten des Emulators angepasst ist. Anders als bei Virtualisierern wie VMware oder Virtual Box arbeitet Qemu nicht mit dem Kernel im Raspbian-Image, sondern mit einem externen Kernel. Qemu kann neben ARM-CPUs auch x86-kompatible Prozessoren, PowerPC, MIPS und SunSPARC emulieren. Die emulierte Hardware ist genau genommen keine, die im beziehungsweise auf dem Raspberry zu finden ist. Vielmehr wird eine sehr ähnliche Plattform „Versatile Platform Baseboard (versatilepb) vorgegaukelt, die aber zumindest die Grundeigenschaften des Pi nachbildet. Dazu gehören unter anderem Ethernet, USB und VGA-Grafik. Nicht dazu gehören Sound und GPIO. Das tut ersten Versuchen jedoch keinen Abbruch, um herauszufinden, ob man sich für Linux und das Basteln mit dem Kleincomputer interessiert.

Das vorkonfigurierte Image ist für deutsche Anwender eingestellt, das heißt, sowohl das Tastaturlayout als auch die Systemsprache sind DE. Die grafische Arbeitsumgebung LXDE ist auf eine Standardauflösung von 800 × 600 mit 16 Farben eingestellt. Damit lässt sich schon recht gut arbeiten. Eine Auflösung von 1024 × 768 ist zwar ebenfalls möglich, jedoch nur mit 8 Farben. Dazu muss man die vorhandene Datei /etc/X11/xorg.conf allerdings stark erweitern und anpassen:

Section "Device"
        Identifier      "Configured Video Device"
        Driver       "fbdev"
        Option          "UseFBDev"     "true"
EndSection
Section "Monitor"
        Identifier      "Configured Monitor"
EndSection
Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
        DefaultDepth 8
        SubSection "Display"
            Depth 8
            Modes "1024x768" "800x600" "640x480"
        EndSubSection
EndSection     

Über den Qemu-Monitor kann man das laufende System überwachen und kontrollieren. Dazu drückt man die Tasten Strg, Alt und 2 gleichzeitig. Eine Dokumentation der abzufragenden Infos ist über den c’t-Link erreichbar.

Netzwerkfähig

Qemu ist zwar von Hause aus netzwerkfähig, die Schnittstelle funktioniert aber standardmäßig nur als logisches Interface auf dem lokalen Rechner. Will man mit dem Raspi ins Internet, muss der PC die Verbindung zwischen der in Software emulierten Schnittstelle und dem physischen Ethernet-Interface überbrücken (bridgen). Da Windows das nicht von Hause aus unterstützt, muss man einen sogenannten TAP-Treiber nachinstallieren. Bei Virtualisierern wie VMware und Virtual Box gehört er zum Lieferumfang, bei Qemu leider nicht. Abhilfe schafft der TAP-Treiber aus dem freien OpenVPN-Paket (auf der DVD zum Heft).

Zur Installation startet man das OpenVPN-Paket und entfernt im Schritt „Choose Components“ alle Häkchen – außer bei „TAP Virtual Ethernet Adapter“. Dann klickt man auf „Next“. Jetzt sollte unter Systemsteuerung\Netzwerk und Internet\Netzwerkverbindungen die Schnittstelle „TAP Windows Adapter V9“ auftauchen. Da man den Namen später beim Start von Qemu als Parameter angeben muss, benennen Sie sie der Einfachheit halber von „LAN Verbindung xyz“ in „TAP32“ um.

Anschließend markiert man den TAP-Driver und das gewünschte LAN-Interface, indem man sie mit der Maus anklickt und dabei die STRG-Taste gedrückt hält. Sind beide markiert, drückt man die rechte Maustaste und wählt „Verbindung überbrücken“. Nun sollte in der Schnittstellenübersicht eine Netzwerkbrücke erscheinen – die noch mit einem roten Kreuz als deaktiviert dargestellt ist. Mit den zusätzlichen Optionen „-net nic -net tap,ifname=TAP32“ verbindet sich Qemu mit dem virtuellen Interface und stellt es dem emulierten Raspberry bereit. Wir haben das schon in der Datei „start_mit_netz.bat“ für Sie vorbereitet.

Normalerweise sollte der RPi nun im lokalen Netz per DHCP eine IP-Adresse zugewiesen bekommen. Bei Versuchen mit gebrückten WLANs erhielt er jedoch in manchen Fällen die Adresse des PC, auf dem er lief. Abhilfe brachte es, die Adresse nach dem Login manuell zu ändern: sudo ifconfig eth0 addresse, wobei adresse eine freie Adresse sein muss. Zusätzlich muss man dann noch das Gateway angeben sudo route add default gw adresse-des-routers, wobei Router meist unter 192.168.1.1 oder ähnlich residieren.

Artikel kostenlos herunterladen

weiterführende Links

Kommentare

Anzeige