Digitales Prototyping: Raspberry Pi GUI, Terminal, SenseHat / 2022-04-28 / Matthias Edler-Golla, CC BY-SA 4.0



Themen heute

Raspberry Pi

  • Moore's Law
  • Linux
  • Eben Upton, einer der Erfinder des Raspberry Pi
  • Raspberry Pi Boards
  • Raspberry Pi Volumio, Octoprint, Kode
  • Erste Schritte mit dem Raspberry Pi
  • via Terminal und VNC mit dem Raspberry Pi verbinden
  • Raspberry Pi Desktop
  • Terminal Befehle
  • eigenes Wlan-Netz eintragen
  • Raspberry Pi ausschalten
  • SenseHAT: Texte und einfache Bilder darstellen
  • SenseHAT: Temperatur, Luftdruck und Feuchtigkeit darstellen
  • SenseHAT: Bewegungen entdecken und darstellen
  • SenseHAT: Einsazt des Joysticks
  • Einsatz des Terminal-Fensters

Moore's Law

Moore's law is the observation that the number of transistors in a dense integrated circuit doubles about every two years. The observation is named after Gordon Moore, the co-founder of Fairchild Semiconductor and CEO of Intel, whose 1965 paper described a doubling every year in the number of components per integrated circuit and projected this rate of growth would continue for at least another decade. […] Moore's prediction proved accurate for several decades and has been used in the semiconductor industry to guide long-term planning and to set targets for research and development.


Moore's Law 2

Bild von Wessel Blokzijl

Hättet sich die Geschwindigkeit eines Fahrrads – wie bei Computer-Prozessoren – jedes 2. Jahr verdoppelt, würden Fahrräder jetzt schneller als Lichtgeschindigkeit fahren!


Moore‘s Law 3

Eine Konsequenz von Moore's Law sind die stetik fallenden Preise für Elektronik bei gleichzeitig rasant anwachsender Prozessor-Leistung!


Linux

Today, Linux systems are used throughout computing, from embedded systems to virtually all supercomputers, and have secured a place in server installations such as the popular LAMP application stack. Use of Linux distributions in home and enterprise desktops has been growing. Linux distributions have also become popular in the netbook market, with many devices shipping with customized Linux distributions installed, and Google releasing their own Chrome OS designed for netbooks.

Linux's greatest success in the consumer market is perhaps the mobile device market, with Android being one of the most dominant operating systems on smartphones and very popular on tablets and, more recently, on wearables. Linux gaming is also on the rise with Valve showing its support for Linux and rolling out its own gaming oriented Linux distribution.


Raspberry PI

https://www.raspberrypi.org/

Der Raspberry Pi (engl. Aussprache: ˈɹɑːzbɹi 'paɪ) ist ein Einplatinencomputer, der von der britischen Raspberry Pi Foundation entwickelt wurde. […] Der Raspberry Pi kam Anfang 2012 auf den Markt; sein großer Markterfolg wird teils als Revival des bis dahin weitgehend bedeutungslos gewordenen Heimcomputers zum Programmieren und Experimentieren angesehen. Der im Vergleich zu üblichen Personal Computern sehr einfach aufgebaute Rechner wurde von der Stiftung mit dem Ziel entwickelt, jungen Menschen den Erwerb von Programmier- und Hardware­kenntnissen zu erleichtern. Entsprechend niedrig wurde der Verkaufspreis angesetzt, der je nach Modell etwa 5 bis 35 USD beträgt.

Der Raspberry Pi 3b hat eine Leistung, die mit der Leistung eines Standard-PCs vor ca. 8 Jahren vergleichbar ist – und das für einen Preis zwischen € 9.- (Raspberry Pi Zero) und € 35.- (Raspberry Pi 3b +).

23 Millionen verkaufte Raspberry Pies

bis Ende 2018 wurden 23.000.000 Raspberry Pi Computer verkauft – die Geräte werden in Pencoed, South Wales (UK) produziert, nicht in China!


Raspberry Pi | Eben Upton

Raspberry Pi is a pocket-size computer the size of a credit card. Its inventor, Eben Upton, aims to get people excited and engaged with technology and STEM careers using this device as a catalyst. This revolutionary, affordable and powerful creation could make technology more widely accessible.


10 years of Raspberry Pi

To date, we’ve sold over 45 million Raspberry Pi computers. Our profits have helped to fund the work of the Raspberry Pi Foundation, which has grown over the last ten years to become one of the most important global players in STEM education.


Raspberry Pi 4 Model B+ (ab ca. € 35.-)

Bild der Raspberry Pi Foundation

Der seit Sommer'19 erhältliche Raspberry 4 ist von Performance und Grafikleistung mit einem aktuellen, kostengünstigen Laptop vergleichbar. Man kann an diesen Einplatinen-Computer z.B. zwei 4K-Monitore gleichzeitig anschliessen und hat somit einen sehr kostengünstigen Ersatz für einen „normalen“ Desktop-PC!

Betriebssystem

Das Betriebssystem Raspian ist eine Variante von Linux und wird direkt auf eine SD-Karte aufgespielt, die unterhalb des Raspberry Pies in einen speziellen Slot eingeschoben wird.

An das Board kann man verschiedene Peripherie-Geräte anschließen:

  • Ethernet Anschluss
  • USB-Geräte
  • Lautsprecher
  • Kamera
  • Monitor (HDMI)
  • Touchscreen (spezielle Schnittstelle)
  • diverse Sensoren & Aktoren
  • Erweiterungsboards (HATs)

Kabellose Verbindungen via

  • WLan
  • Bluetooth

Weitere Raspberry Pi Modelle


bekannte Raspberry Pi „Pakete“

Die meisten der hier gezeigten „Pakete“ lassen sich einfach auf eine SD-Karte kopieren und sind dann (fast) Plug & Play…

Hier eine (sicherlich nicht vollständige) Liste…

Volumio

Volumio is an open source audiophile music player. It is designed to play all your music . Available for Udoo, BeagleBone Black, Cubox and Raspberry PI.

Octoprint

OctoPrint is the snappy web interface for your 3D printer that allows you to control and monitor all aspects of your printer and print jobs, right from your browser.

Kodi media Center

Kodi, ehemals XBMC, ist eine freie und plattformübergreifende Mediaplayer-Software. Die Software ist durch eine große Anzahl von Plug-ins erweiterbar. Das Entwicklungsprojekt zur Erstellung und Pflege der Software erhielt mehrere Auszeichnungen. Quelle: Wikipedia

OSMC

OSMC is a free and open source media center built for the people, by the people. Hier ein youtube-Tutorial, wie man auf dem Raspberry Pi **OSMC** einrichtet.

RetroPie

RetroPie allows you to turn your Raspberry Pi, ODroid C1/C2, or PC into a retro-gaming machine.

Hifiberry, Beocreate

hifiberry.com

We are putting a new lease of life into vintage B&O speakers, upgrading them with wireless capabilities, utilising the latest in open source technology. Re-create empowers people to play with our classical products in order to demonstrate that sound is timeless and DIY can be more than just fun. This is our first outcome for the Beocreate product line which allows for creative exploration in regards to how we experience music.

eBay-Gebrauchtsmarkt

ebay.de

Raspberry Pi Laptop selber bauen

MagPi #74

The Raspberry Pi’s size and relative power enables it to be both a useful desktop computer, and one that you can slip in your
pocket (if you really wanted to).

Das Raspberry Pi Betriebssystem Debian enthält praktisch alle Software, die ein „Gelegenheits-Computer-Nutzer“ benötigt – kostenlos!

kostenlos installieren


Raspberry Pi Magazin

https://www.raspberrypi.org/magpi/issues/

Alle bisher erschienenen Magazine lassen sich dort als PDF herunterladen – kostenlos!


meine aktuellen Raspberry Pi Anwendungen

Bei uns sind momentan mehrere Raspberry Pies am Arbeiten:

  • Volumio Musik Server
  • Außen-Kameras
  • Temperatur-, Luftfeuchtigkeit-, Luftdruck-Sensoren
  • Webserver mit Familienfotos der letzten 20 Jahre

Raspberry Pi Beginner's Book

Fully updated for Raspberry Pi 400, Raspberry Pi 4, and the latest software, this 252-page official Raspberry Pi book is crammed with projects and beginner’s guides containing all the information you need to get started using your new computer!

Learn how to set up your Raspberry Pi, install an operating system, and start using it. Follow step-by-step guides to code your own animations and games, using both the Scratch 3 and Python languages. Create amazing projects by connecting electronic components to Raspberry Pi’s GPIO pins. Plus much, much more!

Den Beginner's Guide kann man als PDF kostenlose herunterladen!


Online-Tutorial zurm Aufsetzen eines Raspberry Pi

https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up


Mit speziellen Wlan-Netz verbinden

Es ist ziemlich aufwändig, sich mit den Raspis mit Eduroam zu verbinden. Deswegen habe ich für den Kurs ein eigenes Wlan-Netz erstellt.

Ihr müsst auch Eure Laptops mit diesem Netz verbinden, um mit den Raspis arbeiten zu können!

Bitte wählte folgendes Wlan aus:

megolla

Das dazugehörige Passwort lautet:

ludens_5_Ohio

Achtung: Dieses Netz ist nicht mit dem Internet verbunden, es funktioniert also nur lokale Kommunikation…


Via Terminal mit dem Raspberry Pi verbinden

Habt Ihr iTerm auf Mac oder PuTTY auf Windows installiert?

Mit dem Raspi verbinden

Startet iTerm oder PuTTY und gebt dort folgendes, zu Eurem Raspi passendes ein:

ssh pi@fk12pi-a.local
ssh pi@fk12pi-b.local
ssh pi@fk12pi-c.local

Schaut auf der Rückseite Eures Raspis nach – dort steht der Name (fk12pi-X.local) sowie das dazugehörige Passwort!

Passwort-Eingabe

Wenn Ihr dazu aufgefordert werdet, gebt das Passwort ein und drückt dann die ENTER/RETURN-Taste.

Achtung: Ihr bekommt im Terminal kein Feedback bei der Passwort-Eingabe!

Erfolgreich verbunden

Nach erfolgreichem Verbinden, sollte Eurer Terminal-Fenster ungefähr so aussehen…


Via VNC mit dem Raspberry Pi verbinden

Mit dem VNC Viewer kann man sich mit dem Raspberry Pi so verbinden, dass der „Desktop“ des Gerätes auf dem eigenen Monitor angezeigt wird. Das macht das Bedienen des Raspberry Pi sehr einfach!

VNC Server starten

Um den Server zu starten, müsst Ihr auf Eurem Mac/Windows via SSH mit dem Raspi verbunden sein (siehe vorherigen Slide). Gebt dann im Terminal folgendes ein:

vncserver -geometry 1440x900

Damit legt Ihr fest, dass der „Desktop“ des Raspis mit einer Breite von 1440px und einer Höhe von 900px dargestellt wird. Wenn Ihr eine andere Größe wollt, könnt Ihr das anpassen:

vncserver -geometry 1024x768

VNC Viewer

Habt Ihr den VNC-Viewer auf Euren Rechnern installiert? Auch der ist kostenlos…

Startet den VNC Viewer und gebt dort den Namen Eures Raspis folgendermaßen ein:

fk12pi-a:1
fk12pi-b:1
fk12pi-c:1
…

Achtet darauf, dass die Eingabe mit ":1" endet!

Raspi Desktop

Hat alles geklappt, solltet Ihr im VNC-Fenster den Desktop Eures Raspis sehen:


Der Raspberry Pi Desktop

Darstellung und Bedienung sehr ähnlich wie Mac oder PC…

Probiert mal ein paar Sachen aus!

Im Menü ist z.B. die Arduino-Entwicklungs-Umgebung, mit der Ihr ja schon am Mac oder PC gearbeitet habt!


Das Terminal

Das Terminal-Icon befindet sich links oben in der Menüleiste

Terminal-Befehle

probiert diese doch mal aus – auf Groß- und Kleinschreibung achten:

wo befinde ich mich gerade?

pwd

was ist die IP-Adresse des Raspi?

hostname -I

zeige mir den Inhalt des aktuellen Ordner an

ls

sortiert den Inhalt des aktuellen Ordners anzeigen

ls -l

Inhalt eines anderen Ordners anzeigen

ls -l /var/www/html

Baumansicht des aktuellen Ordners

tree

Baumansicht eines anderen Ordners, nur 2 Level tief

tree -n 2 /var/www/html

In einen anderen Ordner wechseln

cd Pictures/Demo-Fotos/

In eine Ebene höher wechseln

cd ../

In zwei Ebenen höher wechseln

cd ../../

In den obersten Ordner wechseln

cd /

In den Home-Ordner von „pi“ wechseln (identisch mit „cd /home/pi/“)

cd ~

# oder noch kürzer
cd

Terminal: Programm starten

„ncal -y 1997“ Anzeige des Jahres 1997

Terminal Kalender

Man kann sich direkt im Terminal einen Kalender anzeigen lassen – mit unterschiedlichen Ausgaben

Datum und Uhrzeit anzeigen lassen

date

aktueller Monat, heutiger Tag gehighlightet

ncal

aktueller Monat, heutiger Tag NICHT gehighlightet

ncal -h

Juni diesen Jahres

ncal -m 6

vorherigen, diesen und nächsten Monat

ncal -3

ganzes Jahr 1945 mit Angabe der Kalenderwochen

ncal -w -y 1945

Ausgabe der Hilfeseite zu "ncal"

man ncal

Terminal: Copy, Move und Delete

Erzeugen, kopieren, verschieben und löschen von Dateien und Ordnern…

Bitte führt die Sachen in der hier gezeigten Reihenfolge aus – sonst kann es sein, dass nicht alles funktioniert!

In den Ordner „Documents“ wechseln

cd = change directory

cd Documents

Datei "liesMich.txt" erzeugen

nano ist ein Texteditor, der praktisch auf allen Linux-Systemen installiert ist

nano liesMich.txt

Tragt dort Euren eigenen Namen ein und sichert die Datei – beachtet die Anmerkungen auf dem Screenshot!

Inhalt von "liesMich.txt" direkt anzeigen lassen

more liesMich.txt

Ordner "Test" erzeugen und direkt dort hineinwechseln

mkdir = make directory

mkdir Test && cd Test

mit && könnt Ihr mehrere Befehle hintereinander ausführen…

den Ordner "Test" wieder verlassen

cd ../

Datei „liesMich.txt“ in Ordner Test kopieren

cp = copy

cp liesMich.txt Test

Wenn Ihr die Datei nicht kopieren sondern verschieben wollt, müsst Ihr folgende eingeben:
mv = move

mv liesMich.txt Test

Ordnerstruktur mit "tree" anzeigen lassen

tree = Anzeigen einer "Baumstruktur"

tree

Datei „liesMich.txt“ im Ordner Test löschen

rm = remove

rm Test/liesMich.txt

Datei „liesMich.txt“ in Ordner Test verschieben

mv liesMich.txt Test

Auf die oberste Ebene ("home") des Users "pi" wechseln

cd

Datei „liesMich.txt“ aus dem Ordner Test an die Stelle verschieben, an der man sich gerade befindet

beachtet den Punkt "." am Ende, dieser besagt, dass die gewünschte Datei an die Stelle verschoben werden soll, an der man sich gerade befindet!

mv Documents/Test/liesMich.txt .

Ordner "Test" löschen

rm -r = Ordner löschen, ohne "-r" kann ich nur Dateien löschen

rm -r Documents/Test/

Terminal: Viele Dateien gleichzeitig kopieren

Durch verwenden von "*" (Wildcard) kann man sehr viele Dateien gleichzeitig auswählen und z.B. kopieren

in den gewünschten Ordner wechseln

cd Pictures/Shots/

Inhalt anzeigen lassen – ganz schön viele Bilder

ls

Ordner "Temp" auf gleicher Ebene wie "Shots" erstellen

mkdir ../Temp

alle Bilder aus dem Ordner, in dem man sich gerade befindet, in den Ordner "Temp" kopieren

* heißt alle, *.jpg würde nur die Dateien kopieren, die die Dateiendung ".jpg" haben

cp * ../Temp

Inhalt des Ordners "Temp" anzeigen lassen

ls ../Temp

eine Ebene höher gehen

cd ../

Versuchen, den Ordner "Temp" zu löschen

rm Temp

geht nicht, ist ein Sicherheits-Feature, damit man nicht versehentlich ganze Ordner löscht!

um einen Ordner zu löschen, muss man "rm -r" eingeben

VORSICHT: Da kommt dann keine Warnung/Abfrage mehr…

rm -r Temp

Terminal: Texte bearbeiten

Das Terminal bietet Möglichkeiten, um mehrere Texte in eine Textdatei zusammenzufassen oder aus einer Textdatei gezielt Zeilen herauszukopieren…

Vieles davon brauchen wir später, wenn wir Sensor-Daten auswerten und z.B. mit p5.js visualisieren möchten!

Ordner "Demo-CSV" aus Ordner "Austausch" in den Ordner "Documents kopieren

beachtet auch hier das "-r", weil es sich ja um einen Ordner handelt!

cp -r Austausch/Demo-CSV Documents

in richtigen Ordner wechseln

cd Documents/Demo-CSV/

Dateien anzeigen

ls -l = auflisten untereinander mit mehr Details zu den jeweiligen Dateien

ls -l

Inhalt der Datei anzeigen (mit "q" beenden!)

more 2019_03_08_sensor_data.csv

oder

less 2019_03_08_sensor_data.csv

ersten 5 Zeilen anzeigen lassen

head -n 5 2019_03_08_sensor_data.csv

letzten 8 Zeilen anzeigen lassen

tail -n 8 2019_03_08_sensor_data.csv

mehrere Text-Dateien in eine neue zusammenfügen

cat 2019_03_08_sensor_data.csv 2019_03_09_sensor_data.csv > sensor_data.csv

noch eine weitere Datei bei der neuen hinzufügen

# ">>" fügt die neue Datei hinzu
# ">" würde die alten Inhalte überschreiben
cat 2019_03_10_sensor_data.csv >> sensor_data.csv

letzte 10 Zeilen einer Datei in eine neue Datei übertragen

tail -n 10 2019_03_08_sensor_data.csv > test.txt

CSV-Dateien

# Ausgabe eines Temperatur- und Feuchtigkeits-Sensors (Arduino)
2019-03-10,00:00:07,Temp,20.3,Humidity,52.6
2019-03-10,00:15:09,Temp,20.2,Humidity,52.4
2019-03-10,00:30:06,Temp,20.2,Humidity,52.4
2019-03-10,00:45:06,Temp,20.1,Humidity,52.3
2019-03-10,01:00:06,Temp,20.1,Humidity,52.3

CSV-Datei (Komma separierte Werte) werden häufig verwendet, um tabellarische Datenwerte zu speichern. Mit p5.js lassen sich diese wiederum sehr gut als Graphen darstellen – mehr dazu später!


Eigenes Wlan-Netz hinzufügen

Wenn Ihr z.B. zu Hause mit den Raspis weiter experimentieren möchtet, müssen sich die Geräte auch dort in Euer Wlan-Netz (oder Euren Handy-Hotspot) einwählen können…

Dazu müsst Ihr in der folgenden Textdatei die Zugangsdaten einfügen – es können auch mehrere Wlan-Netze sein…

Datei "wpa_supplicant.conf" im Editor "Nano" öffnen:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 

Beachtet das "sudo" – damit könnt Ihr auch "kritische" Dateien bearbeiten, müsst aber als Vorsichtsmaßnahme das Passwort eingeben, was auf der Rückseite der Raspis angegeben ist…

Eigene Wlan-Daten einfügen

Die existierenden Angaben NICHT löschen sondern Eure Sachen unterhalb der anderen Netze eintragen!

# Wlan bei Euch zuhause
network={
    ssid="Name Eures Wlan"
    psk="Passwort Eures Wlans"
    key_mgmt=WPA-PSK
}

# Handy-Hotspot (falls gewünscht)
network={
    ssid="Name Eures Hotspots"
    psk="Passwort Eures Hotspots"
    key_mgmt=WPA-PSK
}

Anschliessend wieder ctrl o zum Speichern und ctrl x zum Beenden von Nano eingeben.

Wlan zuerst starten

Schaut zuhause, dass das jeweilige Wlan angeschaltet und aktiv ist, bevor Ihr den Raspi anschaltet!


Raspberry Pi ausschalten

Achtung: Nicht einfach den Stecker des Raspberry Pi ziehen! Die Chance ist relativ hoch, dass Ihr damit das Betriebssystem kaputt macht…

Via Graphical User Interface (GUI) herunterfahren

Das geht auch, wenn Ihr via VNC verbunden seid, Ihr müsst dann aber noch das Passwort eingeben, das hinten auf dem Raspi steht!

Via Terminal herunterfahren

dafür müsst Ihr natürlich via SSH mit dem Raspi verbunden sein – sonst schaltet Ihr so Euren Mac/PC aus…

Achtung!

Erst nachdem die grüne LED auf dem Raspi 8-mal geblinkt hat, kann man das Gerät vom Strom trennen

sofort herunterfahren

sudo shutdown now

in 5 Minuten herunterfahren

sudo shutdown -h 5

in 2 Minuten neustarten

sudo shutdown -r 2

sofort neustarten

sudo reboot

SSH-Terminal

Alle Sachen, die Ihr gerade via Terminal auf dem Raspi-Desktop ausgeführt habt, lassen sich auch direkt via iTerm oder PuTTY machen – dafür ist die Verbindung via VNC nicht nötig!

Übrigens

Viele Befehle, die Ihr gerade auf dem Raspi ausgeführt habt, lassen sich auch direkt am Mac/PC nutzen, um dort z.B. Dateien zu erzeugen, kopieren, verschieben…


Conquer the Command Line

Sometimes only words will do. Graphic user interfaces (GUIs) were a great advance, creating an easy route into computer use for many non-technical users. For complex tasks, though, the interface can become a limitation: blocking off choices, and leaving a circuitous route even for only moderately complicated jobs.
If you’re not comfortable when faced with the $ prompt, then don’t panic! In this fully updated book, we’ll quickly make you feel at home, and able to find your way around the terminal on the Pi, or any other GNU/Linux computer: getting things done, and unlocking the power of the command line.


The Front-End Developer's Guide to the Terminal

If we focus on the most-important critical fundamentals, we should be able to become comfortable with the command line in a remarkably short amount of time.

…ein sehr nett gemachtes Tutorial…

Josh Comeau hat auch viele andere, interessante Tutorials rund ums Front-End!


Raspberry Pi Sense HAT

https://www.raspberrypi.org/products/sense-hat/

The Sense HAT is an add-on board for Raspberry Pi, made especially for the Astro Pi mission – it launched to the International Space Station in December 2015 – and is now available to buy.

The Sense HAT has an 8×8 RGB LED matrix, a five-button joystick and includes the following sensors:

  • Gyroscope
  • Accelerometer
  • Magnetometer
  • Temperature
  • Barometric pressure
  • Humidity

Online-Tutorial zum Sense HAT

Sense HAT: Gettings started

In this project, you will learn how to control the Sense HAT’s LED matrix and collect sensor data, and you will combine these ideas in a number of small projects.


Essentials Sense HAT

https://www.raspberrypi.org/magpi-issues/Essentials_SenseHAT_v1.pdf

In this book, we aim to help you figure out exactly what the Sense HAT is and how you could use it to make your projects and dreams a reality. It’s an incredibly versatile and flexible bit of kit with plenty of very obvious uses, along with many many less-obvious ones, that you’ll love to make and share.


Sense HAT mit Raspberry Pi verbinden

Achtung: Der Raspberry Pi muss vor der Montage des Sense HAT ausgeschaltet und vom Stromnetz getrennt sein!

Dann vorsichtig das HAT auf die GPIO-Pins aufdrücken…


Python

Python wurde mit dem Ziel größter Einfachheit und Übersichtlichkeit entworfen. Dies wird vor allem durch zwei Maßnahmen erreicht. Zum einen kommt die Sprache mit relativ wenigen Schlüsselwörtern aus. Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.

Python benutzt Einrückungen als Strukturierungselement. In den meisten anderen Programmiersprachen werden Blöcke durch Klammern oder Schlüsselwörter markiert, während unterschiedlich große Leerräume außerhalb von Zeichenketten keine spezielle Semantik tragen.

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# https://projects.raspberrypi.org/en/projects/getting-started-with-the-sense-hat/10

from sense_hat import SenseHat
from time import sleep
sense = SenseHat()

sense.clear()
while True:
    for event in sense.stick.get_events():
        # Check if the joystick was pressed
        if event.action == "pressed":

            # Check which direction
            if event.direction == "up":
                sense.show_letter("U")    # Up arrow
                print("up")
            elif event.direction == "down":
                sense.show_letter("D")    # Down arrow
                print("down")
            elif event.direction == "left":
                sense.show_letter("L")    # Left arrow
                print("left")
            elif event.direction == "right":
                sense.show_letter("R")    # Right arrow
                print("right")
            elif event.direction == "middle":
                sense.show_letter("M")    # Enter key
            print("middle")

            # Wait a while and then clear the screen
            sleep(0.5)
            sense.clear()

Python Editor „mu“

Verwendet zum Programmieren des Sense HAT den Editor „mu“ – auf den Raspies installiert…

Sense HAT 1. Beispiel

  1. Legt den Ordner SenseHat bei /home/pi/Documents/ an (Ihr könnt dies entweder über das Terminal oder das GUI des Raspis machen…)
  2. Fügt folgenden Code bei mu ein, speichert die Datei unter einfach_text.py im Ordner SenseHat
  3. drückt auf den Run-Button – auf dem Sense HAT sollte dann der Text „durchtickern“…

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 22
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message("Hallo Welt")

Editor

Start via Terminal

Ihr könnt das Programm auch via Terminal starten – dafür müsst Ihr aber zuerst in den Ordner SenseHat wechseln…

$ cd /home/pi/Documents/SenseHat

jetzt das Programm starten:

$ python einfach_text.py

Zum „Abspielen“ des Python-Codes braucht Ihr also den Editor mu nicht…


Sense HAT: Farbiger, scrollender Text

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 23
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message(
    "Hallo Welt",
    scroll_speed=0.05, # umso kleiner der Wert, umso schneller
    text_colour=[255,255,0],
    back_colour=[0,0,255]
)

Speichert den Code unter „farbiger_text.py“ im Ordner „SenseHat“


Sense HAT: Pixel explizit ansprechen

ACHTUNG: Wie bei fast allen Programmiersprachen ist 0 (Null) die erste Zahl! Somit wird die erste Reihe und die erste Spalte jeweils somit mit 0 bezeichnet…

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from sense_hat import SenseHat
sense = SenseHat()

# erst mal alles auf dem Screen löschen
sense.clear()

# Achtung: der allererste Pixel ist auf 0,0!
sense.set_pixel(0, 2, [0, 0, 255]) # blauer Pixel, Spalte 0, Reihe 2
sense.set_pixel(7, 4, [255, 0, 0]) # roter Pixel, Spalte 7, Reihe 4

Speichert den Code unter „zwei_pixel.py“ im Ordner „SenseHat“

Übung

Wie könnt Ihr damit eine blaue, diagonale Linie vom Punkt (0, 0) quer über das Display zum Punkt (7, 7) darstellen?


Sense HAT: Image Matrix

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 26

from sense_hat import SenseHat
sense = SenseHat()

# Farben festlegen
r = [255, 0, 0]
o = [255, 127, 0]
y = [255, 255, 0]
g = [0, 255, 0]
b = [0, 0, 255]
i = [75, 0, 130]
v = [159, 0, 255]
e = [0, 0, 0] # keine Pixel an

# Aufbau der Pixel-Matrix
# jede Zeile hier entspricht eine Zeile auf dem Display (jeweils 8 Pixel)
bild = [
e,e,e,e,e,e,e,e,
e,e,e,r,r,e,e,e,
e,r,r,o,o,r,r,e,
r,o,o,y,y,o,o,r,
o,y,y,g,g,y,y,o,
y,g,g,b,b,g,g,y,
b,b,b,i,i,b,b,b,
b,i,i,e,e,i,i,b
]

sense.set_pixels(bild)

# wie wird das Bild gedreht? Nur 90°-Schritte erlaubt!
sense.set_rotation(180)

Speichert den Code unter „image_matrix.py“ im Ordner „SenseHat“

Übung

Stellt mit dieser Möglichkeit die Schweizer Flagge (Weißes Kreuz auf rotem Hintergrund) dar!


Sense HAT: Rotierendes Bild

Das Rotieren läuft hier nur zweimal ab, dann bleibt das Bild stehen

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 26

from sense_hat import SenseHat
import time
sense = SenseHat()

# Farben festlegen
r = [255, 0, 0]
o = [255, 127, 0]
y = [255, 255, 0]
g = [0, 255, 0]
b = [0, 0, 255]
i = [75, 0, 130]
v = [159, 0, 255]
e = [0, 0, 0] # keine Pixel an

# Aufbau der Pixel-Matrix
# jede Zeile hier entspricht eine Zeile auf dem Display
bild = [
e,e,e,e,e,e,e,e,
e,e,e,r,r,e,e,e,
e,r,r,o,o,r,r,e,
r,o,o,y,y,o,o,r,
o,y,y,g,g,y,y,o,
y,g,g,b,b,g,g,y,
b,b,b,i,i,b,b,b,
b,i,i,e,e,i,i,b
]

sense.set_pixels(bild)

# wie wird das Bild gedreht? Nur 90°-Schritte erlaubt!
angles = [0, 90, 180, 270, 0, 90, 180, 270]
for r in angles:
    sense.set_rotation(r)
    time.sleep(0.5)

Speichert den Code unter „image_rotate.py“ im Ordner „SenseHat“


Sense HAT: Kontinuierlich rotierendes Bild

Das Rotieren läuft hier endlos ab…

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 26

from sense_hat import SenseHat
import time
sense = SenseHat()

rota = 0;

# Farben festlegen
r = [255, 0, 0]
o = [255, 127, 0]
y = [255, 255, 0]
g = [0, 255, 0]
b = [0, 0, 255]
i = [75, 0, 130]
v = [159, 0, 255]
e = [0, 0, 0] # keine Pixel an

# Aufbau der Pixel-Matrix
# jede Zeile hier entspricht eine Zeile auf dem Display
bild = [
e,e,e,e,e,e,e,e,
e,e,e,r,r,e,e,e,
e,r,r,o,o,r,r,e,
r,o,o,y,y,o,o,r,
o,y,y,g,g,y,y,o,
y,g,g,b,b,g,g,y,
b,b,b,i,i,b,b,b,
b,i,i,e,e,i,i,b
]

sense.set_pixels(bild)

while True:
    # Werte dürfen nur 0, 90, 180, 270 sein!
    if rota <= 180:
        rota = rota + 90
    else:
        rota = 0;

    # Ausgabe in der Konsole
    print("rota=%s" % (rota))

    sense.set_rotation(rota)

    # hier festlegen, wielange zwischen dem Rotieren pausiert wird
    time.sleep(0.8)

Speichert den Code unter „image_rotate_continuierlich.py“ im Ordner „SenseHat“


Sense HAT: Image Flip

Das Bild wird alle 0,5 sek gespiegelt

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 27

from sense_hat import SenseHat
import time

sense = SenseHat()

w = [150, 150, 150]
b = [0, 0, 255]
e = [0, 0, 0]
r = [255, 0, 0]

bild = [
r,r,r,e,e,e,e,w,
e,e,e,e,e,e,e,e,
w,w,w,e,e,w,w,w,
w,w,b,e,e,w,w,b,
w,w,b,e,e,w,w,b,
w,w,w,e,e,w,w,w,
e,e,e,e,e,e,e,e,
w,e,e,e,e,r,r,r
]

sense.set_pixels(bild)

while True:
    time.sleep(.5) # Wechselgeschwindigkeit hier festlegen!
    sense.flip_h()

Speichert den Code unter „image_flip.py“ im Ordner „SenseHat“


Sense HAT: PNG darstellen

Achtung

  • Das Bild darf nur 8x8 Pixel groß sein und muss im PNG-Format gesichert sein
  • Die Pfadangabe muss absolut sein, z.B. "/home/pi/Documents/SenseHAT/14_senseHat_karo.png"

PNG in Original-Größe

PNG 1000% Darstellung

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from sense_hat import SenseHat

sense = SenseHat()

# absoluter Pfad notwendig, sonst ging es nicht!
sense.load_image("/home/pi/Documents/SenseHat/14_senseHat_karo.png")

# sense.set_rotation(90)

Speichert den Code unter „png_laden.py“ im Ordner „SenseHat“


Sense HAT: Temperatur, Luftdruck und Feuchtigkeit anzeigen

Achtung: Der Temperatur-Wert entspricht nicht der tatsächlichen Raumtemperatur, weil sich der Sensor direkt über dem Prozessor des Raspis befindet – und dieser ziemlich warm wird…

Zum Abfragen der Chip-Temperatur könnt Ihr übrigens folgendes im Terminal eingeben:

vcgencmd measure_temp

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 29

from sense_hat import SenseHat
sense = SenseHat()

while True:
    t = sense.get_temperature()
    p = sense.get_pressure()
    h = sense.get_humidity()

    # Rundungswerte: Wie genau werden die Werte angezeigt?
    t = round(t, 2)
    p = round(p, 2)
    h = round(h, 2)

    # der Text wird in nächster Zeile zusammengebaut
    msg = "T: %s, P: %s, H: %s" % (t,p,h)

    # Ausgabe der Werte zusätzlich in der Konsole
    print(msg)

    sense.show_message(
        msg,
        scroll_speed=0.05,
        text_colour=[255,255,255],
        back_colour=[0,0,255]
    )

Speichert den Code unter „temperature_pressure_humidity.py“ im Ordner „SenseHat“


Sense HAT: Bewegung entdecken

Essentials_SenseHAT, Seite 30

mu-Konsole

Achtung: Die Werte werden bei diesem Sketch nur in der Konsole (von mu) angezeigt…

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 30

from sense_hat import SenseHat
sense = SenseHat()

while True:
    pitch, roll, yaw = sense.get_orientation().values()
    # gibt die Werte direkt im Editor aus, nicht auf SenseHat!
    print("pitch=%s, roll=%s, yaw=%s" % (pitch,yaw,roll))

Speichert den Code unter „bewegung_entdecken.py“ im Ordner „SenseHat“


Sense HAT: Display rotieren

je nachdem, wie der Raspi gehalten wird, passt sich die Darstellung des Buchstaben „J“ an…

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 32

from sense_hat import SenseHat

sense = SenseHat()

sense.show_letter("J")

while True:
    x, y, z = sense.get_accelerometer_raw().values()

    x = round(x, 0)
    y = round(y, 0)

    if x == -1:
        sense.set_rotation(180)
    elif y == 1:
        sense.set_rotation(90)
    elif y == -1:
        sense.set_rotation(270)
    else:
        sense.set_rotation(0)

    # print("x=%s, y=%s" % (x, y))

Speichert den Code unter „rotation_letter.py“ im Ordner „SenseHat“


Sense HAT: Bewegungsmelder

Sense HAT reagiert sehr empfindlich auf Erschütterungen – versucht mal, den Raspi zu bewegen, solange der folgende Sketch läuft:

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Essential_SenseHat, Seite 33

from sense_hat import SenseHat
sense = SenseHat()

# Farben festlegen
r = [255, 0, 0]
w = [255,255,255]
e = [0, 0, 0] # keine Pixel an


# Dieses "Bild" wird dargestellt, wenn eine Erschütterung festgestellt wird
achtung = [
e,e,e,r,r,e,e,e,
e,r,r,w,w,r,r,e,
r,w,w,e,e,w,w,r,
r,w,w,e,e,w,w,r,
r,w,w,w,w,w,w,r,
r,w,w,e,e,w,w,r,
e,r,r,w,w,r,r,e,
e,e,e,r,r,e,e,e,
]

while True:
    x, y, z = sense.get_accelerometer_raw().values()

    x = abs(x)
    y = abs(y)
    z = abs(z)

    if x > 1 or y > 1 or z > 1:
        sense.set_pixels(achtung)
    else:
        sense.clear()

Speichert den Code unter „schuettel_anzeige_image.py“ im Ordner „SenseHat“


Sense HAT: Joystick-Input

Der kleine Joystick auf dem Sense HAT kann nach links/rechts, oben/unten bewegt und auch gedrückt werden. Der Sketch gibt jeweils den dazu passenden Buchstaben aus:

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# https://projects.raspberrypi.org/en/projects/getting-started-with-the-sense-hat/10

from sense_hat import SenseHat
from time import sleep
sense = SenseHat()

sense.clear()
while True:
    for event in sense.stick.get_events():
        # Check if the joystick was pressed
        if event.action == "pressed":

            # Check which direction
            if event.direction == "up":
                sense.show_letter("U")    # Up arrow
                print("up")
            elif event.direction == "down":
                sense.show_letter("D")    # Down arrow
                print("down")
            elif event.direction == "left":
                sense.show_letter("L")    # Left arrow
                print("left")
            elif event.direction == "right":
                sense.show_letter("R")    # Right arrow
                print("right")
            elif event.direction == "middle":
                sense.show_letter("M")    # Enter key
            print("middle")

            # Wait a while and then clear the screen
            sleep(0.5)
            sense.clear()

Speichert den Code unter „joystick_einfach.py“ im Ordner „SenseHat“


Sense HAT: Sensorwerte via Joystick anzeigen

Je nachdem in welche Richtung man den Joystick bewegt, bekommt man andere Sensordaten angezeigt:

  • nach oben: Temperatur
  • nach unten: Luftdruck
  • Mitte: Feuchtigkeit

Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# https://projects.raspberrypi.org/en/projects/getting-started-with-the-sense-hat/10

from sense_hat import SenseHat
from time import sleep
sense = SenseHat()

# Farben festlegen
s = [0, 0, 0]           # schwarz
w = [255, 255, 255]     # weiss
r = [255, 0, 0]         # rot
g = [0, 255, 0]         # grün
b = [0, 0, 255]         # blau
o = [255, 150, 30]      # orange

sp = 0.05               # Scroll-Geschwindigkeit

sense.clear()

# Anfangsmeldung in der Konsole, was man abfragen kann
# \n erzwingt eine neue Zeile
print("Cursor rauf = Temperatur\nCursor runter = Luftdruck\nCursor mitte = Feuchtigkeit")

while True:

  # Sensordaten einlesen
  t = sense.get_temperature()
  p = sense.get_pressure()
  h = sense.get_humidity()

  # Rundungswerte
  t = round(t, 1)
  p = round(p, 1)
  h = round(h, 1)

  for event in sense.stick.get_events():
    # Check if the joystick was pressed
    if event.action == "pressed":

      # Check which direction
      if event.direction == "up":
        # Up arrow = Temperatur zeigen
        print("Temperatur: %s° Grad" % (t))
        sense.show_message(
            "T: %s" % (t),
            scroll_speed=sp,
            text_colour=w,
            back_colour=o
        )

      elif event.direction == "down":
        # Down arrow = Pressure
        print("Luftdruck: %s hPa" % (p))
        sense.show_message(
            "P: %s" % (p),
            scroll_speed=sp,
            text_colour=w,
            back_colour=g
        )

      elif event.direction == "middle":
        # Enter key = Humidity
        print("Luftfeuchtigkeit: %s Prozent" % (h))
        sense.show_message(
            "H: %s" % (h),
            scroll_speed=sp,
            text_colour=s,
            back_colour=w
        )

      # Wait a while and then clear the screen
      sleep(0.2)
      sense.clear()

Speichert den Code unter „joystick_sensorDaten.py“ im Ordner „SenseHat“


Danke

Alle Scripte durchsuchen

Weitere Vorträge: