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 &