Ding:Raspberry

Aus FabLab Region Nürnberg
Foto
raspi sensehat.jpg
flattr.png
Basisdaten
Status funktionstüchtig
Schöpfer Kraeml (Diskussion)


Der Raspberry Pi ist ein Computer auf einer Platine. Seine "Festplatte" ist eine (Micro)SD-Karte (SDHC). Er hat Anschlüsse für einen HDMI-Monitor, USB, Netzwerk, Audio In/Out, Kamera, (Touch)Display und 17 GPIOs. Auf dem rechtem Bild ist noch eine HAT (Erweitrungsplatine) auf dem Raspberry montiert.

Warum der Raspberry?

Vergleicht man die Kosten mit dem ESP8266 (2,50€) ist der Raspberry mit seinen 30€ relativ teuer.

Vergleicht man dann noch die Pi-Hardware mit dem des Cubieboard (allerdings 80€). Schneidet der Pi schlecht ab. Er hat nur USB-2.0 und keine USB-3.0, keine SATA und keine Gigabit-Ethernetschnittstelle.

Aber 5 Millionen verkaufte Pis spricht für sich selbst. Mit etwas bash-Erfahrung und mit Python lassen sich viele Projekte günstig und schnell umsetzen. Der Erfolg liegt wahrscheinlich im OpenSource Betriebssystem Linux und den vielen GPIOs des Pis.

Mit dem Pi2 wird selbst Windows schwach und bietet eine 0€-Version von WinIoT für den Pi an.

Mit anderen Worten, wer einen günstigen Ersatz für ein NAS sucht, ist mit dem Pi auf langer Sicht nicht zufrieden. Wer mit Hardware auf hoher Ebene (Betriebssystemebene) experimentieren möchte und eine große Community um sich haben möchte ist mit dem Pi zufrieden bis glücklich.

Community

Der Pi wurde als Schulcomputer konzipiert und soll den Einstieg in die Hardware-Nahe Informatik (Technische Informatik) ermöglichen. Das auf eine Pi ein MedienServer mit/oder NAS läuft, war anfänglich nicht geplant sondern Kindern und jungen Erwachsenen (oder jung gebliebene Erwachsene) ein billiges Gerät zum Spielen in die Hand gegeben werden. Wo Kinder spielen geht auch mal was kaputt, so wären das nur 30€.

Hier der Link zur Raspberrypi Foundation.

Viele Teilen ihre Projekte. Mehr sollen im Link-Abschnitt gesammelt werden.

Projektideen

Steckplatine mit LED und Taster Raspberry Pi
Schaltplan LED Taster mit RaspberryPi

Hier nur ein kleiner Ausschnitt an Projektideen zum Appetit auf mehr machen:

  • Audio Player (ferngesteuert mit Smartphone)
  • Multimediacenter (Kodi oder Plex)
  • Zeit- und Geschwindigkeitsmessung (Physikunterricht)
  • selbst gesteuerter Roboter/Auto
  • GPS-Datenerfassung
  • Heimautomation (Homematic auf dem PI)
  • Wildlife Kamera
  • WLAN, TOR, IPv6 oder VPN Router
  • Smart Meter
  • RFID Reader (Türöffner)
  • AirPrint
  • FM Transmitter
  • Luftraumüberwachung
  • Servocam
  • Bewässerungssystem
  • Wassermelder
  • UND VIELES MEHR

Für den Einstieg soll ein kleines "Hallo LED" dienen. Es geht hierbei um das ein- und ausschalten einer LED mit einem Taster (Drahtbrücke). Hier gleich eine Warnung: Alle GPIO des PI vertragen nur 3,3 V.

Modelle

Hier werden nicht die genauen Fakten aufgezählt. Diese findet man unter elinux.org.

Das Modell A/A+ besticht durch seinen Preis ca. 20€ und der geringen Leistungsaufnahme von 1,5 W.

Wird etwas mehr Rechenleistung benötigt und sollen mehrere USB bzw. Ethernet angeschlossen werden, kommen die Modelle B/B+ ins Spiel. Die Leistung liegt bei ca 3,5 W.

Der neue Pi2 besticht durch seine QuadCore ARMv7 Architektur. Die Leistungsaufnahme liegt jedoch auch nur bei ca. 4,0 W.

Modellliste

Hier mal eine Aufzählung der sieben Modelle.

Modell B1 (2011)

1 x ARMv6 (700MHz)
256 MByte Ram
zwei USB
Ethernetschnittstelle 10/100

Modell B2 (Achtung nicht mit Pi2 verwechseln)

1 x ARMv6 (700MHz)
512 MByte Ram
26 GPIO Stiftleiste
HDMI 1920x1200 Pixel

Modell A

1 x ARMv6 (700MHz)
256 MByte Ram
keine Ethernetschnittstelle
10 € günstiger

Compute_Modul

1 x ARMv6 (700MHz)
Speicherriegelform
Modell B2
Industrieanlagen
4GB eMMC-Flash
Kostet 100€ mit IO-Board

Modell B+ (2014)

1 x ARMv6 (700MHz)
40 GPIO Stiftleiste
Micro-SD

Modell A+

1 x ARMv6 (700MHz)
40 GPIO Stiftleiste
Größe 65x56 mm

Modell Pi2 B

4 x ARMv7 (4x 900Mhz)
1 GByte Ram
40 GPIO Stiftleiste

Modell Pi Zero

1 x ARMv6 (1 Ghz)
1 GByte Ram
40 GPIO Stiftleiste

Modell Pi 3 B

4 x ARMv8 (4x 1,2GHz)
1 GByte Ram
40 GPIO Stiftleiste


Welches Modell habe ich?

 cat /proc/cpuinfo

Eine genaue Tabelle findet man unter elinux.org

Betriebssystem

Für unseres LED-Einsteiger Projekt würde das Modell A ausreichen. Egal welches Modell man hat, man benötigt ein Betriebssystem. Das offizielle Betriebssystem ist Raspbian. Es gibt aber noch andere Betriebssysteme. Auf der elinux.org werden an die 50 Betriebssysteme aufgezählt.

Somit bleibt uns die Qual der Wahl und endet meist bei Raspbian. Raspbian wegen Raspberry + Debian (aktuell Jessie 2015). Was wirklich gut ist, da fast alle Pakete der Debian-Distribution für den Pi vorliegen.

Möchte man seinen Pi mit mehreren OS ausstatten, gibt es zwei Bootmanger.

  1. NOOBS (New Out Of The Box Software) Offizielle Fassung der Pi Foundation
  2. BerrBoot Meine Empfehlung

Warum Bootmaneger?

  1. Installation ist dadurch sehr einfach
  2. Für unterschiedliche Projekte gibt es dann mehrere Booteinträge

Warum Berryboot?

  1. Ermöglicht den Bootmanger mit VNC zu kontrollieren. Wirkliches Headless!
  2. WLAN und IP lassen sich auf der ersten Partition auch von Windows bearbeiten.
  3. USB-Sticks können beim ersten Einrichten als OS-Speichermedium eingerichtet werden. Richtig gut. Da SD-Karten nicht sehr zuverlässig sind und die 32GB Grenze somit leicht geknackt werden kann.
  4. Jedes OS bekommt keine eigene Partition sondern ein Overlay-FS.

Wie Installieren?

1. Wie auf BerrBoot beschrieben die richtige Version von Pi bzw. Pi2 herunter laden. Die Zip-Datei in einem Ordner entpacken.

2. Dann VNC-Unterstützung (Headless) einrichten.

Hinweise zur cmdline.txt:

  • Die Datei besteht aus einer einzigen Zeile.
  • Im FabLab sollte eine IP aus dem Peg-DHCP 172.16.24.0/16 (172.16.24.1 - 172.16.24.254) verwendet werden. Diese wird durch das FabLab vergeben.
  • Hier ein möglicher Eintrag: ipv4=172.16.24.1/255.255.0.0/172.16.1.1
  • Möchte man WLAN einrichten lautet der obige Eintrag ipv4=172.16.24.1/255.255.0.0/172.16.1.1/wlan0. Allerdings sollte die wpa_supplicant.conf folgenden Inhalt haben:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
 ssid="FabLab_NBG"
 psk="fablabnbg"
 # Protocol type can be: RSN (for WPA2) and WPA (for WPA1)
 proto=RSN
 
 # Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
 key_mgmt=WPA-PSK
 
 # Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
 pairwise=CCMP

 #Authorization option should be OPEN for both WPA1/WPA2 (in less commonly used are SHARED and LEAP)
 auth_alg=OPEN
}
  • Ein qmap=de in der Zeile sorgt schon mal für eine de-Tastatur im Bootmanager.
  • Ein timeout=30 haben sich bei mir als sinnvoll erwiesen.

Hat man die Datei cmdline.txt abgeändert und ggf. die wpa_supplicant.conf erstellt, dann werden alle Dateien und Unterordner auf die SD-Karte kopiert. Mit anderen Worten die cmdline.txt und anderen Dateien liegen im Wurzelverzeichnis der SD-Karte.

3. Den VNC-Viewer starten und Einstellungen mit IP vornehmen.

4. Die SD-Karte sauber aus dem System entfernen und

5. rein in den Raspberry.

6. WLAN bzw. Netzwerkkabel, USB-Stick anschließen und Spannungsversorgung anschließen.

7. VNC Verbindung herstellen.

8. Einstellungen vornehmen nach obiger Anleitung

9. Für den Anfang reicht das aktuelle Raspbian.

Achtung Pi Benutzer: Nicht auf die neue BerryBoot-Pi2 updaten!

Erste Schritte

Eine Einführung in die bash bzw. in Python soll hier nicht statt finden. Hierzu gibt es bestimmt mal die Gelegenheit zu einem Workshop. Aber eine Anleitung für die ersten Schritte werden hier gegeben. Mit einem SSH-Client (für Windows empfehle ich die Git-Bash-Portable) sich auf dem Raspberry einloggen.

 ssh pi@172.16.24.1

Und schon ist man mit dem Kennwort raspberry auf seinem Pi (wenn man die richtige IP eingegeben hat).

Das erste Kommando einer Pi-Installation ist:

 pi@raspberrypi ~ $ sudo raspi-config

Hier stellt man unter Internationalisation Options die richtige Sprache, Tastatur und Zeitzone ein.

Ein sicheres Passwort sollte eingestellt werden.

Ein vernünftigen Hostnamen (default raspberrpi) kann eingestellt werden.

Expand Filesystem ist bei BerryBoot/NOOBS nicht notwendig.

Nach Änderungen muss das System neu gestartet werden.

Nach erneuten einloggen kommt etwas Installations- und Updatearbeit auf uns zu.

 sudo apt-get update
 sudo apt-get dist-upgrade

Hinweis: Ein dist-upgrade installiert keinen neuen Kernel. Dieser ist mit der Firmware auf der Boot-Partition. Hier wäre ein sudo rpi-update notwendig.

Folgende Grundpakete für VNC/RDP würde ich installieren

 sudo apt-get install -y vim git xrdp tightvncserver

VNC Server starten

Die genau Anleitung auf elinux.org

VNC-Viewer für Windows: http://www.tightvnc.com/download.php

VNC-Viwer für Mac: http://sourceforge.net/projects/chicken

Hinweis Mac: Der System VNC hat angeblich Probleme mit Sonderzeichen (@\ ... )

 $ vncserver 
 
 You will require a password to access your desktops.
 
 Password: 
 Warning: password truncated to the length of 8.
 Verify:   
 Would you like to enter a view-only password (y/n)? n
 
 New 'X' desktop is raspberrypi:1
 
 Creating default startup script /home/pi/.vnc/xstartup
 Starting applications specified in /home/pi/.vnc/xstartup
 Log file is /home/pi/.vnc/raspberrypi:1.log

Die :1 ist wichtig, da wir jetzt unseren VNC-Port mit 5900 + 1 berechnen können. Jetzt kann sich mit einem VNC-Viewer IP:5901 der Pi ferngesteuert werden.

ACHTUNG: VNC ist kein Fernwartungstool für jede VNC-Sitzung wird ein eigener Desktop erstellt.

Mit

 vncserver -kill :1

kann eine VNC-Sitzung gestoppt werden.

LED Ansteuerung

Hier wird kurz gezeigt, wie man über die Shell eine LED ein/ausschaltet und eine Taster austestet.

 pi@raspberrypi ~ $ gpio -1 mode 23 out
 pi@raspberrypi ~ $ gpio -1 write 23 1
 pi@raspberrypi ~ $ gpio -1 write 23 0
 pi@raspberrypi ~ $ gpio -1 mode 21 in
 pi@raspberrypi ~ $ gpio -1 read 21
 0
 pi@raspberrypi ~ $ gpio -1 read 21
 1

Wie kann ich mir alle Pins anzeigen lassen:

 pi@raspberrypi ~ $ gpio readall
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     |
|   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |  OUT | 0 | 23 || 24 | 0 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 0 | IN   | CE1     | 11  | 7   |
|   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
|   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
|   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
|  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
|  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
|  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+

Mit Python geht das schon viel besser. Ein Weboberfläche zum Programmieren mit Python bietet das Ipython-Paket

sudo apt-get install -y python3 python3-pip python3-dev ipython3* python3-matplotlib python3-pandas pandoc
 ipython3 profile create nbserver 
 nano .ipython/profile_nbserver/ipython_notebook_config.py

Überprüfen ob folgende Zeilen eingetragen sind:

c = get_config()
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.ip = '*'
c.NotebookApp.notebook_dir = '/home/pi/Documents/firstIpython/'
c.IPKernelApp.pylab = 'inline'
c.IPKernelApp.ip = '*'

Wenn alles richtig ist, kann mit

 ipython3 notebook --profile=nbserver

der ipython-notbook als Server gestartet werden und über einen Browser IP:8888 geöffnet werden.

Link-Liste