Vom Start bis zur Home-Automation - Raspberry Pi Teil 2 – Programmierung

0,00
Aus ELVjournal 05/2015     0 Kommentare
 Vom Start bis zur Home-Automation - Raspberry Pi Teil 2 – Programmierung

Inhalt des Fachbeitrags

PDF- / Onlineversion herunterladen

Der Einplatinencomputer Raspberry Pi wurde ursprünglich zu Lehrzwecken entwickelt und im Jahr 2012 auf den Markt gebracht [1]. Schnell stellte sich heraus, dass man mit einem Raspberry Pi und wenigen zusätzlichen Teilen sehr gut und preiswert individuelle Projekte realisieren kann. Für gut 30 Euro erhält man mit dem Raspberry Pi ein universell einsetzbares Gerät, welches sich durch Schnittstellen zu Bildschirm (HDMI), LAN, Tastatur/Maus (USB), WLAN-Stick (USB), USB-Stick, Festplatte (USB), SD-Karte sowie konfigurierbare I/O-Pins für extrem viele Anwendungen einsetzen lässt.

Die Entwickler des Raspberry Pi hatten festgestellt, dass Studenten und Schüler zwar in der Lage sind, Programme oder Apps zu nutzen, die Erstellung eigener Programme aber oft Probleme bereitet. Der Einplatinencomputer Raspberry Pi wurde vor dem Hintergrund entwickelt, dass Studenten und Schüler viele und einfache Möglichkeiten haben sollten, eigene Projekte zu entwickeln und dabei viel über Computer zu lernen. Durch die preiswerte Raspberry-Pi-Hardware mit den vielfältigen Schnittstellen sowie eine Vielfalt an verfügbaren Bibliotheken und Beispielprogrammen ist es einfach, individuelle Anwendungen zu erstellen. In diesem Artikel werden verschiedene Möglichkeiten der Programmierung gezeigt. Dabei wird gestartet mit einer Interaktion mit dem Raspberry Pi auf Befehlszeilenebene. Weiter geht es mit Bash-Skript-Programmierung über Python-Programmierung bis hin zu der Programmierung einer grafischen Oberfläche mit Python und Tkinter. Dieser Weg (Befehlszeile – Bash-Skript – Python – Tkinter) zeigt beispielhaft einen Weg, sich mit der Programmierung des Raspberry Pi zu befassen. Da der Raspberry Pi mit einem Linux-Betriebssystem läuft, gibt es eine Vielzahl weiterer Programmierumgebungen für die Entwicklung auf dem Raspberry Pi.

Programmierung allgemein

Im Auslieferungszustand ist der Raspberry Pi nur ein Stück Hardware. Durch Booten des auf einer SD-Karte befindlichen Betriebssystems erhält man ein System aus Hardware und Betriebssystem, welches in der Lage ist, die vorhandenen Hardwarekomponenten wie Bildschirm, USB-Schnittstellen usw. anzusteuern und Basisfunktionalitäten wie eine Benutzerinteraktion (textorientiert oder grafisch) bereitzustellen. Mit der Standardinstallation bekommt man auch bereits einen Texteditor, Dateimanager, einen Browser und ähnliche nützliche Programme. Man ist auch in der Lage, weitere Programmpakete wie Textverarbeitung oder Tabellenkalkulation aus dem Internet oder von CDs nachzuinstallieren. Alle beschriebenen Software-Komponenten wie Betriebssystem, Browser, Textverarbeitungsprogramm usw. wurden von Programmierern für bestimmte Zwecke mit einem bestimmten Leistungsumfang erstellt. Die Programmierer haben alle Funktionen in einer Programmiersprache so beschrieben, dass der Computer sie abarbeiten und der Benutzer sie dadurch nutzen kann. Oft stößt man mit den angebotenen Programmen an Grenzen, die man gerne für ein eigenes Projekt durchbrechen möchte oder muss. Das ist (spätestens) der Zeitpunkt, sich selbst mit Programmierung zu beschäftigen.

Kommandozeile

Die nächstliegende Methode, mit dem Raspberry zu kommunizieren, ist, über eine Kommandozeile (Befehlszeile, Konsole, Terminal, LXTerminal, Shell) Kommandos einzugeben und Resultate zu erhalten. Eine Befehlszeile erhält man direkt nach dem Booten des Raspberry, wenn dieser nicht so eingestellt wurde, dass sofort die grafische Umgebung gestartet wird. Aus der grafischen Umgebung heraus kann man eine Befehlszeile durch Anklicken des LXTerminal-Symbols oben links oder durch Menü – Zubehör – LXTerminal aufrufen. Es wird ein Prompt (= eine Eingabeaufforderung) angezeigt:
pi@raspberrypi ~ $
Der Prompt zeigt an: den aktiven Benutzer (pi), den Namen des Raspberry (raspberrypi), das aktuelle Verzeichnis (~ steht für das Benutzerverzeichnis; für Benutzer pi: /home/pi) und die Eingabeaufforderung ($). In der Kommandozeile kann man nach dem Prompt Linux-Befehle, Programme oder Skripte (siehe unten) ausführen lassen. Dabei muss unter Linux sorgfältig auf Groß-/Kleinschreibung geachtet werden. Durch die Eingabe von ls (l ist) weist man das System an, die Dateien des aktuellen Verzeichnisses anzuzeigen:
pi@raspberrypi ~ $ ls
Dabei werden Verzeichnisse in blauer Farbe angezeigt und ausführbare Dateien in Grün (Bild 1).

Bild 1: Kommandozeile (ls, pwd, cd)
Bild 1: Kommandozeile (ls, pwd, cd)

Viele Linux-Befehle haben Optionen, durch die man die Wirkung der Befehle modifizieren kann. Die Option –l hinter dem Befehl ls ergibt eine detailliertere und übersichtlichere Anzeige der Dateien (Bild 1). Bei großen Dateien ist es übersichtlicher, mit der Option –h eine besser lesbare Darstellung der Dateigrößen anzufordern. Die Optionen kann man kombinieren, indem man sie hintereinander schreibt:
pi@raspberrypi ~ $ ls –lh
Der Befehl pwd (print working directory) bewirkt die Anzeige des aktuellen Dateiverzeichnisses. In Bild 1 wird angezeigt, dass das aktuelle Verzeichnis das Be- nutzerverzeichnis ~ ist, welches hier /home/pi ist. Mit dem Befehl cd (change directory) kann man das aktuelle Verzeichnis wechseln. Mit cd xyz wechselt man in das Verzeichnis xyz. Mit cd .. wechselt man in ein Verzeichnis höher und mit cd / wechselt man in das höchste Verzeichnis (Bild 1). Mit ls xyz werden die Dateien des Verzeichnisses xyz angezeigt. Mit man ls bzw. info ls bekommt man für ls (wie analog auch andere Befehle) eine Erläuterung der Funktionen und der Parameter des jeweiligen Befehls.

Bild 2: Kommandozeile (echo)
Bild 2: Kommandozeile (echo)
Durch den Befehl echo kann man Texte oder Zahlen ausgeben lassen (Bild 2). Man kann auch einfache Rechnungen durchführen lassen und sogar Zahlen in Variablen speichern. Durch die Pfeiltasten ( hoch und runter ) kann man durch die Historie der zuletzt eingegebenen Befehle blättern und einen Befehl aus der Historie unverändert oder (wie in Bild 2) verändert noch einmal ausführen lassen. Bewegen innerhalb eines Befehls erfolgt ebenfalls mit Pfeiltasten ( links bzw. rechts). In der Kommandozeile kann man sehr viele verschiedene Befehle eingeben und damit das System detailliert konfigurieren, Informationen abfragen usw. Eine ausführliche Darstellung der Möglichkeiten sprengt den Rahmen dieses Artikels bei Weitem. Bei Linux-Nutzern ist es sehr viel üblicher, in der Befehlszeile zu arbeiten als bei Windows- oder Mac-OS-Benutzern. Viele Dinge gehen in der Kommandozeile schneller oder direkter als in der grafischen Oberfläche. Schon im ersten Teil dieser Artikelserie im ELVjournal 4/2015 wurden bei der Basisinstallation einige Möglichkeiten der Befehlszeile genutzt. So mächtig die Befehlszeile auch ist und so nahezu unendlich vielfältig die Möglichkeiten sind, so ist es doch eher eine Methode, einen Befehl einzugeben und daraufhin Informationen zu erhalten bzw. eine Aktion anzustoßen. Eine „Programmierung“ im eigentlichen Sinne erfolgt nicht. Es handelt sich eher um eine Interaktion. Es muss immer wieder etwas eingetippt werden. Bei umfangreicheren Aufgaben oder bei sich oft wiederholenden Aufgaben fasst man Befehle in sogenannten Skripten zusammen.

Skript-Programmierung

Mit einem Bash-Skript (auch Shell-Skript) lassen sich mehrere Kommandos in einer Textdatei zusammenfassen, die dann bei Ausführung des Skripts nacheinander abgearbeitet werden. Man muss dadurch nicht jedes Mal alles neu eingeben. Regelmäßige Back-ups von Dateien lassen sich beispielsweise sehr gut erstellen, indem in einem Skript alle Kopierbefehle mit Parametern beschrieben werden und das Skript dann nur unter einem Namen aufgerufen werden muss. Mit einem Bash-Skript ist allerdings noch viel mehr möglich, weil man bei der Skript-Programmierung auch bedingte Ausführungen, Schleifenkonstrukte, Benutzereingaben, Parameterübergaben usw. nutzen kann. Ein Skript wird als Textdatei in einem Texteditor (Programm zum Bearbeiten von Texten) erstellt. Ein Standard-Editor, der bereits im Raspbian integriert ist, ist der Editor mit dem Namen nano. Im letzten Beispiel in Bild 1 wird aus einem beliebigen Verzeichnis heraus die Liste der Dateien im Benutzerverzeichnis angezeigt. Dabei werden einige Parameter benutzt:
pi@raspberrypi ~ $ ls –lh ~
oder
pi@raspberrypi ~ $ ls –lh /home/pi
Da die Dateien des eigenen Verzeichnisses recht oft angezeigt werden sollen, kann man sich dafür ein kleines Skript erstellen.

Bild 3: Skriptdatei im nano-Editor
Bild 3: Skriptdatei im nano-Editor

Zunächst wird eine Datei mit dem Namen dateien im Editor nano geöffnet:
pi@raspberrypi ~ $ nano dateien
Im nano-Editor werden die gewünschten Befehle eingegeben (Bild 3). In Zeile drei des Skripts sieht man den genannten Befehl ls –lh /home/pi. In den Zeilen davor und danach sind jeweils Ausgabebefehle (mit echo) eingefügt, um das Ergebnis illustrativ anzureichern. Die Zeile eins der Skriptdatei #!/bin/bash nennt sich Shebang und teilt dem System später mit, um was für eine Datei es sich handelt. Bei Windows-Systemen wird durch die Dateierweiterung (.bat, .jpg, .exe usw.) angezeigt, um welchen Dateityp es sich handelt. Bei Linux kann man auch eine Dateinamenerweiterung (z. B. .sh oder .py) verwenden, aber sie wird nicht vom System verwendet. Zum jetzigen Zeitpunkt könnte man die Shebang-Zeile noch weglassen, aber es ist sinnvoll, sich anzugewöhnen, immer in der ersten Zeile einer Datei die entsprechende Angabe zu machen. Mit Strg-o und Bestätigen des Dateinamens mit der Eingabetaste wird die Datei abgespeichert. Mit Strg-x wird der Editor verlassen.

Bild 4: Aufruf eines Skripts mit bash
Bild 4: Aufruf eines Skripts mit bash

Mit
pi@raspberrypi ~ $ bash dateien
kann die Skriptdatei aufgerufen werden und die in der Datei enthaltenen Befehle werden abgearbeitet (Bild 4). Nun wird getestet, ob dieses Skript wie gewünscht von jedem Verzeichnis aus die Dateien des eigenen Benutzerverzeichnisses anzeigt. Nach Wechseln des aktuellen Verzeichnisses ( cd / ) und Aufruf mit bash dateien muss festgestellt werden, dass die Datei dateien nicht gefunden wird (Bild 5).

Bild 5: PATH
Bild 5: PATH

Das liegt daran, dass das System nur die in der PATH-Variablen gespeicherten Verzeichnisse durchsucht. Man könnte nun die Skriptdatei mit bash ~/dateien aufrufen, was aber die Sache wieder umständlicher machen würde. Stattdessen erweitern wir, wie in Bild 5 zu sehen, den Inhalt der PATH-Umgebungsvariablen durch Eingabe von PATH=$PATH:/home/pi und sehen, dass es danach funktioniert. Alternativ könnte man die Datei auch in ein Verzeichnis kopieren, das in der PATH-Variablen enthalten ist. Noch schöner wäre es, wenn es ausreichen würde, nur den Namen des Skripts einzugeben:
pi@raspberrypi ~ $ dateien

Bild 6: chmod
Bild 6: chmod
Damit das funktioniert, muss die Skriptdatei dateien mit dem chmod-Befehl als ausführbare Datei gekennzeichnet werden. Mit chmod 777 dateien wird für Benutzer, Gruppe und alle anderen das eXecutable-Flag (und das read- und write-Flag) der Datei gesetzt (Bild 6). Damit ist das Ziel erreicht und man kann das Skript von jedem Verzeichnis aus aufrufen.
Bild 7: Skript-Programmierung
Bild 7: Skript-Programmierung

Ein zweites kleines Skript soll einige weitere Möglichkeiten der Skriptprogrammierung darstellen. Durch Eingabe von
pi@raspberrypi ~ $ nano schleife
und Eingabe einiger Zeilen gemäß Bild 7 wird eine Textdatei mit den Skriptbefehlen erstellt.

Bild 8: Skript mit Parameterübergabe, IF-Abfrage, Schleife
Bild 8: Skript mit Parameterübergabe, IF-Abfrage, Schleife
Nachdem die Skriptdatei mit chmod 777 ausführbar gemacht wurde, kann sie mit schleife 7 aufgeführt werden (Bild 8). (Sonst mit bash schleife 7.)

Erläuterungen:
In Zeile 1 sieht man wieder den Shebang, der anzeigt, dass es sich um eine Datei handelt, die durch das Programm bash ausgeführt werden soll. Mit einem Doppelkreuz werden Kommentare eingeleitet. Im zweiten Block der Skriptdatei werden die Parameter der Skriptdatei ausgegeben, wobei $# für die Anzahl der übergebenen Parameter, $0 für den Namen des Skripts und die Variable $1 für den ersten Parameter steht. Ein Backslash (\\) verhindert die Auswertung einer Variablen in einer Zeichenkette. Dass mit dem übergebenen Parameter gerechnet werden kann, wird mit dem folgenden echo-Befehl „bewiesen“. Die weiteren Blöcke sollen einen Eindruck über die Verwendung einer IF-Abfrage bzw. einer FOR-Schleife geben. An dieser Stelle soll lediglich auf die besondere Darstellung einer Bedingung in Klammern und auf die Verwendung des Übergabeparameters mit $1 hingewiesen werden. Einrückungen einzelner Zeilen dienen der Übersichtlichkeit. Mit Skript-Programmen lassen sich sehr viele Aufgaben lösen. Außer der einfachen Abarbeitung von Befehlen sind Parameterübergaben, Verzweigungen, Schleifen und auch Benutzereingaben und vieles Weitere möglich. Wenn es jedoch um komplexe Berechnungen, umfangreiche oder zeitkritische Programme geht, dann erreicht man die Grenzen der Skript-Programmierung.

Python

Es gibt viele verschiedene Programmiersprachen für den Raspberry Pi, aber die Programmiersprache Python nimmt eine Sonderstellung ein, weil sie von Anfang an als Standardsprache für den Raspberry Pi vorgesehen wurde. Der Namensbestandteil ‚Pi‘ ist die Abkürzung von ‚Python Interpreter‘. Python ist im Raspbian-Betriebssystem – sogar in zwei Versionen (2 und 3) – bereits enthalten und es gibt sehr viele Beispiele für die Verwendung von Python auf einem Raspberry. Der Name Python leitet sich vom Namen der britischen Komikergruppe Monty Python ab. Python wurde Anfang der 1990er-Jahre entwickelt und ist einerseits leicht zu erlernen, aber andererseits – auch durch Unterstützung unterschiedlicher Programmiersprachenparadigmen – sehr mächtig. Eine Auffälligkeit ist, dass Python Einrückungen als Strukturierungselement benutzt und nicht Klammerungen oder Schlüsselwörter, wie es in anderen Programmiersprachen üblich ist. Um einen ersten Eindruck zu vermitteln, wird ein Python-Programm für die Berechnung eines LED-Vorwiderstands (Bild 9) erläutert.
Bild 9: Python-Programm, LED-Vorwiderstandsrechner
Bild 9: Python-Programm, LED-Vorwiderstandsrechner
Bild 10: Laufzeit LED-Vorwiderstandsrechner
Bild 10: Laufzeit LED-Vorwiderstandsrechner
Die Funktion des Programms kann man in Bild 10 sehen. Ein Shebang in der ersten Zeile des Programms zeigt an, dass ein Python-Programm vorliegt, welches durch den Python-Interpreter abgearbeitet werden soll. Die Zeile nach der Shebang-Zeile (mit coding: utf-8) ermöglicht es, Umlaute und ß zu verwenden. Doppelkreuze leiten (außer in den beiden ersten, speziellen Zeilen) Kommentartexte ein. Wie erwähnt, gibt es sehr viele fertige Programme und Bibliotheken, die man benutzen kann. Im Beispiel werden mit from time import sleep Routinen importiert, die Wartebefehle ermöglichen. Mit dem print-Befehl erfolgen Text- oder Zahlenausgaben. Variablen können ohne Deklaration durch Zuweisung benutzt werden und im Programm verwendet werden. Am Beispiel des While-Konstrukts sieht man im Listing in Bild 9 das Prinzip, dass Einrückungen nicht nur zur optischen Darstellung eingesetzt werden, sondern dass der Python-Interpreter an der Einrückung erkennt, welche Zeilen innerhalb der While-Schleife stehen. Selbstverständlich gibt es in Python weitere Schleifenkonstrukte (for..) und Verzweigungsarten (if ..). Mit raw_input erfolgt eine Benutzereingabe und float rechnet den Eingabewert jeweils in eine Fließkommazahl um. Mit ein wenig Programmierkenntnissen kann man nun den Ablauf des Programms leicht nachvollziehen. Man kann das Programm übrigens ohne Veränderungen auch unter Windows laufen lassen, nachdem man Python auf dem Windows-System installiert hat! Für Mac OS gibt es Python ebenfalls. Die Textdatei mit dem Python-Programm hat den Namen vorwiderstand und wird durch python vorwiderstand aufgerufen. Auch hier kann man die Programmdatei mit chmod ausführbar machen und sie dann – wie in Bild 10 – durch Eingabe des Namens aufrufen. Die Shebang-Zeile sorgt dafür, dass die Programmdatei durch den (richtigen) Python-Interpreter abgearbeitet wird.

Grafische Oberfläche mit Tkinter programmieren

Mithilfe von Tkinter ist es möglich, Python-Programmen eine grafische Oberfläche zu geben. Es gibt Tkinter für Windows, Mac OS und einige Linux-Distributionen. Es gibt zwar Alternativen zu Tkinter, aber Tkinter hat sich zumindest im Bereich des Raspberry Pi als De-facto-Standard durchgesetzt und ist in Raspbian bereits enthalten. Der Name Tkinter leitet sich wie folgt ab: Tk (für Tool kit) ist eine einfache Fensterbibliothek. Tkinter bedeutet „Tk interface“ – also Schnittstelle zwischen Python und Tk. Mit Tkinter wird Python erweitert, um Möglichkeiten, eine grafische Benutzeroberfläche (GUI, Graphical User Interface) mit Fenstern, Buttons, Menüs usw. zu erstellen.
Bild 11: Tkinter-Hello-World-Programm
Bild 11: Tkinter-Hello-World-Programm
Eine grafische Anwendung wird erstellt, indem in einem Texteditor die gewünschten Python- und Tkinter-Anweisungen eingegeben werden (Bild 11). Das Programm ist insgesamt ein Python-Programm. In der ersten Programmzeile sieht man deshalb wieder den Python-Shebang. In diesem Beispiel wurde die Datei zur Verdeutlichung mit der Endung .py benannt. Durch from Tkinter import * werden die Möglichkeiten der Fensterbibliothek (Modul) Tkinter importiert. Mit root=Tk() wird ein Fenster mit dem Namen root erzeugt. Dieses Fenster wird im Folgenden näher spezifiziert und mit Inhalt versehen. So bekommt das Fenster z. B. ein Icon (oben links), einen Titel (oben), eine definierte Größe (400 x 250) und zwei Textfelder (Label). Eine Grafikdatei (ELVjournal. gif) wird ebenso im Fenster platziert. Für die Positionierung von Grafikelementen gibt es in Tkinter drei verschiedene Methoden (Layout-Manager, Geometrie- Manager). Im Beispiel in Bild 11 wurde für die Grafikelemente die Methode pack() verwendet, bei der Tkinter eine sinnvolle Anordnung übernimmt. Des Weiteren gibt es noch die Layout-Manager ‚grid‘ (das Fenster wird in ein unsichtbares Gitter eingeteilt) und ‚place‘ (es wird genau definiert, wo einzelne Elemente erscheinen sollen). In der letzten Zeile des Programms (root.mainloop()) wird eine Endlosschleife erzeugt, die es ermöglicht, dass Tkinter auf Ereignisse wie z. B. einen Mausklick, eine Mausbewegung o. Ä. reagieren kann.
Bild 12: Tkinter-Hello-World-Anzeige
Bild 12: Tkinter-Hello-World-Anzeige
Der Aufruf des Programms erfolgt mit python tkinter_ hallo.py aus einem Terminalfenster der grafischen Raspbian-Oberfläche. In Bild 12 sieht man das durch das Programm erzeugte Fenster.
Mit dem folgenden, etwas umfangreicheren Tkinter-Programm (Bild 13) wird ein einfacher grafischer LED-Vorwiderstandsrechner (Bild 14) programmiert.
Bild 13: Tkinter-Programm
Bild 13: Tkinter-Programm
Bild 14: Tkinter-LED-Vorwiderstandsrechner
Bild 14: Tkinter-LED-Vorwiderstandsrechner

Die Elemente des Tkinter-Programms sind:

  • Shebang, um anzuzeigen, dass es sich um ein mit Python auszuführendes Programm handelt
  • Importieren des Tkinter-Moduls
  • Erzeugen eines Fensters mit dem Namen fenster
  • Erzeugen eines Fenster-Icons und eines Titeltextes
  • Definition einer Routine, die ausgeführt wird, wenn der Push-Button ‚Berechnen‘ geklickt wird. Hier werden die Variablen (umgewandelt in Fließkommazahlen) mit den Inhalten der Eingabefelder gefüllt, es erfolgt die eigentliche Rechnung und das Ausgabefeld wird befüllt
  • Erzeugen von Überschrift, Eingabefeldern, Ausgabefeld und Textfeldern sowie einem Push-Button
  • Starten der Endlosschleife mit fenster.mainloop(), da sonst nicht auf das Klicken reagiert werden könnte.

Ausblick

In diesem Artikel wurden verschiedene Möglichkeiten der Raspberry-Programmierung angerissen. Mehr als ein kleiner Eindruck kann im Rahmen des Artikels nicht vermittelt werden. Jedes einzelne Thema füllt locker ein dickes Buch. Einige Buchempfehlungen siehe unter „Empfohlene Produkte“. Im nächsten Artikel der Raspberry-Pi-Artikelserie werden die Ein-/Ausgabemöglichkeiten des Raspberry Pi dargestellt. Speziell geht es um die Nutzung der I/O-Pins. Dabei bilden die hier vorgestellten Programmiermöglichkeiten die Basis.

Weitere Infos:

[1] Raspberry Pi: www.raspberrypi.org/about

  • Deutsches Raspberry Pi Forum: www.forum-raspberrypi.de
  • Englischsprachiges Raspberry Pi Forum: www.raspberrypi.org/forums
  • Python: www.python.org
  • Python-Kurs: http://www.python-kurs.eu/kurs.php
  • Tkinter: https://wiki.python.org/moin/TkInter
  • Tkinter-Tutorial (deutsch): http://www.python-kurs.eu/python_tkinter.php

Fachbeitrag als PDF-Download herunterladen

Inhalt

Sie erhalten den Artikel in 1 Version:

pdf  als PDF (8 Seiten)

Sie erhalten folgende Artikel:
  • Vom Start bis zur Home-Automation - Raspberry Pi Teil 2 – Programmierung
Produkteweitere FachbeiträgeForen
Raspberry Pi 2 B, 1 GB

Raspberry Pi 2 B, 1 GB


EUR 39,95*
sofort versandfertig Lieferzeit:1-2 Werktage2
EDIMAX EW-7811Un Nano-USB-WLAN-Adapter, 150 Mbps

EDIMAX EW-7811Un Nano-USB-WLAN-Adapter, 150 Mbps


EUR 7,95*
sofort versandfertig Lieferzeit:1-2 Werktage2
Noobs Betriebssystem für Raspberry Pi 2 B, auf microSD-Karte

Noobs Betriebssystem für Raspberry Pi 2 B, auf microSD-Karte


Keine Lieferung in folgende Länder: Österreich
EUR 9,95*
sofort versandfertig Lieferzeit:1-2 Werktage2
FRANZIS Raspberry Pi programmieren

FRANZIS Raspberry Pi programmieren


Keine Lieferung in folgende Länder: Österreich
EUR 30,00*
sofort versandfertig Lieferzeit:1-2 Werktage2
FRANZIS Raspberry Pi: Mach's einfach!

FRANZIS Raspberry Pi: Mach's einfach!


Keine Lieferung in folgende Länder: Österreich
EUR 30,00*
sofort versandfertig Lieferzeit:1-2 Werktage2
ELV LED-Lupenleuchte, 2,25-fache Vergrößerung, 522 Lumen

ELV LED-Lupenleuchte, 2,25-fache Vergrößerung, 522 Lumen

Energieeffizienzklasse: A-A++ (A++ bis E)


EUR 44,95*
sofort versandfertig Lieferzeit:1-2 Werktage2

Produktdatenblatt
PEAK Atlas DCA 75 Pro Halbleiter-Tester

PEAK Atlas DCA 75 Pro Halbleiter-Tester


EUR 103,80*
sofort versandfertig Lieferzeit:1-2 Werktage2


Hinterlassen Sie einen Kommentar:
(Anmeldung erforderlich)
  Name
  E-Mail
KATEGORIEN
DAS KÖNNTE SIE AUCH INTERESSIEREN