Projekt:RaspberryPiElektronik

Version vom 18. August 2020, 13:30 Uhr von VinRisen360 (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Crystal Clear action run.png
Einstieg in Raspberry Pi mit GPIO

Status: beta

RaspberryPiElektro.jpg
Beschreibung Einstieg in Elektronikschaltungen mit Raspberry Pi
Ansprechpartner VinRisen360


Einstieg in Raspberry Pi mit GPIO Allgemein

Der Raspberry Pi ist ein Mini-Computer, der sich bei den Bastlern großer Beliebtheit erfreut.
Mit ihm lassen sich ohne großen Aufwand Projekte aller Art umsetzen.
Egal ob es um das die Installation fertiger Projekte aus dem Internet geht oder für die Realisierung eigener kleiner Projekte...
Mit dem Raspberry Pi bleiben einem alle Wege offen.

Auf dieser Projektseite findet ihr tolle Anleitungen für den Einstieg in das Thema 'Raspberry Pi'.
Author der Doku: Paul Freudenberger
Contributors: Dr. Helmut Scholz

Raspberry Pi Installation

Auswahl des Betriebssystems

Zunächst muss das Standard Betriebssystem auf dem Raspberry Pi installiert werden.
Raspberry Pi bietet zwei verschiedene Arten von Betriebssystem:

Raspbian Desktop: Betriebssystem für Einsteiger mit grafischer Oberfläche (Fenster, bedienbar mit Maus und Tastatur)
Raspbian Lite: Betriebssystem für Bastler mit Kommandozeile (Schwarzer Bildschirm mit Schrift, bedienbar mit Tastatur)

Raspbian Lite sollte bevorzugt eingesetzt werden. (Ressourcenschonender, Läuft flüssiger, eigene Projekte erfordern meist keine grafische Oberfläche)

Download der erforderlichen Software

RASPBIAN LITE OS

Unter dem folgenden Link lassen sich die Betriebssysteme kostenlos runterladen:
https://www.raspberrypi.org/downloads/raspbian/
Dort das Betriebssystem 'Raspian Stretch Lite' wählen.

Direkter Download-Link: http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-11-15/2018-11-13-raspbian-stretch-lite.zip

IMAGEWRITER TOOL

Um das Betriebssystem auf die MicroSD-Karte des Raspberry Pi zu schreiben verwendet man folgende Programme:

Unter Windows
- Win32DiskImager
- Download-Link: https://sourceforge.net/projects/win32diskimager/

Unter Linux
- (Bitte klären und validieren)

Installation des Betriebssystems mit Win32DiskImager

  • Entpacken Sie das Raspberry Pi Image (.zip -> .img)
  • Öffnen Sie Win32DiskImager
  • Wählen Sie als Image-File '2018-10-09-raspberry-stretch-lite.img' (Name ggf. anpassen)
  • Wählen Sie den richtigen Laufwerksbuchstaben aus (Siehe MicroSD-Karte)
  • Klicken Sie auf 'Write' und warten Sie bis das Image auf die MicroSD-Karte geschrieben wurde
  • Entfernen Sie die MicroSD-Karte aus Ihrem Computer und setzen Sie sie in den Raspberry Pi ein

Grundeinrichtung Raspbian Lite

  • Schließen Sie alle Komponenten außer das Netzteil an den Raspberry Pi an (HDMI-Kabel, Tastatur, USB/Wifi-Dongles)
  • Schalten Sie den Bildschirm an, bevor Sie den Raspberry Pi in Betrieb nehmen
  • Schließen Sie den Raspberry Pi an ein Netzteil (e.g. Handy-Ladekabel) an (Der Raspberry Pi geht automatisch an)
  • Warten Sie bis alle Meldungen am Bildschirm durchgelaufen sind und der 'Login:' angefordert wird
  • Standard-User: pi, Standard-Password: raspberry (GROß-/KLEINSCHREIBUNG BEACHTEN!)

Jetzt sind Sie am Betriebssystem des Raspberry Pi angemeldet und können Befehle eintippen.

Folgende Befehle sollten zuerst gemacht werden:

raspi-config > Expand Filesystem (Dadurch nutzt der Raspberry Pi die komplette Speicherkapazität der MicroSD-Karte aus)
raspi-config > Advanced Options > Configure Network > WLAN SSID und Passphrase eintragen
raspi-config > Advanced Options > SSH aktivieren (Ermöglicht Fernzugriff auf den Rasperry Pi aus dem gleichen WLAN)
sudo reboot

Ab hier ist die Grundeinrichtung des Raspberry Pi abgeschlossen.
Im Idealfall ist der Raspberry Pi mit dem WLAN/Internet verbunden und kann über SSH innerhalb des eigenen WLANs ferngesteuert werden.

Installation GPIO Library

Mit folgendem Befehl stellen wir sicher, dass "gpio ..."-Befehl auch funktionieren:

sudo apt-get install wiringpi -y

Einführung mit GPIO und Breadboard

Für den Einstieg in das Thema Elektroschaltungen und Raspberry Pi eignet sich GPIO und Breadboard sehr gut.
Hier eine kurze Begriffserklärung:

GPIO - Was ist das?

GPIO bezeichnet den langen streifen aus PINs auf dem Motherboard des Raspberry Pi, es steht für "General purpose input/output. Input/Output bedeutet, das man sie sowohl benutzen kann um dem Pi etwas mitzuteilen (als Input), als auch den Pi etwas ausgeben zu lassen (Output.) Das passiert über Spannungspegel: 3,3V (geringfügig weniger geht auch) signalisiert einen logischen HIGH-Zustand, 0V (oder geringfügig mehr) signalisiert einen logischen LOW-Zustand.
Mit diesen PINs lassen sich alle Arten von Elektroschaltungen bauen.
Sind sind zugleich die Schnittstelle zwischen Kommandozeile (Betriebssystem) und der späteren elektronischen Schaltung.
Hier ein Bild von den GPIO-PINs:
   

Breadboard - Was ist das?

Das Breadboard ist im Prinzip ein einfaches Gitter, auf das sich elektronische Schaltungen stecken lassen.
Es dient zur Veranschaulichung der Schaltung und ermöglicht schnelles Arbeiten. (Kein Lötzinn erforderlich)
Hier ein Bild eines Breadboards:
 

Projekt 1: LED via Kommandozeile an- und ausschalten

Benötigte Bauteile: LED, 220 Ohm-Widerstand
Geschätzte Dauer: 5-10 Minuten

Folgende Schaltung sollte aufgebaut werden:
 

Mit folgendem Befehl lässt sich die LED an- und ausschalten:

gpio -g mode 17 output
gpio -g write 17 1
gpio -g write 17 0

gpio -g: Der Parameter -g empfiehlt sich, damit die PIN-Nummern gleich den GPIO-Nummerierungen entsprechen
mode 17 output: Bedeutet GPIO PIN 17 auf Strom-Zufuhr schalten
write 17 1: Bedeutet GPIO PIN 17 Strom auf AN schalten
write 17 0: Bedeutet GPIO PIN 17 Strom auf AUS schalten

Berechnung des Widerstands

Der Widerstand ist von der LED abhängig und sorgt dafür, das von den verfügbaren 3,3V des GPIO der richtige Anteil an der Diode anliegt. Der Strom durch die LED sollte ungefähr 10 mA betragen, manche LEDs vertragen unterschiedlich hohe Ströme, manche leuchten schon bei wesentlich kleineren Strömen ordentlich bei denen andere nur im dunkeln erkennbar sind. Je nach Material der LED (das auch für die Farbe verantwortlich ist) fallen an der LED dann ungefähr zwischen 1,6 und 3V, die sogenannte Flußspannung ab, bei roten LEDs eher geringe Spannungen, dann kommen ungefähr orange, gelbe, grüne und dann blaue, weiße (und UV) LEDs, die die höchste Spannung "benötigen." Leuchtdioden nicht direkt an Spannungsquellen anschließen, da bei Ihnen schon eine geringe Spannungserhöhung eine erhebliche Stromerhöhung bedeuten kann. Bei einer roten LED mit 1,6V Flußspannung muss der Spannungsabfall am Widerstand also bei 3,3-1,6=1,7V sein, nach Ohm Rv=1,7V/0,01A=170 Ohm. Den gibts aber meistens nicht, also den nächstgrößeren Wert benutzen den man findet. wenn man es zu hell findet, Widerstand vergrößern, wenn zu dunkel, Widerstand verkleinern.

Projekt 2: Temperatur Sensor verwenden

Benötigte Bauteile: DHT11 Humidity Sensor, 10k Ohm-Widerstand (Wenn nicht schon auf dem DHT11 vorhanden)
Geschätzte Dauer: 30-60 Minuten

Adafruit Library für DHT11-Sensor installieren

Quelle: https://www.raspberrypi-spy.co.uk/2017/09/dht11-temperature-and-humidity-sensor-raspberry-pi/

Damit man die Werte vom Sensor auslesen kann, muss eine Python Library installiert werden.
Führen Sie folgende Befehle aus:

sudo apt-get install build-essential python-dev python-openssl git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

Der Temperatur Sensor sieht so aus:
 

Folgende Schaltung sollte aufgebaut werden:
 

Mit folgendem Code lässt sich die Temperatur über den Sensor ausgeben:

cd ~/Adafruit_Python_DHT/examples
sudo ./AdafruitDHT.py 11 4

Erklärung des Codes

<AdafruitDHT.py> ist eine Datei, die den notwendigen Code zum Auslesen des Sensors enthält
<11> bedeutet einen DHT11-Sensor auslesen (DHT22 oder AM2302-Sensor ebenfalls möglich)
<4> bedeutet GPIO PIN 4 wurde auf den DATA-PIN gesteckt

Projekt 3: Webserver auf Raspberry Pi installieren

Um einen Webserver (Apache) auf dem Rasperry Pi zu installieren müssen folgende Befehle ausgeführt werden:

sudo apt-get install apache2
sudo apt-get install php php-mbstring
sudo apt-get install mysql-server php-mysql

Projekt 4: Temperature und Humidity Daten auf Website ausgeben

Zunächst muss das Script, welches mit dem DHT11 Sensor interagiert in das /var/www Verzeichnis verschoben/kopiert werden.
Als nächstes muss dem User www-data das Recht für sudo Befehle eingeräumt werden:

sudo nano /etc/sudoers
Zeile einfügen: www-data ALL=(ALL) NOPASSWD: ALL

Zu aller letzt muss eine index.php mit folgendem Text erstellt werden:

<?php
$shellstr = "sudo python /var/www/html/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4";
$str_lastline = exec($shellstr, $arr_output, $retcode);
?>
<html>
<body>
Gemessener Wert: <?php echo $str_lastline ?>
</body>
</html>

Jetzt kann man mit einem beliebigen Browser auf die IP des Raspberry Pi gehen:
http://198.18.1.6

Projekt 5: Messdaten aus SQL-Datenbank lesen und auf Website ausgeben

Zunächst müssen die Pakete aus Projekt 4 installiert werden (s. oben)
Danach muss eine index.php unter /var/www/html/index.php mit folgendem Text erstellt werden:

<?php
 /*
README
SQL should look like this:
DATABASE: mydatabase
TABLE: messdaten
TABLE (messdaten)
id | temperature (varchar255)| humidity (varchar255)
1  | 23.0		 | 33%
*/
try {
  $hostname = "localhost";
  $database = "mydatabase";
  $username = "helmut";
  $password = "P@ssw0rd";
  $pdo = new PDO(
    'mysql:' . 
    'host=' . $hostname . ';' . 
    'dbname=' . $database . ';' . 
    'charset=utf8', $username, $password);
} catch (PDOException $e) {
  die("Connection to SQL-DB failed: " . $e->getMessage());
}
$result = $pdo->query("SELECT * FROM messdaten ORDER BY id DESC LIMIT 1");
if ($result) {
  $messwert = $result[0]['temperature'];
} else {
  $messwert = "Kein Messwert in der Datenbank";
}
?>
<html>
<body>
Gemessener Wert: <?php echo $messwert ?> Grad Celsius
</body>
</html>

Jetzt kann man mit einem beliebigen Browser auf die IP des Raspberry Pi gehen:
http://198.18.1.6