Top

Grudlagen

Das Raspberry Pi ist ein Einplatinencomputer aus England und existiert seit 2012.

Es existieren unterschiedliche Modelle des Raspberry Pi A, B, A+ und B+.
Im November 2015 kam der Pi Zero auf den Markt.
Seit Februar 2016 existiert das Raspberry Pi 3 Model.

Um mit Raspberry Pi zu starten besorgt man sich als Einsteiger erstmal NOOBS (New Out Of the Box Software) die ZIP Datei auf der Webseite herunterladen und entpacken. Die entpackten Dateien dann einfach auf die SD Karte kopieren, die Karte dann in das Raspberry Pi stecken und anschliessend das Gerät mit Storm versorgen.

Nachdem NOOBS gebootet hat kann man sich für eine Linux Distribution (Raspbian, Pidora, RISC OS, RaspBMC, Arch, OpenELEC) entscheiden und diese installieren. Die jeweilige Distribution kann man dann entsprechend konfigurieren.

Umgebungsvariablen

Die Umgebungsvariable PATH.

echo $PATH

Der Shell-Interpreter sucht in allen Verzeichnissen der Umgebungsvariable PATH. Wenn man ein Programm in einer Textkonsole bzw. Shell-Fenster ausführt. Wird das Programm als Vordergrundprozess gestartet.

Threads

Threads sind Teilprozesse. Bei der Verwaltung und Kommunikation der Threads helfen Kernelfunktionen. Systemprozesse (Dämonen) Hintergrundprozesse zur Systemverwaltung. Durch & am Ende der Zeile wird das Programm im Hintergrund zu starten

xemacs &

Durch pipes kann die Ausgabe eines Kommandos als Eingabe für das nächste Kommando verwendet werden.

Prozesse automatisch starten

Dämon cron, dieses Programm wird beim Rechnerstart durch den Init-V-Prozess automatisch gestartet. Es wird einmal pro Minute aktiv, analysiert alle crontab-Dateien und startet die dort angegebenen Programme. Die globale Konfiguration von cron erfolgt durch die Datei /etc/crontab. Darüber hinaus dürfen Benutzer ihre eigenen cron-Jobs in den benutzerspezifischen Dateien /var/spool/cron/tabs/user definieren. Das Recht der benutzerspezifischen cron-Steuerung kann mit den beiden Dateien /var/spool/cron/allow und /deny eingestellt werden. Wenn allow existiert, dürfen nur die hier eingetragenen Benutzer cron-Kommandos ausführen.
Wenn deny existiert, sind die hier eingetragenen Benutzer ausgeschlossen.

/etc/crontab Globale Konfiguration
Die Datei enthält zeilenweise Einträge für die auszuführenden Programme.

Syntax in /etc/crontab

min hour day month weekday user command
min - gibt an, in welcher Minute (0-59) das Programm ausgeführt werden soll.
hour - gibt die Stunde an (0-23).
day - gibt den Tag im Monat an (0-31).
month - gibt den Monat an (0-12).
weekday - gibt den Tag der Woche an (0-7, 0 und 7 bedeuten jeweils Sonntag).
user - gibt an, für welchen Benutzer das Kommando ausgeführt werden soll (meist root).
command - enthält schliesslich das auszuführende Kommando.

Wenn in den ersten fünf Feldern statt einer Zahl ein * angegeben wird, wird dieses Feld ignoriert.
15 * * bedeutet beispielsweise, dass das Kommando immer 15 Minuten nach der ganzen Stunde ausgeführt werden soll, in jeder Stunde, an jedem Tag, in jedem Monat, unabhängig vom Wochentag.

29 0 * * 6 bedeutet, dass das Kommando an jedem Samstag um 0:29 Uhr ausgeführt wird.

Für die Zeitfelder ist auch die Schreibweise /n erlaubt. Das bedeutet, dass das Kommando jede n-te Minute/Stunde etc. ausgeführt wird.
/15 * * würde also bedeuten, dass das Kommando viertelstündlich (n:00,n:15,n:30,n:45) ausgeführt wird.

/var/spool/cron/tabs/user - benutzerspezifische Dateien
Benutzerspezifische cron-Dateien haben dasselbe Format wie crontab. Der einzige Unterschied besteht darin, dass die user-Spalte fehlt.

cron.hourly, cron.daily, cron.weekly, cron.monthly
Bei den meisten Disributionen sieht die Defaultkonfiguration so aus, dass /etc/crontab lediglich einige wenige Einträge enthält, die bewirken, dass einmal pro Stunde alle Skript-Dateien in /etc/cron.hourly/* ausgeführt werden, einmal pro Tag die Skript-Dateien in /etc/cron.daily/* etc.

Programmieren

Das Raspberry Pi bietet verschiedene Möglichkeiten zum programmieren. Python ist vorinstalliert und auf dem Desktop vertreten, NodeJS muss man selbst installieren. Natürlich kann man Shell Skripte schreiben oder sich das System für eine bestimmte Sprache einrichten.

Python

Python bietet eine kleine Bibliothek an, um die GPIO Pins zu steuern.

$ wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.4.tar.gz
$ tar zxf RPi.GPIO-0.5.4.tar.gz
$ cd RPi.GPIO-0.5.4
$ sudo python setup.py install

gpiozero ist eine API für GPIO Komponenten.

$ sudo apt-get install python-gpiozero

Um pip zu nutzen muss man es installieren.

$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py
$ sudo pip install requests

Man kann es auch so installieren.

$ sudo apt-get install python-setuptools
$ sudo easy_install pip
$ sudo pip install requests

WebIOPi

Ein Framework für das Internet der Dinge. – Homepage

$ wget http://downloads.sourceforge.net/project/webiopi/WebIOPi-0.7.1.tar.gz
$ tar xvzf WebIOPi-0.7.1.tar.gz
$ rm -rf WebIOPi-0.7.1.tar.gz
$ cd WebIOPi-0.7.1
$ sudo ./setup.sh

Ein ausführen mit den Standard Einstellungen, startet ein simples Web-Interface http://raspberrypi:8000/ wo man sich mit dem Benutzer webiopi und raspberry als Passwort einloggen kann. Über das Web-Interface können die einzelnen GPIO-Pins ein- und ausschaltet werden.

sudo webiopi -d -c /etc/webiopi/config

WebIOPi beim starten des Systems mit starten.

sudo update-rc.d webiopi defaults

Das Framework bietet natürlich noch mehr. Als Beispiel kann man die config Datei entsprechend anpassen. Unter [HTTP] kann man in der Konfigurationsdatei ein doc-root setzen. In diesem Verzeichnis erstellt man eine index.html und lädt die webiopi.js. Eine Auflistung der JavaScript Funktionalität findet man auf der Webside von WebIOPI.

Hier eine sehr simple HTML Datei die einen GPIO nutzt.

<html>
    <head>
        <script src="/webiopi.js"></script>
        <script>
            webiopi().ready(function() {
                var btn = webiopi().createGPIOButton(25, "Light");
                $('#buttons').append(btn);
                webiopi().refreshGPIO(true);
            });
        </script>
        <style type="text/css">
            button {
                width: 160px;
            }
        </style>
    </head>
    <body>
        <div id="buttons" align="center"></div>
    </body>
</html>

Zusätzlich zu HTML Dateien die mit JavaScript GPIO-Pins steuern, kann man auch Python Skripte nutzen. In der Konfigurationsdatei unter [SCRIPTS] trägt man das Skript in folgender Form ein name = sourcefile.

Ein Skript was „Light“ jede Sekunde ein- und ausschaltet kann so aussehen.

import webiopi

GPIO = webiopi.GPIO

LIGHT = 25 # GPIO pin using BCM numbering

def setup():
    GPIO.setFunction(LIGHT, GPIO.OUT)

def loop():
    if (GPIO.digitalRead(LIGHT) == GPIO.LOW):
        GPIO.digitalWrite(LIGHT, GPIO.HIGH)
    else:
        GPIO.digitalWrite(LIGHT, GPIO.LOW)
    webiopi.sleep(1)

def destroy():
    GPIO.digitalWrite(LIGHT, GPIO.LOW)

Dann startet man den Server mit der angepassten Konfigurationsdatei, nun kann man sehen das der Button des Web-Interfaces jede Sekunde wechselt und zusätzlich manuell genutzt werden kann.

sudo webiopi -d -c /home/pi/webiopi-project/config

Konfiguration

System auf den neusten Stand bringen.

$ rpi-update -y
$ apt-get update
$ apt-get upgrade -y

USB

Mit lsusb kann man sich die angeschlossenen USB Geräte anzeigen lassen.

SSH

Mit sudo raspi-config kann man das Konfigurationstool starten. Unter Advanced Options kann man SSH ein- und ausschalten.

Mit einer statischen IP-Adresse ist der Raspberry Pi in Netzwerk einfacher zu finden.

$ sudo nano /etc/network/interfaces

Die original Datei sieht so aus.

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-room /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Dort dann DHCP mit static ersetzen und die gewünschte Adresse eingeben.

auto lo

iface lo inet loopback
iface eth0 inet static
address 192.168.1.5
gateway 192.168.1.1
netmask 255.255.255.0

allow-hotplug wlan0
iface wlan0 inet manual
wpa-room /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Anschliessend das Netzwerk oder den Raspberry Pi neu starten.

$ sudo /etc/init.d/networking stop
$ sudo /etc/init.d/networking start

Nun kann man sich von einem anderen Computer auf dem Raspbery Pi anmelden.

$ ssh -l pi 192.168.0.5

Mit scp kann man dann auch Dateien auf das Raspberry Pi kopieren.

$ scp script.py pi@192.168.0.5:/home/pi

WLAN

Einen WLAN Adapter kann man einfach an einen der beiden USB Ports stecken. Schauen ob der Wlan Adapter erkannt wurde.

$ dmesg | more
$ ifconfig wlan0

Dann wieder eine statische IP-Adresse vergeben und die Parameter für das Netzwerk.

auto lo

iface lo inet loopback
iface eth0 inet static
address 192.168.1.5
gateway 192.168.1.1
netmask 255.255.255.0

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.6
gateway 192.168.1.1
netmask 255.255.255.0
wpa-ssid "<SSID>"
wpa-psk "<PASSWORD>"
iface default inet dhcp

Bluetooth

Der Raspberry Pi 3 hat Bluetooth mit eingebaut.
Bei der Version 2 kann man einen Bluetooth Adapter nutzen.

$ sudo apt-get install bluetooth bluez blueman

$ /etc/init.d/bluetooth status
[ ok ] bluetooth is running.

$ hcitool scan

Hostname

Den Hostname kann man einfach in den Dateien /etc/hosts und /etc/hostname anpassen.
Der Standardwert für den Hostname ist raspberrypi.

$ sudo nano /etc/hosts
$ sudo nano /etc/hostname

Skript beim starten ausführen

Um ein Skript nach dem starten auszuführen kann cron genutzt werden.

$ sudo crontab -e

Am Ende der Datei fügt man die folgende Zeile ein, damit wird das Python Skript cron.py beim starten ausgeführt.

@reboot python /home/pi/cron.py &