Raspberry Pi 3 und 4
Version 1.06, 21.02.2022Diese detaillierte Beschreibung zu Raspberry Pi Grundlagen und Programmierung eignet sich für Anfänger. Um die Anleitung übersichtlicher zu gestalten wurde diese in einzelne Abschnitte unterteilt. Ein Klick auf vor dem Namen zeigt den zum Abschnitt gehörigen Text. Ein aufgeklappter Abschnitt kann dann über wieder auf eine Zeile redzuiert werden. Ein Klick auf zeigt alle Abschnitte, reduziert alle Abschnitte auf die Überschriften.
Einleitung
Einleitung
Der Raspberry Pi bietet vielfältige Einsatzmöglichkeiten und eignet sich hervorragend zum Experimentieren. Ich habe mir den Raspberry Pi beschafft, um Funkmodule auf 433 MHz Basis auslesen zu können. Bis zur Realisierung dieses Zieles müssen allerdings einige Hürden gemeistert werden, die ich in diesem Artikel an den Beispielen LED Steuerung und SMS Versand/Empfang beschreibe.
Hinweise:
Die Platinengröße des Raspberry Pi beträgt 56x85 mm
Was wird benötigt?
Der Raspberry Pi bietet vielfältige Einsatzmöglichkeiten und eignet sich hervorragend zum Experimentieren. Ich habe mir den Raspberry Pi beschafft, um Funkmodule auf 433 MHz Basis auslesen zu können. Bis zur Realisierung dieses Zieles müssen allerdings einige Hürden gemeistert werden, die ich in diesem Artikel an den Beispielen LED Steuerung und SMS Versand/Empfang beschreibe.
Hinweise:
- Bezugsquellen gibt es reichlich im Internet. Vergleichen lohnt sich.
- Diese Dokumentation bezieht sich auf das Raspberry Pi Modell 3 B bzw. 4 B.
Das Modell 3 B+ kostete im Jahr 2018 noch ca. 34 Euro, aktuell ab 40 Euro (soweit noch verfügbar!). Das Modell 4 B kostet mit 2 GB Speicher ab 55 Euro (Modelle mit 4 GB oder 8 GB sind ebenfalls verfügbar) - Wikipedia Eintrag mit vielen Details
- Raspberry Pi (in Englisch)
- Raspberry Pi Foundation (in Englisch)
- Deutsches Raspberry Pi Forum
Die Platinengröße des Raspberry Pi beträgt 56x85 mm
Was wird benötigt?
- Raspberry Pi 3 B oder 4 B. Grundsätzlich können auch die älteren eingesetzt werden.
- Geeignetes Netzteil (Anschluss über Micro USB Kabel für Modell 3 B und USB-C für 4 B).
Beispiel: Rydges SpeedPower High-Quality PC Netzteil 5V 2,5A / 2500 mAh (ca. 16 Euro) - Monitor mit HDMI Anschluss
- HDMI Kabel (Modell 3 B), micro HDMI auf HDMI Kabel für 4 B (oder Adapter)
- microSD Karte mit mindestens 4 GB Kapazität (ohne Desktop). Beispiel: SanDisk Ultra 16GB microSDHC Speicherkarte mit Adapter (ab ca. 10 Euro, Vorsicht vor billigen Fälschungen!).
- USB Maus (ohne Desktop nicht zwingend erforderlich)
- USB Tastatur
- Breadboard - eine Steckplatine für Versuchsaufbauten (Details unten)
- LED (Farbe beliebig)
- Widerstand
- Steckbrücken/Drahtbrücken, auch Jumper Wire genannt. Für diesen Versuchsaufbau werden lediglich zwei Steckbrücken männlich/weiblich (male/female) benötigt. Eine Länge von 10 cm ist ausreichend. Möchte man tiefer einsteigen empfiehlt sich ein Set von Drahtbrücken (male/male, female/female, male/female)
- Huawei Surf-Stick E3372h (ca. 40 Euro) mit beliebiger SIM Karte
Installation Betriebssystem
Installation Betriebssystem
Vor der erstmaligen Inbetriebnahme des Raspberry Pi wird noch ein geeignetes Betriebssystem benötigt. Auch wenn es inzwischen möglich ist Windows 10 zu installieren, bietet sich eine optimierte Linux Version an. Es gibt viele Quellen für den Download im Internet. Empfehlen kann ich den Download von der raspberrypi.com Seite.
Mit dem Raspberry Pi Imager (knapp 19 MByte, Version 1.7.1 Stand 2/2022) ist es sehr einfach eine bootfähige SD Karte für den Raspberry Pi zu erstellen. microSD Karte am PC einstecken, Raspberry Pi Imager von der Seite raspberrypi.com Seite herunterladen, installieren und ausführen:
Zuerst das Betriebssystem (OS = Operating System) auswählen:
Empfohlen wird ein Betriebssystem mit Desktop, also einer grafischen Oberfläche. Für meine Zwecke (Programmierung, Steuerung, ...) reicht ein OS ohne Desktop. Daher die Wahl Raspberry Pi OS (other)
... und dann Raspberry Pi OS Lite (32-bit)
Eine geeignete microSD Karte (hier eine 8 GB Karte) in das Lesegerät einlegen und diese Karte auswählen:
Auf SCHREIBEN klicken:
... und die Sicherheitsfrage mit JA beantworten:
Das Betriebssystem wird auf die microSD Karte kopiert und anschließend die Installation automatisch verifiziert. Ist der Vorgang abgeschlossen, microSD Karte entnehmen und in den Raspberry Pi einsetzen. Der microSD Kartenslot befindet sich auf der Unterseite:
Vor der erstmaligen Inbetriebnahme des Raspberry Pi wird noch ein geeignetes Betriebssystem benötigt. Auch wenn es inzwischen möglich ist Windows 10 zu installieren, bietet sich eine optimierte Linux Version an. Es gibt viele Quellen für den Download im Internet. Empfehlen kann ich den Download von der raspberrypi.com Seite.
Mit dem Raspberry Pi Imager (knapp 19 MByte, Version 1.7.1 Stand 2/2022) ist es sehr einfach eine bootfähige SD Karte für den Raspberry Pi zu erstellen. microSD Karte am PC einstecken, Raspberry Pi Imager von der Seite raspberrypi.com Seite herunterladen, installieren und ausführen:
Zuerst das Betriebssystem (OS = Operating System) auswählen:
Empfohlen wird ein Betriebssystem mit Desktop, also einer grafischen Oberfläche. Für meine Zwecke (Programmierung, Steuerung, ...) reicht ein OS ohne Desktop. Daher die Wahl Raspberry Pi OS (other)
... und dann Raspberry Pi OS Lite (32-bit)
Eine geeignete microSD Karte (hier eine 8 GB Karte) in das Lesegerät einlegen und diese Karte auswählen:
Auf SCHREIBEN klicken:
... und die Sicherheitsfrage mit JA beantworten:
Das Betriebssystem wird auf die microSD Karte kopiert und anschließend die Installation automatisch verifiziert. Ist der Vorgang abgeschlossen, microSD Karte entnehmen und in den Raspberry Pi einsetzen. Der microSD Kartenslot befindet sich auf der Unterseite:
Anschlüsse Raspberry Pi Modelle 3 und 4
Anschlüsse Raspberry Pi Modelle 3 und 4
Links das Raspberry Pi Modell 3 B, rechts das Modell 4 B.
Hauptunterschiede:
Links das Raspberry Pi Modell 3 B, rechts das Modell 4 B.
Hauptunterschiede:
- 5V Anschluss: Micro USB (Modell 3) und USB-C (4)
- Monitor: 1 x HDMI (3), 2 x micro HDMI (4)
- 4 x USB (3), 2 x USB und 2 x USB 3.0 (4)
Erste Inbetriebnahme
Erste Inbetriebnahme
Für die erste Inbetriebnahme müssen an den Raspberry Pi ein Monitor, eine Tastatur und eine 5V Stromversorgung angeschlossen werden, da ein Terminal Zugriff über LAN und SSH Client aus Sicherheitsgründen gesperrt ist.
Der Raspberry Pi meldet sich mit:
Raspian GNU/Linux 11 raspberry pi tty 1
raspberrypi login:
Der Standard-Login beim Raspberry Pi erfolgt mit dem Benutzername pi und dem Passwort raspberry. Beides klein geschrieben (Linux unterscheidet Klein- und Großschreibung).
Wichtig:: wird an den Raspberry Pi eine Tastatur mit deutschem Layout angeschlossen, dann sind die Buchstaben z und y vertauscht. Als Passwort wird daher raspberrz eingegeben. Die Umstellung auf deutsches Layout erfolgt später.
Anschließend sollte sich das Betriebssystem mit der Eingabeaufforderung pi@raspberrypi:~ $ melden:
Für die erste Inbetriebnahme müssen an den Raspberry Pi ein Monitor, eine Tastatur und eine 5V Stromversorgung angeschlossen werden, da ein Terminal Zugriff über LAN und SSH Client aus Sicherheitsgründen gesperrt ist.
Der Raspberry Pi meldet sich mit:
raspberrypi login:
Der Standard-Login beim Raspberry Pi erfolgt mit dem Benutzername pi und dem Passwort raspberry. Beides klein geschrieben (Linux unterscheidet Klein- und Großschreibung).
Wichtig:: wird an den Raspberry Pi eine Tastatur mit deutschem Layout angeschlossen, dann sind die Buchstaben z und y vertauscht. Als Passwort wird daher raspberrz eingegeben. Die Umstellung auf deutsches Layout erfolgt später.
Anschließend sollte sich das Betriebssystem mit der Eingabeaufforderung pi@raspberrypi:~ $ melden:
SSH konfigurieren
SSH konfigurieren
Da ich den Zugriff über SSH bevorzuge, konfiguriere ich an dieser Stelle nur den SSH Server und führe alle weiteren Schritte mit dem Windows PC und dem SSH Client durch.
Für die Konfiguration von SSH und anderen Einstellungen steht das Tool raspi-config zur Verfügung.
Auch hier wieder aufpassen! Das deutsche Tastatur Layout ist noch nicht konfiguriert. Den Bindestrich erhält man mit der Taste ß.
sudo raspi-config
Hinweis: raspi-config benötigt root Berechtigung und wird daher mit sudo aufgerufen. Lässt man sudo weg, erscheint ein entsprechender Hinweis: "Script must be run as root. Try 'sudo raspi-config'"
Auswahl 3 Interface Options, dann I2 SSH und Yes (Would you like the SSH server to be enabled?)
Der SSH Server wird aktiviert und nach kurzer Zeit erscheint die Meldung "The SSH server is enabled".
Damit ein SSH Client auf dem PC genutzt werden kann, muss der Rasperry Pi mit dem LAN verbunden werden. Über DHCP "holt" sich der Raspberry PI automatisch eine IP Adresse. Diese IP Adresse benötigt man für den Zugriff. Am einfachsten findet man die IP Adresse über folgenden Befehl heraus:
ifconfig
eth0 entspricht dem Ethernet Port, also dem LAN Kabel Anschluss. Der Raspberry Pi verfügt auch über WLAN (siehe WLAN konfigurieren).
Ein beliebtes SSH Tool für den Windows PC ist PuTTY, das es auch als portable Version gibt. Suche im Internet nach "Download PUTTY". Nach Herunterladen, Installation (nicht bei portabler Version) und Start:
IP Adresse eingeben und auf Open klicken. Die SSH Verbindung zum Raspberry Pi wird aufgebaut.
Nach der Anmeldung ist der Zugriff auf den Raspberry Pi ohne angeschlossene Tastatur, Maus und Monitor möglich. Es werden lediglich die Stromversorgung und das LAN Kabel benötigt.
Da ich den Zugriff über SSH bevorzuge, konfiguriere ich an dieser Stelle nur den SSH Server und führe alle weiteren Schritte mit dem Windows PC und dem SSH Client durch.
Für die Konfiguration von SSH und anderen Einstellungen steht das Tool raspi-config zur Verfügung.
Auch hier wieder aufpassen! Das deutsche Tastatur Layout ist noch nicht konfiguriert. Den Bindestrich erhält man mit der Taste ß.
sudo raspi-config
Hinweis: raspi-config benötigt root Berechtigung und wird daher mit sudo aufgerufen. Lässt man sudo weg, erscheint ein entsprechender Hinweis: "Script must be run as root. Try 'sudo raspi-config'"
Auswahl 3 Interface Options, dann I2 SSH und Yes (Would you like the SSH server to be enabled?)
Der SSH Server wird aktiviert und nach kurzer Zeit erscheint die Meldung "The SSH server is enabled".
Damit ein SSH Client auf dem PC genutzt werden kann, muss der Rasperry Pi mit dem LAN verbunden werden. Über DHCP "holt" sich der Raspberry PI automatisch eine IP Adresse. Diese IP Adresse benötigt man für den Zugriff. Am einfachsten findet man die IP Adresse über folgenden Befehl heraus:
ifconfig
eth0 entspricht dem Ethernet Port, also dem LAN Kabel Anschluss. Der Raspberry Pi verfügt auch über WLAN (siehe WLAN konfigurieren).
Ein beliebtes SSH Tool für den Windows PC ist PuTTY, das es auch als portable Version gibt. Suche im Internet nach "Download PUTTY". Nach Herunterladen, Installation (nicht bei portabler Version) und Start:
IP Adresse eingeben und auf Open klicken. Die SSH Verbindung zum Raspberry Pi wird aufgebaut.
Nach der Anmeldung ist der Zugriff auf den Raspberry Pi ohne angeschlossene Tastatur, Maus und Monitor möglich. Es werden lediglich die Stromversorgung und das LAN Kabel benötigt.
Weitere Konfigurationen
Weitere Konfigurationen
Deutsches Tastatur Layout einstellen
sudo raspi-config
Select 5 Localisation Options, L3 Keyboard, Generic 105-key PC (intl.), Other, German und Auswahl spezieller Tasten oder bei Bedarf eine andere Tastatur wählen (sollte die Tastatur in der Liste aufgeführt werden)
Optional die Sprache ändern
Select 5 Localisation Options, L1 Locale, Auswahl mit Leertaste de-DE.UTF-8 UTF-8, OK
Zeitzone einstellen
Select 5 Localisation Options, L2 Timezone, Europe, Berlin
Passwort ändern
Es wird empfohlen das Passwort zu ändern: Select 1 System Options, S3 Password, OK , OK, neues Kennwort 2x eingeben und bestätigen
Hostname ändern
Select 1 System Options, S4 Hostname, OK , [neuer Name], OK, neues Kennwort 2x eingeben und bestätigen
Optional den Namen im Netzwerk ändern, den sogenannten hostname. Default ist: raspberrypi. Ich habe zwei Raspberry Pi's im Einsatz. Der eine heißt pi3 und der andere pi4.
Unter diesem Namen ist der Raspberry Pi dann im Netzwerk zu sehen und kann auch über diesen Namen angesprochen werden. Möchte man z.B. überprüfen, ob der Raspberry Pi eingeschaltet und über Netzwerk erreicht werden kann, reicht ein einfacher ping Befehl (in der Windows Kommandozeile cmd):
ping pi3
Nach der Änderung des hostnames meldet sich die Kommandozeile mit:
Benutzer pi am Raspberry Pi mit dem Hostname pi3
Deutsches Tastatur Layout einstellen
sudo raspi-config
Select 5 Localisation Options, L3 Keyboard, Generic 105-key PC (intl.), Other, German und Auswahl spezieller Tasten oder bei Bedarf eine andere Tastatur wählen (sollte die Tastatur in der Liste aufgeführt werden)
Optional die Sprache ändern
Select 5 Localisation Options, L1 Locale, Auswahl mit Leertaste de-DE.UTF-8 UTF-8, OK
Zeitzone einstellen
Select 5 Localisation Options, L2 Timezone, Europe, Berlin
Passwort ändern
Es wird empfohlen das Passwort zu ändern: Select 1 System Options, S3 Password, OK , OK, neues Kennwort 2x eingeben und bestätigen
Hostname ändern
Select 1 System Options, S4 Hostname, OK , [neuer Name], OK, neues Kennwort 2x eingeben und bestätigen
Optional den Namen im Netzwerk ändern, den sogenannten hostname. Default ist: raspberrypi. Ich habe zwei Raspberry Pi's im Einsatz. Der eine heißt pi3 und der andere pi4.
Unter diesem Namen ist der Raspberry Pi dann im Netzwerk zu sehen und kann auch über diesen Namen angesprochen werden. Möchte man z.B. überprüfen, ob der Raspberry Pi eingeschaltet und über Netzwerk erreicht werden kann, reicht ein einfacher ping Befehl (in der Windows Kommandozeile cmd):
ping pi3
Nach der Änderung des hostnames meldet sich die Kommandozeile mit:
Benutzer pi am Raspberry Pi mit dem Hostname pi3
Betriebssystem aktualisieren
Betriebssystem aktualisieren
Das Betriebssystem wird kontinuierlich verbessert und genau wie in der Windows Welt auch sollte das Betriebssystem aktuell gehalten werden.
sudo apt-get update
Abhängig davon wann das Betriebssystem das letzte Mal aktualisiert worden ist, ist der Update mehr oder weniger umfangreich. Führt man apt-get update direkt nach einer Neuinstallation durch, sieht das Ergebnis z.B. so aus:
Get:1 https://raspbian.raspberrypi.org/raspbian bullseye InRelease [15.0 kB]
Get:2 https://archive.raspberrypi.org/debian bullseye InRelease [23.6 kB]
Get:3 https://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages [13.2 MB]
Get:4 https://archive.raspberrypi.org/debian bullseye/main armhf Packages [251 kB]
Fetched 13.5 MB in 11s (1,219 kB/s)
Reading package lists... Done
Die Paketlisten werden neu eingelesen (in das Verzeichnis /etc/apt/sources.list) und aktualisiert.
Den eigentlichen Upgrade des Systems führt man mit folgendem Befehl aus:
sudo apt-get upgrade
Sind Aktualisierungen vorhanden, werden die neuen Versionen installiert. Installationen müssen mit Y bestätigt werden.
Führt man diesen Befehl sofort noch einmal aus, ist das Ergebnis wenig überraschend:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Die durchgeführten Aktionen werden in Logfiles gespeichert. Diese Logdateien kann man sich folgendermaßen ansehen:
cat /var/log/apt/term.log
und
cat /var/log/apt/history.log
Das Betriebssystem wird kontinuierlich verbessert und genau wie in der Windows Welt auch sollte das Betriebssystem aktuell gehalten werden.
sudo apt-get update
Abhängig davon wann das Betriebssystem das letzte Mal aktualisiert worden ist, ist der Update mehr oder weniger umfangreich. Führt man apt-get update direkt nach einer Neuinstallation durch, sieht das Ergebnis z.B. so aus:
Get:2 https://archive.raspberrypi.org/debian bullseye InRelease [23.6 kB]
Get:3 https://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages [13.2 MB]
Get:4 https://archive.raspberrypi.org/debian bullseye/main armhf Packages [251 kB]
Fetched 13.5 MB in 11s (1,219 kB/s)
Reading package lists... Done
Die Paketlisten werden neu eingelesen (in das Verzeichnis /etc/apt/sources.list) und aktualisiert.
Den eigentlichen Upgrade des Systems führt man mit folgendem Befehl aus:
sudo apt-get upgrade
Sind Aktualisierungen vorhanden, werden die neuen Versionen installiert. Installationen müssen mit Y bestätigt werden.
Führt man diesen Befehl sofort noch einmal aus, ist das Ergebnis wenig überraschend:
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Die durchgeführten Aktionen werden in Logfiles gespeichert. Diese Logdateien kann man sich folgendermaßen ansehen:
cat /var/log/apt/term.log
und
cat /var/log/apt/history.log
Breadboards
Breadboards
Für den Versuchsaufbau ist ein Breadboard sehr hilfreich, da die erforderlichen Bauteile nur gesteckt und nicht verlötet werden müssen.
Breadboards gibt es in unterschiedlichen Ausführungen. Eine größere Variante (165 x 55 mm) sieht z.B. so aus:
Bei diesen Steckboards ist es wichtig zu wissen, dass bestimmte Kontakte miteinander verbunden sind. Im folgenden Bild mit roten Strichen verdeutlicht:
Für den Versuchsaufbau mit einer LED und einem Widerstand reicht auch ein kleines Breadboard (47 x 35 mm):
Für den Versuchsaufbau ist ein Breadboard sehr hilfreich, da die erforderlichen Bauteile nur gesteckt und nicht verlötet werden müssen.
Breadboards gibt es in unterschiedlichen Ausführungen. Eine größere Variante (165 x 55 mm) sieht z.B. so aus:
Bei diesen Steckboards ist es wichtig zu wissen, dass bestimmte Kontakte miteinander verbunden sind. Im folgenden Bild mit roten Strichen verdeutlicht:
Für den Versuchsaufbau mit einer LED und einem Widerstand reicht auch ein kleines Breadboard (47 x 35 mm):
Bauteile: LED und Widerstand
Bauteile: LED und Widerstand
Welche LED?
Jede handelsübliche LED (Light Emitting Diode, lichtemittierende Diode oder kurz Leuchtdiode) kann eingesetzt werden. Die LED wird über einen Vorwiderstand betrieben. Um diesen zu berechnen, benötigt man im Idealfall das Datenblatt der LED. Ist dieses nicht vorhanden, da die LED aus der Bastelkiste kommt, sollte man von einer LED Betriebsspannung von 2 Volt und einem Betriebsstrom von 20 mA ausgehen.
Eine LED lässt den Strom nur in eine Richtung fließen, es ist daher wichtig zu wissen, welcher Anschlussdraht an die positive Spannung (Anode) und welcher Anschlussdraht an die Masse (Kathode) angeschlossen wird. Der längere Anschlussdraht ist die Anode, muss also an die positive Spannung (GPIO Port) angeschlossen werden.
Welcher Widerstand?
Für die Berechnung des Widerstandes benötigt man die Formel der Ohmschen Gesetze: U = R * I (U=Spannung in Volt, R=Widerstand in Ohm, I=Strom in Ampere). Der Schaltungsaufbau ist einfach: der GPIO Ausgang (Spannung mit 3,3 Volt) wird an die Anode der LED angeschlossen, die Kathode der LED an den Vorwiderstand und der Vorwiderstand wird mit der Masse verbunden:
Wird der GPIO Ausgang aktiviert, dann stehen an diesem Anschluss 3,3 Volt zur Verfügung. Die Betriebsspannung der LED beträgt 2 Volt. Am Widerstand verbleiben daher noch 1,3 Volt. Sollen durch die LED 20 mA (also 0,020 Ampere) fließen, errechnet sich der Vorwiderstand mit der Formel: R = U / I. R = (3,3 V - 2 V) / 0,02 A = 65 Ohm.
Widerstände sind mit Farbcodes kodiert:
Gängige Kohlewiderstände sind mit vier Farbringen gekennzeichnet, es gibt allerdings auch Metallschichtwiderstände mit fünf Farbringen. Bei Kohlewiderständen geben drei Ringe den Wert und der vierte Farbring die Toleranz an.
Der obige Widerstand besitzt die Farbringe rot (2), violett (7), braun (x 10) und silber (10%). Damit ergeben sich 270 Ohm mit einer Toleranz von 10%, d.h. der eigentliche Wert des Widerstandes liegt zwischen 243 Ohm und 297 Ohm. Nach obiger Berechnung benötige ich aber einen Widerstand mit 65 Ohm (Farbringe blau - grün - schwarz). Der vorliegende Widerstand besitzt den vierfachen Wert! Ist das ein Problem? Für den Versuchsaufbau ist das unbedenklich. Ein größerer Widerstand reduziert den Strom. Ergebnis: die LED leuchtet nicht so stark. Grundsatz: ist der berechnete Widerstandswert nicht verfügbar, dann besser einen Widerstand mit höherem Wert nehmen, als einen niedrigeren.
Kann ich die LED ohne Vorwiderstand betreiben?
Das sollte keinesfalls erfolgen, da dadurch die LED zerstört werden kann. Eventuell kann auch der Raspberry Schaden nehmen.
Vorwiderstand zwischen LED und Anode oder zwischen LED und Kathode?
Beide Varianten sind erlaubt. Es gibt keinen Unterschied. Der Widerstand begrenzt den Strom vor und nach der LED.
Welche LED?
Jede handelsübliche LED (Light Emitting Diode, lichtemittierende Diode oder kurz Leuchtdiode) kann eingesetzt werden. Die LED wird über einen Vorwiderstand betrieben. Um diesen zu berechnen, benötigt man im Idealfall das Datenblatt der LED. Ist dieses nicht vorhanden, da die LED aus der Bastelkiste kommt, sollte man von einer LED Betriebsspannung von 2 Volt und einem Betriebsstrom von 20 mA ausgehen.
Eine LED lässt den Strom nur in eine Richtung fließen, es ist daher wichtig zu wissen, welcher Anschlussdraht an die positive Spannung (Anode) und welcher Anschlussdraht an die Masse (Kathode) angeschlossen wird. Der längere Anschlussdraht ist die Anode, muss also an die positive Spannung (GPIO Port) angeschlossen werden.
Welcher Widerstand?
Für die Berechnung des Widerstandes benötigt man die Formel der Ohmschen Gesetze: U = R * I (U=Spannung in Volt, R=Widerstand in Ohm, I=Strom in Ampere). Der Schaltungsaufbau ist einfach: der GPIO Ausgang (Spannung mit 3,3 Volt) wird an die Anode der LED angeschlossen, die Kathode der LED an den Vorwiderstand und der Vorwiderstand wird mit der Masse verbunden:
Wird der GPIO Ausgang aktiviert, dann stehen an diesem Anschluss 3,3 Volt zur Verfügung. Die Betriebsspannung der LED beträgt 2 Volt. Am Widerstand verbleiben daher noch 1,3 Volt. Sollen durch die LED 20 mA (also 0,020 Ampere) fließen, errechnet sich der Vorwiderstand mit der Formel: R = U / I. R = (3,3 V - 2 V) / 0,02 A = 65 Ohm.
Widerstände sind mit Farbcodes kodiert:
Gängige Kohlewiderstände sind mit vier Farbringen gekennzeichnet, es gibt allerdings auch Metallschichtwiderstände mit fünf Farbringen. Bei Kohlewiderständen geben drei Ringe den Wert und der vierte Farbring die Toleranz an.
Der obige Widerstand besitzt die Farbringe rot (2), violett (7), braun (x 10) und silber (10%). Damit ergeben sich 270 Ohm mit einer Toleranz von 10%, d.h. der eigentliche Wert des Widerstandes liegt zwischen 243 Ohm und 297 Ohm. Nach obiger Berechnung benötige ich aber einen Widerstand mit 65 Ohm (Farbringe blau - grün - schwarz). Der vorliegende Widerstand besitzt den vierfachen Wert! Ist das ein Problem? Für den Versuchsaufbau ist das unbedenklich. Ein größerer Widerstand reduziert den Strom. Ergebnis: die LED leuchtet nicht so stark. Grundsatz: ist der berechnete Widerstandswert nicht verfügbar, dann besser einen Widerstand mit höherem Wert nehmen, als einen niedrigeren.
Kann ich die LED ohne Vorwiderstand betreiben?
Das sollte keinesfalls erfolgen, da dadurch die LED zerstört werden kann. Eventuell kann auch der Raspberry Schaden nehmen.
Vorwiderstand zwischen LED und Anode oder zwischen LED und Kathode?
Beide Varianten sind erlaubt. Es gibt keinen Unterschied. Der Widerstand begrenzt den Strom vor und nach der LED.
GPIO
GPIO
Um den Raspberry Pi mit dem Breadboard zu verbinden, benötigt man die Belegung der GPIO Steckleiste.
GPIO steht für General Purpose Input Output und bietet die Möglichkeit, über Ein- und Ausgangskanäle an den Raspberry angeschlossene Hardware zu steuern. Das Ein- und Ausschalten einer LED ist für die ersten Tests die einfachste Variante.
Die GPIO Ports können über die GPIO Nummer oder den Pin der Steckerleiste angesprochen werden. Das ist bei der Programmierung zu berücksichtigen!
Um den Raspberry Pi mit dem Breadboard zu verbinden, benötigt man die Belegung der GPIO Steckleiste.
GPIO steht für General Purpose Input Output und bietet die Möglichkeit, über Ein- und Ausgangskanäle an den Raspberry angeschlossene Hardware zu steuern. Das Ein- und Ausschalten einer LED ist für die ersten Tests die einfachste Variante.
Die GPIO Ports können über die GPIO Nummer oder den Pin der Steckerleiste angesprochen werden. Das ist bei der Programmierung zu berücksichtigen!
Versuchsaufbau LED
Versuchsaufbau LED
Für den Anschluss einer LED werden nur zwei Pins an der Steckerleiste benötigt: die Masse (GND, Ground) und ein beliebiger GPIO Pin. In diesem Beispiel werden die Pins 39 (GND, Masse) und 40 (GPIO21) benutzt.
Das schwarze Kabel verbindet die Masse (GND, Pin 39) mit dem Breadboard (Reihe 2). Die Steckplätze A, B, C, D und E in der Reihe 2 sind miteinander verbunden. Der 270 Ohm Widerstand wird mit einer Seite in 2B gesteckt und mit dem anderen Ende auf 2G. Steckplätze F, G, H, I und J in der Reihe 2 sind ebenfalls miteinander verbunden. Die Kathode der LED (kürzerer Anschluss) wird auf 2H gesteckt, die Anode der LED (längerer Anschluss) auf 1H. Jetzt wird noch die Anode 1J über das rote Kabel mit dem Pin 40 (GPIO21) verbunden.
Für den Anschluss einer LED werden nur zwei Pins an der Steckerleiste benötigt: die Masse (GND, Ground) und ein beliebiger GPIO Pin. In diesem Beispiel werden die Pins 39 (GND, Masse) und 40 (GPIO21) benutzt.
Das schwarze Kabel verbindet die Masse (GND, Pin 39) mit dem Breadboard (Reihe 2). Die Steckplätze A, B, C, D und E in der Reihe 2 sind miteinander verbunden. Der 270 Ohm Widerstand wird mit einer Seite in 2B gesteckt und mit dem anderen Ende auf 2G. Steckplätze F, G, H, I und J in der Reihe 2 sind ebenfalls miteinander verbunden. Die Kathode der LED (kürzerer Anschluss) wird auf 2H gesteckt, die Anode der LED (längerer Anschluss) auf 1H. Jetzt wird noch die Anode 1J über das rote Kabel mit dem Pin 40 (GPIO21) verbunden.
Programmierung LED Steuerung
Programmierung LED Steuerung
Jetzt fehlen noch ein paar Zeilen Programmierung, um die LED zum Leuchten zu bringen. Üblicherweise nutzt man beim Raspberry Pi die Programmiersprache Python, die auch für einen Anfänger schnell zu verstehen ist. Im Internet gibt es viele Python Tutorials, die sich auch für Einsteiger eignen, z.B. www.python-kurs.eu.
Der Programmcode muss über einen Editor eingegeben werden. Als Editor nutze ich in diesem Beispiel nano, der etwas gewöhnungsbedürftig ist, aber für die wenigen Zeilen Programmcode ausreicht.
nano led.py
Code:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LED=21
GPIO.setup(LED,GPIO.OUT)
GPIO.output(LED,True)
time.sleep(5)
GPIO.output(LED,False)
GPIO.cleanup()
Die Spannung steigt. Geht die LED an und nach 5 Sekunden wieder aus? Zum Ausführen des Programmcodes wird Python mit dem Namen der Datei aufgerufen.
python led.py
Alternativ den Programmcode am PC bearbeiten und auf den Pi übertragen
Für einfache Beispiele reicht der im Linux Betriebssystem enthaltene Editor nano aus. Ich bevorzuge es, den Quellcode am PC mit Visual Studio Code (Microsoft, kostenlos) oder Notepad++ (kostenlos) zu bearbeiten und diesen dann über FTP an den PI zu übertragen. Auch hier empfehle ich einen freien FTP Client: FileZilla. Nach Download, Installation und Start von FileZilla muss einmalig im Servermanager (Menüpunkt: Datei - Servermanager) die Verbindung zum Pi eingerichtet werden.
Bevor Sie den neuen Eintrag abspeichern, empfehle ich, im Reiter Erweitert den Standard Pfad sowohl auf dem PC (Lokales Standard-Verzeichnis) als auch dem Pi (Standard-Verzeichnis auf Server) entsprechend einzustellen. Das hat den Vorteil, dass nach dem Verbindungsaufbau zum PI die erforderlichen Verzeichnisse bereits angezeigt werden.
Hinweis:
In FileZilla sollte auch der bevorzugte Editor (Notepad++, Microsoft Visual Code, ...) hinterlegt werden (Menüpunkt: Bearbeiten - Einstellungen - Bearbeiten von Dateien - Benutzerdefinierten Editor verwenden).
Nach dem Verbindungsaufbau zum Pi können Sie die oben mit nano erstellte Datei per Doppelklick auf den PC übertragen, dort editieren und wieder auf den Pi kopieren. Ein weiterer Vorteil besteht darin, dass Sie jetzt automatisch eine Sicherungskopie auf dem PC vorliegen haben.
Jetzt fehlen noch ein paar Zeilen Programmierung, um die LED zum Leuchten zu bringen. Üblicherweise nutzt man beim Raspberry Pi die Programmiersprache Python, die auch für einen Anfänger schnell zu verstehen ist. Im Internet gibt es viele Python Tutorials, die sich auch für Einsteiger eignen, z.B. www.python-kurs.eu.
Der Programmcode muss über einen Editor eingegeben werden. Als Editor nutze ich in diesem Beispiel nano, der etwas gewöhnungsbedürftig ist, aber für die wenigen Zeilen Programmcode ausreicht.
nano led.py
Code:
import time
GPIO.setmode(GPIO.BCM)
LED=21
GPIO.setup(LED,GPIO.OUT)
GPIO.output(LED,True)
time.sleep(5)
GPIO.output(LED,False)
GPIO.cleanup()
- Zuerst müssen zwei Bibliotheken zum Ansprechen der GPIO Ports (Zeile 1) und des Timers (Zeile 2) eingebunden werden.
- Zeile 3 entscheidet, welche Nummerierung für die Ports genutzt wird. BOARD entspricht den Pins der Steckleiste, BCM den GPIO Bezeichnungen. In diesem Beispiel entspricht BOARD=40 BCM=21. Würde ich Zeile 3 mit GPIO.setmode(GPIO.BOARD) kodieren, müsste ich Zeile 4 in LED=40 ändern.
- Zeile 4 weist der Variablen LED den Wert 21 zu. Das ist nicht zwingend erforderlich. In den Folgezeilen könnte LED auch durch 21 ersetzt werden. In komplexeren Anwendungen erhöht es aber die Lesbarkeit.
- GPIO Ports können als Eingang oder Ausgang geschaltet werden. In Zeile 5 wird der GPIO Port 21 als Ausgang (OUT) geschaltet.
- In Zeile 6 wird die LED eingeschaltet.
- Zeile 7 definiert eine Warteschleife von 5 Sekunden
- Zeile 8 schaltet die LED wieder aus
- Abschließend werden alle benutzten Ports auf Input zurückgesetzt
Die Spannung steigt. Geht die LED an und nach 5 Sekunden wieder aus? Zum Ausführen des Programmcodes wird Python mit dem Namen der Datei aufgerufen.
python led.py
Alternativ den Programmcode am PC bearbeiten und auf den Pi übertragen
Für einfache Beispiele reicht der im Linux Betriebssystem enthaltene Editor nano aus. Ich bevorzuge es, den Quellcode am PC mit Visual Studio Code (Microsoft, kostenlos) oder Notepad++ (kostenlos) zu bearbeiten und diesen dann über FTP an den PI zu übertragen. Auch hier empfehle ich einen freien FTP Client: FileZilla. Nach Download, Installation und Start von FileZilla muss einmalig im Servermanager (Menüpunkt: Datei - Servermanager) die Verbindung zum Pi eingerichtet werden.
- Klicken Sie auf Neuer Server
- Als Server geben Sie die IP Adresse des Raspberry Pi ein (siehe oben), hier: 192.168.0.146
- Das FTP Protokoll muss auf SFTP umgestellt werden
- Verbindungart: Normal
- Benutzer: pi
- Passwort: raspberry, bzw. das neue Passwort, das Sie vergeben haben
Bevor Sie den neuen Eintrag abspeichern, empfehle ich, im Reiter Erweitert den Standard Pfad sowohl auf dem PC (Lokales Standard-Verzeichnis) als auch dem Pi (Standard-Verzeichnis auf Server) entsprechend einzustellen. Das hat den Vorteil, dass nach dem Verbindungsaufbau zum PI die erforderlichen Verzeichnisse bereits angezeigt werden.
Hinweis:
In FileZilla sollte auch der bevorzugte Editor (Notepad++, Microsoft Visual Code, ...) hinterlegt werden (Menüpunkt: Bearbeiten - Einstellungen - Bearbeiten von Dateien - Benutzerdefinierten Editor verwenden).
Nach dem Verbindungsaufbau zum Pi können Sie die oben mit nano erstellte Datei per Doppelklick auf den PC übertragen, dort editieren und wieder auf den Pi kopieren. Ein weiterer Vorteil besteht darin, dass Sie jetzt automatisch eine Sicherungskopie auf dem PC vorliegen haben.
Huawei Surf-Stick für SMS Versand/Empfang einrichten
Huawei Surf-Stick für SMS Versand/Empfang einrichten
Für den SMS Versand/Empfang habe ich einen USB Surf-Stick von Huawei gekauft (Modell E3372H, ca. 40 Euro 11/2021). Die Inbetriebnahme des Huawei Surf-Sticks am Rapsberry Pi stellt eine unerwartete Herausforderung dar. Unter Windows 10 hat der USB Stick sofort funktioniert und nach ein paar Minuten konnte ich die erste SMS verschicken. Beim Raspberry Pi hat es erst nach Ausprobieren unzähliger Quellen im Internet nach zwei Tagen funktioniert.
Für den SMS Versand werden die Module usb-modeswitch und gammu benötigt:
sudo apt-get install usb-modeswitch usb-modeswitch-data
Im aktuellen Raspian Betriebssystem ist usb-modeswitch bereits enthalten. Der Versuch einer Installation schadet aber nicht:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
usb-modeswitch is already the newest version (2.6.1-1).
usb-modeswitch-data is already the newest version (20191128-3).
usb-modeswitch-data set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
sudo apt-get install gammu
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libbluetooth3 libgammu-i18n libgammu8
Suggested packages:
wammu gammu-doc
The following NEW packages will be installed:
gammu libbluetooth3 libgammu-i18n libgammu8
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,126 kB of archives.
After this operation, 3,884 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Nach Bestätigung mit Y werden noch einige Zeilen ausgegeben.
Der USB Surf-Stick sollte nach dem Einstecken am Raspberry Pi automatisch erkannt werden. Überpüfung mit:
lsusb
Bus 001 Device 009: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Weitere Details zum Surf-Stick erhält man mit:
lsusb -vv -d 12d1:14db
12d1 ist die Vendor ID des Herstellers Huawei, 14db die Produkt ID. Das Problem: viele Quellen im Internet geben für den GSM Modus die Produkt ID 14db an, der für den SMS Versand und Empfang benötigt wird, richtig ist aber 155e.
Um den Surf-Stick für den SMS Versand und Empfang nutzen zu können, müssten im Verzeichnis /dev entsprechende ttyUSB Einträge zu sehen sein. Diese gibt es aktuell noch nicht (Überprüfung mit ls /dev).
Wie wird der Surf-Stick auf 155e umgestellt?
Quelle: https://mobile.twitter.com/kuenzler/status/1360924131370430465
Direkt nach dem Booten wird die Produkt ID 1f01 angezeigt (normale Memory-Stick Funktion). Kurz drauf wechselt er in den von Huawei benannten Hilink Modus mit der Produkt ID 14db (entspricht einer Ethernet-Adapter-Emulation). Damit der USB Surf-Stick für den SMS Versand genutzt werden kann, muss der Modus auf 155e umgestellt werden. Erst danach werden die /dev/ttyUSBx Einträge erstellt.
Im Verzeichnis /etc/usb_modeswitch.d die Datei 12d1:1f01 mit folgendem Inhalt anlegen.
TargetVendor=0x12d1
TargetProduct=0x155e
MessageContent="55534243123456780000000000000011063000000100010000000000000000"
sudo nano /etc/usb_modeswitch.d/12d1\:1f01
Hinweise:
In der Datei /etc/usb_modeswitch.conf diese Settings überprüfen bzw. ergänzen:
sudo nano /etc/usb_modeswitch.conf
DisableSwitching=0
DisableMBIMGlobal=0
EnableLogging=1
SetStorageDelay=4
HuaweiAltModeGlobal=0
HuaweiNewMode=1
NoDriverLoading=1
Der letzte Eintrag scheint sehr wichtig, er verhindert, dass Ethernet-Treiber geladen werden. Anschließend den Huawei E3372h Stick aus- und wieder einstecken und überprüfen, ob die richtige Produkt ID angezeigt wird:
lsusb
Bus 001 Device 009: ID 12d1:155e Huawei Technologies Co., Ltd. E353/E3131
...
Auch die ttyUSB Devices sind jetzt verfügbar. Überprüfung mit:
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Feb 18 16:45 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 1 Feb 18 16:45 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 2 Feb 18 16:45 /dev/ttyUSB3
Für Gammu wird noch eine Konfigurationsdatei .gammurc benötigt, die mit gammu-config erstellt werden kann.
Ich bevorzuge den manuellen Weg und erstelle die Datei mit dem Editor nano.
sudo nano /root/.gammurc
[gammu]
port = /dev/ttyUSB1
model = E3372h-320
connection = at
use_locking = yes
logfile = gammu.log
logformat = textdate
Anschließend überprüfen, ob der Stick korrekt erkannt wird:
sudo gammu identify
Device : /dev/ttyUSB1
Manufacturer : Huawei
Model : unknown (E3372h-320)
Firmware : 11.0.1.1(H697SP1C983)
IMEI : 862329049642465
SIM IMSI : 262022416074407
Nach diesen Vorarbeiten kann über die Kommandozeile die erste SMS verschickt werden:
sudo gammu sendsms TEXT 016nnnnnnnn -text "Meine erste SMS mit dem Raspberry PI"
016nnnnnnnn durch korrekte Telefonnummer ersetzen und Text bei Bedarf ändern.
In der gammu Konfigurationsdatei wird Logging aktiviert. Die Logdatei befindet sich im Home Verzeichnis: /home/pi/gammu.log<
Weitere gammu Befehle:
sudo gammu getsmsfolders
Zeigt an, welche Folder es gibt (wichtig für den Empfang von SMS Nachrichten):
1. " Inbox", SIM memory, Inbox folder
2. " Outbox", SIM memory, Outbox folder
3. " Inbox", phone memory, Inbox folder
4. " Outbox", phone memory, Outbox folder
sudo gammu getallsms
Liese alle Nachrichten:
Location 0, folder "Inbox", SIM memory, Inbox folder
SMS message
SMSC number : "+49172nnnnnnn"
Sent : Tue 29 Mar 2022 18:12:55 +0200
Coding : Default GSM alphabet (no compression)
Remote number : "+49162nnnnnnn"
Status : UnRead
Die SMS vom Raspberry Pi ist angekommen
Location 1, folder "Inbox", SIM memory, Inbox folder
SMS message
SMSC number : "+49172nnnnnnn"
Sent : Tue 29 Mar 2022 18:13:22 +0200
Coding : Default GSM alphabet (no compression)
Remote number : "+49162nnnnnnn"
Status : UnRead
Test mit einer weiteren SMS
2 SMS parts in 2 SMS sequences
Auf der SIM befinden sich zwei Nachrichten in der Inbox. Die Inbox der SIM Karte entspricht dem Folder 1. Diese Nummer ist wichtig für das Löschen von Nachrichten.
sudo gammu deleteallsms 1
Löscht alle Nachrichten im Folder 1:
Deleting SMS from "Inbox" folder: **
Herausfinden welche gammu Versionen installiert sind:
sudo apt list --installed | grep gammu
gammu-smsd/stable,now 1.41.0-1.1 armhf [installed]
gammu/stable,now 1.41.0-1.1 armhf [installed]
libgammu-i18n/stable,now 1.41.0-1.1 all [installed,automatic]
libgammu8/stable,now 1.41.0-1.1 armhf [installed,automatic]
python3-gammu/stable,now 2.12-2+b1 armhf [installed]
Für den SMS Versand/Empfang habe ich einen USB Surf-Stick von Huawei gekauft (Modell E3372H, ca. 40 Euro 11/2021). Die Inbetriebnahme des Huawei Surf-Sticks am Rapsberry Pi stellt eine unerwartete Herausforderung dar. Unter Windows 10 hat der USB Stick sofort funktioniert und nach ein paar Minuten konnte ich die erste SMS verschicken. Beim Raspberry Pi hat es erst nach Ausprobieren unzähliger Quellen im Internet nach zwei Tagen funktioniert.
Für den SMS Versand werden die Module usb-modeswitch und gammu benötigt:
sudo apt-get install usb-modeswitch usb-modeswitch-data
Im aktuellen Raspian Betriebssystem ist usb-modeswitch bereits enthalten. Der Versuch einer Installation schadet aber nicht:
Building dependency tree... Done
Reading state information... Done
usb-modeswitch is already the newest version (2.6.1-1).
usb-modeswitch-data is already the newest version (20191128-3).
usb-modeswitch-data set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
sudo apt-get install gammu
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libbluetooth3 libgammu-i18n libgammu8
Suggested packages:
wammu gammu-doc
The following NEW packages will be installed:
gammu libbluetooth3 libgammu-i18n libgammu8
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,126 kB of archives.
After this operation, 3,884 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Nach Bestätigung mit Y werden noch einige Zeilen ausgegeben.
Der USB Surf-Stick sollte nach dem Einstecken am Raspberry Pi automatisch erkannt werden. Überpüfung mit:
lsusb
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Weitere Details zum Surf-Stick erhält man mit:
lsusb -vv -d 12d1:14db
12d1 ist die Vendor ID des Herstellers Huawei, 14db die Produkt ID. Das Problem: viele Quellen im Internet geben für den GSM Modus die Produkt ID 14db an, der für den SMS Versand und Empfang benötigt wird, richtig ist aber 155e.
Um den Surf-Stick für den SMS Versand und Empfang nutzen zu können, müssten im Verzeichnis /dev entsprechende ttyUSB Einträge zu sehen sein. Diese gibt es aktuell noch nicht (Überprüfung mit ls /dev).
Wie wird der Surf-Stick auf 155e umgestellt?
Quelle: https://mobile.twitter.com/kuenzler/status/1360924131370430465
Direkt nach dem Booten wird die Produkt ID 1f01 angezeigt (normale Memory-Stick Funktion). Kurz drauf wechselt er in den von Huawei benannten Hilink Modus mit der Produkt ID 14db (entspricht einer Ethernet-Adapter-Emulation). Damit der USB Surf-Stick für den SMS Versand genutzt werden kann, muss der Modus auf 155e umgestellt werden. Erst danach werden die /dev/ttyUSBx Einträge erstellt.
Im Verzeichnis /etc/usb_modeswitch.d die Datei 12d1:1f01 mit folgendem Inhalt anlegen.
TargetProduct=0x155e
MessageContent="55534243123456780000000000000011063000000100010000000000000000"
sudo nano /etc/usb_modeswitch.d/12d1\:1f01
Hinweise:
- Für den Zugriff auf den Ordner /etc (und Unterordner) benötigt man Rechte, die der Benutzer pi nicht hat, deshalb wird der Befehl mit sudo aufgerufen
- nano ist ein einfacher, etwas gewöhnungsbedürftiger Editor, der für viele Zwecke vollkommen ausreichend ist
- Der Backslash in 12d1\:1f01 wird für den Doppelpunkt benötigt (nicht zwingend, wird aber empfohlen)
In der Datei /etc/usb_modeswitch.conf diese Settings überprüfen bzw. ergänzen:
sudo nano /etc/usb_modeswitch.conf
DisableMBIMGlobal=0
EnableLogging=1
SetStorageDelay=4
HuaweiAltModeGlobal=0
HuaweiNewMode=1
NoDriverLoading=1
Der letzte Eintrag scheint sehr wichtig, er verhindert, dass Ethernet-Treiber geladen werden. Anschließend den Huawei E3372h Stick aus- und wieder einstecken und überprüfen, ob die richtige Produkt ID angezeigt wird:
lsusb
...
Auch die ttyUSB Devices sind jetzt verfügbar. Überprüfung mit:
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 1 Feb 18 16:45 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 2 Feb 18 16:45 /dev/ttyUSB3
Für Gammu wird noch eine Konfigurationsdatei .gammurc benötigt, die mit gammu-config erstellt werden kann.
Ich bevorzuge den manuellen Weg und erstelle die Datei mit dem Editor nano.
sudo nano /root/.gammurc
port = /dev/ttyUSB1
model = E3372h-320
connection = at
use_locking = yes
logfile = gammu.log
logformat = textdate
Anschließend überprüfen, ob der Stick korrekt erkannt wird:
sudo gammu identify
Manufacturer : Huawei
Model : unknown (E3372h-320)
Firmware : 11.0.1.1(H697SP1C983)
IMEI : 862329049642465
SIM IMSI : 262022416074407
Nach diesen Vorarbeiten kann über die Kommandozeile die erste SMS verschickt werden:
sudo gammu sendsms TEXT 016nnnnnnnn -text "Meine erste SMS mit dem Raspberry PI"
016nnnnnnnn durch korrekte Telefonnummer ersetzen und Text bei Bedarf ändern.
In der gammu Konfigurationsdatei wird Logging aktiviert. Die Logdatei befindet sich im Home Verzeichnis: /home/pi/gammu.log<
Weitere gammu Befehle:
sudo gammu getsmsfolders
Zeigt an, welche Folder es gibt (wichtig für den Empfang von SMS Nachrichten):
2. " Outbox", SIM memory, Outbox folder
3. " Inbox", phone memory, Inbox folder
4. " Outbox", phone memory, Outbox folder
sudo gammu getallsms
Liese alle Nachrichten:
SMS message
SMSC number : "+49172nnnnnnn"
Sent : Tue 29 Mar 2022 18:12:55 +0200
Coding : Default GSM alphabet (no compression)
Remote number : "+49162nnnnnnn"
Status : UnRead
Die SMS vom Raspberry Pi ist angekommen
Location 1, folder "Inbox", SIM memory, Inbox folder
SMS message
SMSC number : "+49172nnnnnnn"
Sent : Tue 29 Mar 2022 18:13:22 +0200
Coding : Default GSM alphabet (no compression)
Remote number : "+49162nnnnnnn"
Status : UnRead
Test mit einer weiteren SMS
2 SMS parts in 2 SMS sequences
Auf der SIM befinden sich zwei Nachrichten in der Inbox. Die Inbox der SIM Karte entspricht dem Folder 1. Diese Nummer ist wichtig für das Löschen von Nachrichten.
sudo gammu deleteallsms 1
Löscht alle Nachrichten im Folder 1:
Herausfinden welche gammu Versionen installiert sind:
sudo apt list --installed | grep gammu
gammu/stable,now 1.41.0-1.1 armhf [installed]
libgammu-i18n/stable,now 1.41.0-1.1 all [installed,automatic]
libgammu8/stable,now 1.41.0-1.1 armhf [installed,automatic]
python3-gammu/stable,now 2.12-2+b1 armhf [installed]
SMS mit Python verschicken
SMS mit Python verschicken
Im vorherigen Abschnitt wurde gezeigt, dass über Kommandozeile eine SMS verschickt werden kann. Damit auch aus einem Programm heraus eine SMS verschickt oder empfangen werden kann, wird ein weiteres Modul benötigt: python3-gammu
sudo apt install python3-gammu
Hinweis: ältere Dokumentationen verweisen noch auf das Modul python-gammu, das aber mit Python Version 3 nicht mehr installiert werden kann!
Neben python3-gammu werden mehrere Pakete installiert. Darüber hinaus wird empfohlen, das Paket gammu-smsd zu installieren. gammu-smsd ist ein Dienst (in der Linux Welt Daemon genannt), der im Hintergrund läuft und den Surf-Stick kontinuierlich nach neuen Nachrichten abfragt bzw. auch im Hintergrund SMS Nachrichten verschicken kann.
Jetzt fehlt nur noch etwas Code, um über Python eine SMS zu verschicken.
Datei: sms.py:
import gammu
# Gammu initialisieren
sm = gammu.StateMachine()
sm.ReadConfig(Filename=".gammurc")
sm.Init()
message = {
'Text': 'SMS mit Python verschickt',
'SMSC': {'Location': 1},
'Number': '+4916nnnnnnnn',
}
sm.SendSMS(message)
Telefonnummer entsprechend anpassen!
python sms.py
Die SMS müsste wenige Sekunden später auf dem Smartphone ankommen.
Im vorherigen Abschnitt wurde gezeigt, dass über Kommandozeile eine SMS verschickt werden kann. Damit auch aus einem Programm heraus eine SMS verschickt oder empfangen werden kann, wird ein weiteres Modul benötigt: python3-gammu
sudo apt install python3-gammu
Hinweis: ältere Dokumentationen verweisen noch auf das Modul python-gammu, das aber mit Python Version 3 nicht mehr installiert werden kann!
Neben python3-gammu werden mehrere Pakete installiert. Darüber hinaus wird empfohlen, das Paket gammu-smsd zu installieren. gammu-smsd ist ein Dienst (in der Linux Welt Daemon genannt), der im Hintergrund läuft und den Surf-Stick kontinuierlich nach neuen Nachrichten abfragt bzw. auch im Hintergrund SMS Nachrichten verschicken kann.
Jetzt fehlt nur noch etwas Code, um über Python eine SMS zu verschicken.
Datei: sms.py:
# Gammu initialisieren
sm = gammu.StateMachine()
sm.ReadConfig(Filename=".gammurc")
sm.Init()
message = {
'Text': 'SMS mit Python verschickt',
'SMSC': {'Location': 1},
'Number': '+4916nnnnnnnn',
}
sm.SendSMS(message)
python sms.py
Die SMS müsste wenige Sekunden später auf dem Smartphone ankommen.
Relais Modul
Relais Modul
Auf dem Markt gibt es sehr preiswerte Relais Module (1 bis 2 Euro), die sich von der Funktion nur geringfügig unterscheiden. Abhängig davon, was mit dem Relais Modul geschaltet werden soll, ist darauf zu achten, welche Leistung maximal geschaltet werden soll. Für Niederspannungen eignen sich alle Module.
WICHTIG: nicht alle Relais Module funktionieren problemlos mit dem Raspberry Pi. Der Raspberry Pi stellt an den GPIO Ports eine Spannung von 3,3 Volt für HIGH zur Verfügung, während die Raspberry Pi Alternative Arduino mit 5 Volt Pegel arbeitet.
Dieses Relais Modul erwartet ein Trigger Signal von 5 bis 12 Volt (laut Datenblatt). Hinzukommt ein weiterer, negativer Effekt. Ist der gewählte GPIO Port noch nicht als Ausgang konfiguriert, liegt eine Spannung von knapp 1 Volt am Port an. Sobald der Port als Ausgang gesetzt wird geht dieser auf LOW (0 Volt). Dieser Spannungsabfall interpretiert das Modul als Trigger und schaltet das Relais!
Folgendes Relais Modul zeigt diesen Effekt nicht:
Vertrieben wird dieses Relais Modul unter der Bezeichnung KY-019, aufgedruckt ist allerdings die Bezeichnung HW-482. Laut Datenblatt liegt das TTL Trigger Signal bei 3,3 bis 5 Volt. Weitere Vorteile dieser Variante: das Modul kann direkt auf ein Breadboard gesteckt werden und besitzt 4 Löcher für die Montage.
Mit der GPIO Leiste des Raspberry Pi müssen drei Verbindungen hergestellt werden:
Das Relais selbst besitzt drei Ausgänge mit Schraubanschluss. Der mittlere Ausgang wird immer benötigt. Ob man jetzt den Ausgang zu (OFF) oder offen (ON) benötigt, hängt vom Einsatzzweck ab. zu (OFF) bedeutet, dass im nicht geschalteten Zustand der Kontakt zwischen Mitte und zu (OFF) geschlossen ist. Liegt ein Signal an, wird der Kontakt geöffnet. offen (ON) bedeutet, dass im nicht geschalteten Zustand der Kontakt zwischen Mitte und offen (ON) geöffnet ist. Liegt ein Signal an, wird der Kontakt geschlossen. Die zweite Variante wird für die Betätigung des Türöffners benötigt. Dieser soll ja nur kurz betätigt werden.
Um das Relais zu schalten werden nur wenige Zeilen Code benötigt:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
RELAIS=27
GPIO.setup(RELAIS, GPIO.OUT)
GPIO.output(RELAIS,GPIO.HIGH)
time.sleep(2)
GPIO.output(RELAIS,GPIO.LOW)
GPIO.cleanup()
Wird das Programm ausgeführt, ist der Kontakt Mitte/offen für zwei Sekunden geschlossen. Für Testzwecke habe ich an den beiden Schraubabschlüssen einen Summer angeschlossen.
Auf dem Markt gibt es sehr preiswerte Relais Module (1 bis 2 Euro), die sich von der Funktion nur geringfügig unterscheiden. Abhängig davon, was mit dem Relais Modul geschaltet werden soll, ist darauf zu achten, welche Leistung maximal geschaltet werden soll. Für Niederspannungen eignen sich alle Module.
WICHTIG: nicht alle Relais Module funktionieren problemlos mit dem Raspberry Pi. Der Raspberry Pi stellt an den GPIO Ports eine Spannung von 3,3 Volt für HIGH zur Verfügung, während die Raspberry Pi Alternative Arduino mit 5 Volt Pegel arbeitet.
Dieses Relais Modul erwartet ein Trigger Signal von 5 bis 12 Volt (laut Datenblatt). Hinzukommt ein weiterer, negativer Effekt. Ist der gewählte GPIO Port noch nicht als Ausgang konfiguriert, liegt eine Spannung von knapp 1 Volt am Port an. Sobald der Port als Ausgang gesetzt wird geht dieser auf LOW (0 Volt). Dieser Spannungsabfall interpretiert das Modul als Trigger und schaltet das Relais!
Folgendes Relais Modul zeigt diesen Effekt nicht:
Vertrieben wird dieses Relais Modul unter der Bezeichnung KY-019, aufgedruckt ist allerdings die Bezeichnung HW-482. Laut Datenblatt liegt das TTL Trigger Signal bei 3,3 bis 5 Volt. Weitere Vorteile dieser Variante: das Modul kann direkt auf ein Breadboard gesteckt werden und besitzt 4 Löcher für die Montage.
Mit der GPIO Leiste des Raspberry Pi müssen drei Verbindungen hergestellt werden:
- Anschluss S (Signal) an einen GPIO Pin (hier: GPIO27, Pin 13)
- Anschluss + (5 Volt) an Pin 2 (5V)
- Anschluss - (Masse, GND) an Pin 6 (GND)
Das Relais selbst besitzt drei Ausgänge mit Schraubanschluss. Der mittlere Ausgang wird immer benötigt. Ob man jetzt den Ausgang zu (OFF) oder offen (ON) benötigt, hängt vom Einsatzzweck ab. zu (OFF) bedeutet, dass im nicht geschalteten Zustand der Kontakt zwischen Mitte und zu (OFF) geschlossen ist. Liegt ein Signal an, wird der Kontakt geöffnet. offen (ON) bedeutet, dass im nicht geschalteten Zustand der Kontakt zwischen Mitte und offen (ON) geöffnet ist. Liegt ein Signal an, wird der Kontakt geschlossen. Die zweite Variante wird für die Betätigung des Türöffners benötigt. Dieser soll ja nur kurz betätigt werden.
Um das Relais zu schalten werden nur wenige Zeilen Code benötigt:
import time
GPIO.setmode(GPIO.BCM)
RELAIS=27
GPIO.setup(RELAIS, GPIO.OUT)
GPIO.output(RELAIS,GPIO.HIGH)
time.sleep(2)
GPIO.output(RELAIS,GPIO.LOW)
GPIO.cleanup()
- Zuerst müssen zwei Bibliotheken zum Ansprechen der GPIO Ports (Zeile 1) und des Timers (Zeile 2) eingebunden werden.
- Zeile 3 entscheidet, welche Nummerierung für die Ports genutzt wird. BOARD entspricht den Pins der Steckleiste, BCM den GPIO Bezeichnungen. In diesem Beispiel entspricht BOARD=13 BCM=27. Würde ich Zeile 3 mit GPIO.setmode(GPIO.BOARD) kodieren, müsste ich Zeile 4 in RELAIS=13 ändern.
- Zeile 4 weist der Variablen RELAIS den Wert 27 zu. Das ist nicht zwingend erforderlich. In den Folgezeilen könnte RELAIS auch durch 27 ersetzt werden. In komplexeren Anwendungen erhöht es aber die Lesbarkeit.
- GPIO Ports können als Eingang oder Ausgang geschaltet werden. In Zeile 5 wird der GPIO Port 27 als Ausgang (OUT) geschaltet.
- In Zeile 6 wird das Relais geschaltet. Alternativ zu GPIO.HIGH kann auch True benutzt werden
- Zeile 7 definiert eine Warteschleife von 2 Sekunden
- Zeile 8 schaltet den Relais Kontakt wieder aus. Alternativ zu GPIO.LOW kann auch False benutzt werden
- Wichtig: abschließend werden alle benutzten Ports auf Input zurückgesetzt
Wird das Programm ausgeführt, ist der Kontakt Mitte/offen für zwei Sekunden geschlossen. Für Testzwecke habe ich an den beiden Schraubabschlüssen einen Summer angeschlossen.
Garagentor mit SMS öffnen
Garagentor mit SMS öffnen
Wäre es nicht praktisch mit einer SMS die Haustüre oder das Garagentor zu öffnen? Oder andere Verbraucher zu schalten?
Neben dem Rapsberry Pi und dem Huawei Surf-Stick benötigt man dafür ein Relais. Für Raspberry Pi passende Relais gibt es ab ca. 1,50 Euro (Suche nach: Raspberry Pi Relais Modul). Mein Versuchsaufbau sieht folgendermaßen aus:
Links der weiße USB Surf-Stick von Huawei. Rechts auf dem Breadboard steckt das Relais Modul. Details siehe vorheriger Abschnitt Relais Modul.
Im letzten Abschnitt wurde eine SMS mit Python verschickt, jetzt wird der Code zum Empfangen einer SMS benötigt.
#!/usr/bin/python
import gammu
# Gammu initialisieren
sm = gammu.StateMachine()
sm.ReadConfig(Filename=".gammurc")
sm.Init()
status = sm.GetSMSStatus()
count = status['SIMUsed'] + status['PhoneUsed'] + status['TemplatesUsed']
if count == 0:
exit
sms = sm.GetNextSMS(Start = True, Folder = 0)
while True:
if sms[0]['State'] != 'Read':
print ('-----------------------------------------------------------')
print ('Number: ', sms[0]['Number'])
print ('Location: ', sms[0]['Location'])
print ('State: ', sms[0]['State'])
print ('Text: ', sms[0]['Text'])
print
count -= 1
if count > 0:
sms = sm.GetNextSMS(0,Location=sms[0]['Location'])
else:
break
Ergebnis:
/home/pi/sms1.py:14: DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats
sms = sm.GetNextSMS(Start = True, Folder = 0)
/home/pi/sms1.py:25: DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats
sms = sm.GetNextSMS(0,Location=sms[0]['Location'])
-----------------------------------------------------------
Number: +4916nnnnnnnn
Location: 8
State: UnRead
Text: Ist da
Die Nachricht mit dem kurzen Inhalt "Ist da" konnte gelesen werden, allerdings habe ich aktuell drei Probleme:
Bis eine aktualisierte Python Bibliothek verfügbar ist, muss eine andere Lösung her. Grundsätzlich könnte ich den Internet Router so konfigurieren, dass ich von außerhalb auf mein Netzwerk und die angeschlossen Endgeräte zugreifen kann. Aus Sicherheitsgründen erlaube ich diesen Zugriff aber nicht und entscheide mich für E-Mail basierte Lösung. Siehe Garagentor mit E-Mail öffnen
Wäre es nicht praktisch mit einer SMS die Haustüre oder das Garagentor zu öffnen? Oder andere Verbraucher zu schalten?
Neben dem Rapsberry Pi und dem Huawei Surf-Stick benötigt man dafür ein Relais. Für Raspberry Pi passende Relais gibt es ab ca. 1,50 Euro (Suche nach: Raspberry Pi Relais Modul). Mein Versuchsaufbau sieht folgendermaßen aus:
Links der weiße USB Surf-Stick von Huawei. Rechts auf dem Breadboard steckt das Relais Modul. Details siehe vorheriger Abschnitt Relais Modul.
Im letzten Abschnitt wurde eine SMS mit Python verschickt, jetzt wird der Code zum Empfangen einer SMS benötigt.
import gammu
# Gammu initialisieren
sm = gammu.StateMachine()
sm.ReadConfig(Filename=".gammurc")
sm.Init()
status = sm.GetSMSStatus()
count = status['SIMUsed'] + status['PhoneUsed'] + status['TemplatesUsed']
if count == 0:
exit
sms = sm.GetNextSMS(Start = True, Folder = 0)
while True:
if sms[0]['State'] != 'Read':
print ('-----------------------------------------------------------')
print ('Number: ', sms[0]['Number'])
print ('Location: ', sms[0]['Location'])
print ('State: ', sms[0]['State'])
print ('Text: ', sms[0]['Text'])
count -= 1
if count > 0:
sms = sm.GetNextSMS(0,Location=sms[0]['Location'])
else:
break
Ergebnis:
sms = sm.GetNextSMS(Start = True, Folder = 0)
/home/pi/sms1.py:25: DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats
sms = sm.GetNextSMS(0,Location=sms[0]['Location'])
-----------------------------------------------------------
Number: +4916nnnnnnnn
Location: 8
State: UnRead
Text: Ist da
Die Nachricht mit dem kurzen Inhalt "Ist da" konnte gelesen werden, allerdings habe ich aktuell drei Probleme:
- Für die DeprecationWarning habe ich noch keine Lösung gefunden
- Ab und zu erhalte ich einen Timeout beim Zugriff auf den Surf-Stick
- Die SMS kann über Python nicht gelöscht werden. Das geht aktuell nur über Kommandozeile, was für eine automatiserte Lösung nicht geeignet ist
Bis eine aktualisierte Python Bibliothek verfügbar ist, muss eine andere Lösung her. Grundsätzlich könnte ich den Internet Router so konfigurieren, dass ich von außerhalb auf mein Netzwerk und die angeschlossen Endgeräte zugreifen kann. Aus Sicherheitsgründen erlaube ich diesen Zugriff aber nicht und entscheide mich für E-Mail basierte Lösung. Siehe Garagentor mit E-Mail öffnen
Daemon Gammu SMSD
Daemon Gammu SMSD
Gammu SMSD ist ein Daemon, der sich um das Handling von SMS Nachrichten kümmert. Installation des Pakets:
sudo apt-get install gammu-smsd
In der Datei /etc/gammu-smsdrc muss der port von null auf ttyUSB1 geändert werden:
sudo nano /etc/gammu-smsdrc
Anschließend den Daemon starten:
sudo service gammu-smsd restart
Ist der Service gestartet? Überprüfen lässt sich das mit:
ps -A | grep gammu
2306 ? 00:00:00 gammu-smsd
In der Konfigurationsdatei des Gammu Daemons ist konfiguriert, dass neue Nachrichten im Dateisystem im Verzeichnis /var/spool/gammu/inbox/ abgelegt werden. Nach dem Senden einer SMS an die Telefonnummer des Surf-Sticks, kann der Posteingang überprüft werden:
sudo ls -l /var/spool/gammu/inbox/
Beispiel:
-rw-r--r-- 1 root root 6 Feb 20 19:35 IN20220219_144119_00_+4916nnnnnnnn_00.txt
-rw-r--r-- 1 root root 41 Feb 20 19:45 IN20220220_194552_00_+4916nnnnnnnn_00.txt
Es befinden sich zwei Nachrichten im Nachrichten Eingang. Anzeigen lassen kann man sich den Inhalt mit:
sudo cat /var/spool/gammu/inbox/IN20220220_194552_00_+4916nnnnnnnn_00.txt
Diese SMS sollte der Daemon jetzt abholen
Zum Beenden des Services den Daemon über die Process ID 2306 beenden:
sudo kill 2306
Gammu SMSD ist ein Daemon, der sich um das Handling von SMS Nachrichten kümmert. Installation des Pakets:
sudo apt-get install gammu-smsd
In der Datei /etc/gammu-smsdrc muss der port von null auf ttyUSB1 geändert werden:
sudo nano /etc/gammu-smsdrc
Anschließend den Daemon starten:
sudo service gammu-smsd restart
Ist der Service gestartet? Überprüfen lässt sich das mit:
ps -A | grep gammu
In der Konfigurationsdatei des Gammu Daemons ist konfiguriert, dass neue Nachrichten im Dateisystem im Verzeichnis /var/spool/gammu/inbox/ abgelegt werden. Nach dem Senden einer SMS an die Telefonnummer des Surf-Sticks, kann der Posteingang überprüft werden:
sudo ls -l /var/spool/gammu/inbox/
Beispiel:
-rw-r--r-- 1 root root 41 Feb 20 19:45 IN20220220_194552_00_+4916nnnnnnnn_00.txt
Es befinden sich zwei Nachrichten im Nachrichten Eingang. Anzeigen lassen kann man sich den Inhalt mit:
sudo cat /var/spool/gammu/inbox/IN20220220_194552_00_+4916nnnnnnnn_00.txt
Zum Beenden des Services den Daemon über die Process ID 2306 beenden:
sudo kill 2306
Garagentor mit E-Mail öffnen
Garagentor mit E-Mail öffnen
Nachdem die Garagentor Steuerung über SMS aktuell Probleme bereitet, da sich eine SMS aus Python heraus nicht löschen lässt (bestätigter Bug in der python3-gammu Bibiliothek), weiche ich auf eine E-Mail basierte Lösung aus. Angeschlossen an den Rasperry PI ist ein preisgünstiges Relais Modul (siehe oben).
Das Programm gestaltet sich etwas aufwändiger:
Sourcecode: opengarage.py (als .txt Datei)
Nachdem die Garagentor Steuerung über SMS aktuell Probleme bereitet, da sich eine SMS aus Python heraus nicht löschen lässt (bestätigter Bug in der python3-gammu Bibiliothek), weiche ich auf eine E-Mail basierte Lösung aus. Angeschlossen an den Rasperry PI ist ein preisgünstiges Relais Modul (siehe oben).
Das Programm gestaltet sich etwas aufwändiger:
Sourcecode: opengarage.py (als .txt Datei)
- Modul für den Zugriff auf die GPIO Ports
- Modul für E-Mail Funktionen
- Modul zum Lesen von E-Mails über IMAP
- Modul zum Versenden von E-Mails mit SMTP
- Modul für Zeitfunktionen
- Modul zum Erstellen eines MIME Textes (E-Mail Versand)
- Die E-Mail Adresse des Users, die für das Senden und Empfangen von E-Mails benutzt wird. Entsprechend ändern
- Das dazugehörige Passwort. Entsprechend ändern
- Empfänger der E-Mail, die darüber informiert, dass die Garage geöffnet worden ist. Entsprechend ändern
- Die IMAP Domäne des Providers. Entsprechend ändern
- Die SMTP Domäne des Providers. Entsprechend ändern
- Aus Sicherheitsgründen dürfen nur bekannt E-Mail Absender die Garage öffnen
- Die GPIO Ports so konfigurieren, dass diese über die GPIO Nummer angesprochen werden können
- Einen beliebigen GPIO Port der Variablen zuordnen. Hier wird das Trigger Signal des Relais Moduls angeschlossen
- Diesen Port als Ausgang schalten
- Für den Zugriff auf das IMAP Postfach wird das Objekt mail erstellt. Wichtig: die meisten Provider erlauben nur noch den Zugang über SSL!
- Anmeldung am IMAP Server
- Den Posteingang (Inbox) auswählen
- Nach allen E-Mails suchen. Die Variable status enthält danach OK, data eine Liste mit ID's, z.B. [b'1 2 3 4'] - wenn vier E-Mails vorhanden sind, Trennzeichen: Leerzeichen
- Array für Mail ID's initialisieren
- Mail ID's in ein Array überführen
- Schleife zur Bearbeitung aller E-Mails im Posteingang
- E-Mail einlesen
- Schleife zur Auswertung der E-Mail
- Ist der Inhalt ein Tupel?
- Nachricht extrahieren (Header in response_part[0] wird nicht benötigt)
- Absender extrahieren und in Kleinbuchstaben umwandeln
- Betreff extrahieren und in Kleinbuchstaben umwandeln
- Spezielles Handlung für Nachrichten, da es sich auch um nicht Textnachrichten handeln kann
- Default: Absender ist nicht berechtigt
- Liste der erlaubten Absender durchlaufen
- Ist der Absender in der Liste?
- Ja, dann Zugriff erlauben
- Absender berechtigt?
- Absender und Betreff anzeigen
- Nachricht für Kontroll E-Mail vorbereiten. Bodytext bei Bedarf ändern
- Enthält der Betreff open garage?
- Ja, dann das Relais einschalten
- 1 Sekunde warten
- Relais wieder ausschalten
- Betreff für Kontroll E-Mail
- Absender der Kontroll E-Mail
- Empfänger der Kontroll E-Mail
- Server für E-Mail Versand definieren (auch hier SSL!)
- Am Server anmelden
- Nachricht verschicken
- Verbindung zum Server beenden
- Nicht berechtigte E-Mail Adresse
- E-Mail Adresse anzeigen
- E-Mail zum Löschen kennzeichnen
- E-Mails löschen
- Verbindung zum IMAP Server schließen
- ... und abmelden
- GPIO Ports zurücksetzen
- Der Code enthält noch keine Fehlerbehandlung
- Es fehlt eine Endlosschleife, die regelmäßig auf dem E-Mail Server nach neuen Nachrichten sucht
- Die Kontroll E-Mail kann auch entfallen
- Dafür könnte eine Warnung verschickt werden, wenn eine nicht berechtigte Person versucht die Garage zu öffnen
- Ich empfehle den Einsatz einer eigenen E-Mail Adresse, die nur für diesen Zweck genutzt wird und auch nur berechtigten Personen kommuniziert wird
- Potentielle Spam E-Mails werden automatisch gelöscht, da sich der Absender nicht in der Liste der erlaubten Personen befindet
Linux Kommandozeilen Befehle
Linux Kommandozeilen Befehle
Betreibt man den Raspberry Pi ohne grafische Oberfläche, kommt man an den Kommandozeilen Befehlen nicht vorbei. Die wichtigsten werden hier erklärt.
pwd (print working directory) zeigt das aktuelle Verzeichnis an, in dem man sich befindet. Nach der Anmeldung mit dem User pi befindet man sich im Home Verzeichnis des Benutzers: /home/pi
ls zeigt den Inhalt eines Verzeichnisses an. Ohne Argumente werden Dateien und Verzeichnisse mit Leerzeichen getrennt angezeigt, z.B.:
ablage beispiel.txt textdatei.txt
Mit ls -l erhält man die ausführliche Form (long):
total 12
drwxr-xr-x 2 pi pi 4096 Feb 21 12:04 ablage
-rw-r--r-- 1 pi pi 9 Feb 21 12:04 beispiel.txt
-rw-r--r-- 1 pi pi 12 Feb 21 12:03 textdatei.txt
Sollen auch die versteckten Dateien (beginnen mit einem Punkt) angezeigt werden, benötigt man zusätzlich das Argument -a ls -la
drwxr-xr-x 3 pi pi 4096 Feb 21 12:04 .
drwxr-xr-x 9 pi pi 4096 Feb 21 12:03 ..
drwxr-xr-x 2 pi pi 4096 Feb 21 12:04 ablage
-rw-r--r-- 1 pi pi 9 Feb 21 12:04 beispiel.txt
-rw-r--r-- 1 pi pi 7 Feb 21 12:04 .geheim
-rw-r--r-- 1 pi pi 12 Feb 21 12:03 textdatei.txt
ls kennt noch weitere Argumente. ls --help zeigt alle Möglichkeiten des Befehls.
--help kann bei allen Befehlen benutzt werden, um die Liste der Optionen und Argumente zu erhalten. Noch umfangreichere Informationen erhält man mit man (manual). Beispiel: man ls
cd (change directory) wechselt in ein Verzeichis. cd / wechselt auf die oberste Ebene, cd /home/pi/ablage in das Unterverzeichnis des Home Verzeichnisses. cd ~ wechselt in das Home Verzeichnis des Users. ~ entspricht dem Home Verzeichnis.
touch text.txt erstellt eine leere Datei mit dem Namen text.txt
rm text.txt (remove file) löscht die Datei mit dem Namen text.txt
mkdir test (make directory) erstellt ein Unterverzeichnis mit dem Namen test. Es besteht auch die Möglichkeit mit einem Befehl mehrere Verzeichnisebenen anzulegen: mkdir -p test/ablage/finanzen/versicherungen
rmdir test (remove directory) löscht ein leeres Unterverzeichnis mit dem Namen test.
mv beispiel.txt ablage (move) verschiebt eine Datei in ein Verzeichnis oder benennt diese um.
Hinweis: Handelt es sich bei ablage nicht um ein Verzeichnis, wird die Datei beispiel.txt umbenannt in ablage
Für Linux gibt es mehrere Texteditoren. Einige stehen in der Grundinstallation bereits zur Verfügung, andere können nachträglich installiert werden. vi dürfte der älteste Editor sein, den ich selbst nicht nutze, da er nach dem Öffnen keinerlei Hilfe anzeigt. Für viele Zwecke reicht der Editor nano aus.
nano test.txt
Im Editor werden in den untersten beiden Zeilen die wichtigsten Befehle angezeigt, wobei ein wichtiger Befehl nicht aufgeführt ist: ^S zum Speichern bzw. Zwischenspeichern des Inhaltes. Beendet man den Editor mit ^X ([Strg]-Taste + X) und der Inhalt hat sich geändert, muss man die Frage "Save modified buffer?" mit Y beantworten und den Namen der Datei mit [Enter] bestätigen.
whoami (who am I? wer bin ich?) zeigt den aktuellen User an.
Berechtigungen:
Mit ls -l text* werden die Berechtigungen für Dateien und Verzeichnisse angezeigt, in diesem Beispiel alle Einträge, die mit text beginnen:
-rw-r--r-- 1 pi pi 12 Feb 21 12:03 textdatei.txt
Das erste Zeichen in -rw-r--r-- enthält den Bindestrich - für eine Datei, d für ein Verzeichnis (d=directory) und l für einen symbolischen Link. Es folgen drei Dreierblöcke für User, Group und Other Berechtigung. Jeder Dreierblock enthält die Berechtigung für Lesen (r=read), Schreiben (w=write) und Ausführen (x=execute). Ein Bindstrich sagt aus, dass die entsprechende Berechtigung nicht vorhanden ist.
rwx Berechtigung zum Lesen, Schreiben und Ausführen
rw- Berechtigung zum Lesen und Schreiben
r-- Berechtigung nur zum Lesen
-rw-r--r--: es handelt sich um eine Datei, der User besitzt Lese- und Schreibrechte (rw-), die Gruppe und Andere nur Leserechte (r--)
su wechselt zum Benutzer root. Das sollte nur in Ausnahmefällen erfolgen, da der Benutzer root über alle Rechte verfügt. Werden für einzelne Aktionen mehr Rechte benötigt, ist es besser, dem Befehl sudo voranzustellen.
chmod (change permission) verändert Berechtigungen. Möchte man der Gruppe auch Schreibrechte für die Datei geben, wird der Befehl chmod g=rw textdatei.txt benötigt. Die drei Dreierblöcke können auch in Zahlenformat angegeben werden, wobei 4=Leserecht, 2=Schreibrecht und 1=Ausführen Berechtigung entspricht. Nur Lesen entspricht 4, Lesen und Schreiben 4 + 2 = 6 und zusätzlich noch Ausführen 4 + 2 + 1 = 7. chmod 760 textdatei.txt gibt dem User alle Rechte, der Gruppe Lese- und Schreibrechte und anderen keine Rechte. Ergebnis:
-rwxrw---- 1 pi pi 12 Feb 21 12:03 textdatei.txt
chmod 000 textdatei.txt entzieht alle Rechte (auch wenn das wenig Sinn macht). In diesem Fall hätte der User pi nicht einmal die Berechtigungen an seiner eigenen Datei!
cat textdatei.txt zeigt den Inhalt der Datei textdatei.txt an.
grep [Suchbegriff] textdatei.txt sucht [Suchbegriff] in der Datei textdatei.txt und zeigt das Ergebnis an. Der Suchbegriff wird farbig hervorgehoben. Dieser grep Befehl wird häufig zusammen mit der sogenannten Pipe Methode benutzt. Die Pipe | sorgt dafür, dass das Ausgabe eines Befehls umgeleitet wird als Eingabe für den nächsten Befehl:
cat textdatei.txt | grep mit Der Inhalt der Datei textdatei.txt wird an den grep Befehl umgeleitet und nach mit gesucht.
lsusb zeigt die USB Devices an, die am Raspberry Pi angeschlossen sind.
Den Raspberry Pi sollte man - wie einen Windows PC auch - nicht einfach ausschalten, sondern kontrolliert herunterfahren. Dafür wird die root Berechtigung benötigt: sudo shutdown -h now. Ein Neustart ist ebenfalls möglich: sudo shutdown -r now
ps zeigt an, welche Prozesse laufen. Mit ps -a werden die Prozesse aller User angezeigt, und mit ps -A zusätzlich die Hintergrundprozesse.
Manchmal ist es erforderlich einen Prozess zu beenden. Das geht am schnellsten über die Process ID.
Beispiel: ps -A | grep gammu
Suche in allen Prozessen nach gammu und zeige das Ergebnis an:
495 ? 00:00:00 gammu-smsd
Die Zeile beginnt mit der Prozess ID (hier: 495). Mit sudo kill 495 wird der Prozess beendet.
Möchte man das Ergebnis eines Befehls nicht am Bildschirm ausgeben, kann dieses mit dem Größerzeichen > umgeleitet werden, z.B. in eine Textdatei: ls -l >verzeichnisliste.txt
Mit dem Befehl wc kann man Wörter zählen (wc=word count). cat textdatei.txt | wc gibt 3 Zahlen aus: Anzahl Zeilen, Anzahl Wörter, Anzahl Zeichen.
Wie bei Windows auch, wird mit rm textdatei.txt die Datei nicht vollständig gelöscht. Das erreicht man mit sgred -zvu textdatei.txt
clear löscht den Bildschirm
cp textdatei.txt kopie.txt kopiert eine Datei.
Wenn man nicht weiß, in welchem Verzeichnis sich eine Datei befindet, kann man diese mit find suchen. Es empfiehlt sich die Suche mit sudo durchzuführen, da der Standard User keine Berechtigung für alle Verzeichnisse besitzt. sudo find / -name .gammurc sucht die Konfigurationsdatei .gammurc ausgehend vom obersten Verzeichnis / in allen Unterverzeichnissen.
groups zeigt an, in welchen Gruppen man Mitglied ist.
passwd ändert das Passwort.
sudo adduser andrea fügt den Benutzer peter hinzu. Wird der Raspberry Pi zur Steuerung genutzt, sind weitere User in der Regel nicht erforderlich. Der neue User wird lediglich für die Erklärung des nächsten Befehls benötigt.
ls -l text*:-rw-r--r-- 1 pi pi 53 Feb 21 13:36 textdatei.txt
Diese Datei gehört dem User pi. Mit sudo chown peter textdatei.txt wird der User peter zum Eigentümer. Versucht jetzt der User pi die Datei mit nano textdatei.txt
zu bearbeiten, erhält er eine Meldung, dass diese Datei nicht beschreibbar ist. Erhält die Gruppe pi mit sudo chmod 660 textdatei.txt die Berechtigung zum Schreiben, ist eine Bearbeitung wieder möglich.
Etwas verwirrend: wird ein neuer User angelegt, wird auch gleichzeitig eine Gruppe mit demselben Namen angelegt. Es gibt nicht nur den User pi, sondern auch die Gruppe pi. ls -l textdatei.txt-rw-rw---- 1 peter pi 53 Feb 21 13:36 textdatei.txt
Als Eigentümer für diese Datei ist jetzt peter hinterlegt, aber weiterhin die Gruppe pi. Wird jetzt die Gruppe mit sudo chgrp test textdatei.txt geändert, kann der user pi nicht
schreibend zugreifen, da er kein Mitglied der Gruppe test ist und Other keine Berechtigung besitzt.
head [Datei] zeigt die ersten 10 Zeilen der [Datei] an.
tail [Datei] zeigt die letzten 10 Zeilen der [Datei] an.
uname -a zeigt Betriebssystem Version an.
vcgencmd measure_temp zeigt Temperatur des Pi an.
vcgencmd get_mem arm zeigt verfügbaren Speicher (RAM) an.
apt list --installed | grep gpio apt list zeigt alle installierten Pakete an und grep filtert in diesem Beispiel nach gpio.
Betreibt man den Raspberry Pi ohne grafische Oberfläche, kommt man an den Kommandozeilen Befehlen nicht vorbei. Die wichtigsten werden hier erklärt.
pwd (print working directory) zeigt das aktuelle Verzeichnis an, in dem man sich befindet. Nach der Anmeldung mit dem User pi befindet man sich im Home Verzeichnis des Benutzers: /home/pi
ls zeigt den Inhalt eines Verzeichnisses an. Ohne Argumente werden Dateien und Verzeichnisse mit Leerzeichen getrennt angezeigt, z.B.:
Mit ls -l erhält man die ausführliche Form (long):
drwxr-xr-x 2 pi pi 4096 Feb 21 12:04 ablage
-rw-r--r-- 1 pi pi 9 Feb 21 12:04 beispiel.txt
-rw-r--r-- 1 pi pi 12 Feb 21 12:03 textdatei.txt
Sollen auch die versteckten Dateien (beginnen mit einem Punkt) angezeigt werden, benötigt man zusätzlich das Argument -a ls -la
drwxr-xr-x 9 pi pi 4096 Feb 21 12:03 ..
drwxr-xr-x 2 pi pi 4096 Feb 21 12:04 ablage
-rw-r--r-- 1 pi pi 9 Feb 21 12:04 beispiel.txt
-rw-r--r-- 1 pi pi 7 Feb 21 12:04 .geheim
-rw-r--r-- 1 pi pi 12 Feb 21 12:03 textdatei.txt
ls kennt noch weitere Argumente. ls --help zeigt alle Möglichkeiten des Befehls.
--help kann bei allen Befehlen benutzt werden, um die Liste der Optionen und Argumente zu erhalten. Noch umfangreichere Informationen erhält man mit man (manual). Beispiel: man ls
cd (change directory) wechselt in ein Verzeichis. cd / wechselt auf die oberste Ebene, cd /home/pi/ablage in das Unterverzeichnis des Home Verzeichnisses. cd ~ wechselt in das Home Verzeichnis des Users. ~ entspricht dem Home Verzeichnis.
touch text.txt erstellt eine leere Datei mit dem Namen text.txt
rm text.txt (remove file) löscht die Datei mit dem Namen text.txt
mkdir test (make directory) erstellt ein Unterverzeichnis mit dem Namen test. Es besteht auch die Möglichkeit mit einem Befehl mehrere Verzeichnisebenen anzulegen: mkdir -p test/ablage/finanzen/versicherungen
rmdir test (remove directory) löscht ein leeres Unterverzeichnis mit dem Namen test.
mv beispiel.txt ablage (move) verschiebt eine Datei in ein Verzeichnis oder benennt diese um.
Hinweis: Handelt es sich bei ablage nicht um ein Verzeichnis, wird die Datei beispiel.txt umbenannt in ablage
Für Linux gibt es mehrere Texteditoren. Einige stehen in der Grundinstallation bereits zur Verfügung, andere können nachträglich installiert werden. vi dürfte der älteste Editor sein, den ich selbst nicht nutze, da er nach dem Öffnen keinerlei Hilfe anzeigt. Für viele Zwecke reicht der Editor nano aus.
nano test.txt
Im Editor werden in den untersten beiden Zeilen die wichtigsten Befehle angezeigt, wobei ein wichtiger Befehl nicht aufgeführt ist: ^S zum Speichern bzw. Zwischenspeichern des Inhaltes. Beendet man den Editor mit ^X ([Strg]-Taste + X) und der Inhalt hat sich geändert, muss man die Frage "Save modified buffer?" mit Y beantworten und den Namen der Datei mit [Enter] bestätigen.
whoami (who am I? wer bin ich?) zeigt den aktuellen User an.
Berechtigungen:
Mit ls -l text* werden die Berechtigungen für Dateien und Verzeichnisse angezeigt, in diesem Beispiel alle Einträge, die mit text beginnen:
Das erste Zeichen in -rw-r--r-- enthält den Bindestrich - für eine Datei, d für ein Verzeichnis (d=directory) und l für einen symbolischen Link. Es folgen drei Dreierblöcke für User, Group und Other Berechtigung. Jeder Dreierblock enthält die Berechtigung für Lesen (r=read), Schreiben (w=write) und Ausführen (x=execute). Ein Bindstrich sagt aus, dass die entsprechende Berechtigung nicht vorhanden ist.
rwx Berechtigung zum Lesen, Schreiben und Ausführen
rw- Berechtigung zum Lesen und Schreiben
r-- Berechtigung nur zum Lesen
-rw-r--r--: es handelt sich um eine Datei, der User besitzt Lese- und Schreibrechte (rw-), die Gruppe und Andere nur Leserechte (r--)
su wechselt zum Benutzer root. Das sollte nur in Ausnahmefällen erfolgen, da der Benutzer root über alle Rechte verfügt. Werden für einzelne Aktionen mehr Rechte benötigt, ist es besser, dem Befehl sudo voranzustellen.
chmod (change permission) verändert Berechtigungen. Möchte man der Gruppe auch Schreibrechte für die Datei geben, wird der Befehl chmod g=rw textdatei.txt benötigt. Die drei Dreierblöcke können auch in Zahlenformat angegeben werden, wobei 4=Leserecht, 2=Schreibrecht und 1=Ausführen Berechtigung entspricht. Nur Lesen entspricht 4, Lesen und Schreiben 4 + 2 = 6 und zusätzlich noch Ausführen 4 + 2 + 1 = 7. chmod 760 textdatei.txt gibt dem User alle Rechte, der Gruppe Lese- und Schreibrechte und anderen keine Rechte. Ergebnis:
chmod 000 textdatei.txt entzieht alle Rechte (auch wenn das wenig Sinn macht). In diesem Fall hätte der User pi nicht einmal die Berechtigungen an seiner eigenen Datei!
cat textdatei.txt zeigt den Inhalt der Datei textdatei.txt an.
grep [Suchbegriff] textdatei.txt sucht [Suchbegriff] in der Datei textdatei.txt und zeigt das Ergebnis an. Der Suchbegriff wird farbig hervorgehoben. Dieser grep Befehl wird häufig zusammen mit der sogenannten Pipe Methode benutzt. Die Pipe | sorgt dafür, dass das Ausgabe eines Befehls umgeleitet wird als Eingabe für den nächsten Befehl:
cat textdatei.txt | grep mit Der Inhalt der Datei textdatei.txt wird an den grep Befehl umgeleitet und nach mit gesucht.
lsusb zeigt die USB Devices an, die am Raspberry Pi angeschlossen sind.
Den Raspberry Pi sollte man - wie einen Windows PC auch - nicht einfach ausschalten, sondern kontrolliert herunterfahren. Dafür wird die root Berechtigung benötigt: sudo shutdown -h now. Ein Neustart ist ebenfalls möglich: sudo shutdown -r now
ps zeigt an, welche Prozesse laufen. Mit ps -a werden die Prozesse aller User angezeigt, und mit ps -A zusätzlich die Hintergrundprozesse.
Manchmal ist es erforderlich einen Prozess zu beenden. Das geht am schnellsten über die Process ID.
Beispiel: ps -A | grep gammu
Suche in allen Prozessen nach gammu und zeige das Ergebnis an:
Möchte man das Ergebnis eines Befehls nicht am Bildschirm ausgeben, kann dieses mit dem Größerzeichen > umgeleitet werden, z.B. in eine Textdatei: ls -l >verzeichnisliste.txt
Mit dem Befehl wc kann man Wörter zählen (wc=word count). cat textdatei.txt | wc gibt 3 Zahlen aus: Anzahl Zeilen, Anzahl Wörter, Anzahl Zeichen.
Wie bei Windows auch, wird mit rm textdatei.txt die Datei nicht vollständig gelöscht. Das erreicht man mit sgred -zvu textdatei.txt
clear löscht den Bildschirm
cp textdatei.txt kopie.txt kopiert eine Datei.
Wenn man nicht weiß, in welchem Verzeichnis sich eine Datei befindet, kann man diese mit find suchen. Es empfiehlt sich die Suche mit sudo durchzuführen, da der Standard User keine Berechtigung für alle Verzeichnisse besitzt. sudo find / -name .gammurc sucht die Konfigurationsdatei .gammurc ausgehend vom obersten Verzeichnis / in allen Unterverzeichnissen.
groups zeigt an, in welchen Gruppen man Mitglied ist.
passwd ändert das Passwort.
sudo adduser andrea fügt den Benutzer peter hinzu. Wird der Raspberry Pi zur Steuerung genutzt, sind weitere User in der Regel nicht erforderlich. Der neue User wird lediglich für die Erklärung des nächsten Befehls benötigt.
ls -l text*:
Etwas verwirrend: wird ein neuer User angelegt, wird auch gleichzeitig eine Gruppe mit demselben Namen angelegt. Es gibt nicht nur den User pi, sondern auch die Gruppe pi. ls -l textdatei.txt
head [Datei] zeigt die ersten 10 Zeilen der [Datei] an.
tail [Datei] zeigt die letzten 10 Zeilen der [Datei] an.
uname -a zeigt Betriebssystem Version an.
vcgencmd measure_temp zeigt Temperatur des Pi an.
vcgencmd get_mem arm zeigt verfügbaren Speicher (RAM) an.
apt list --installed | grep gpio apt list zeigt alle installierten Pakete an und grep filtert in diesem Beispiel nach gpio.
alle aufklappen, alle zuklappen