Raspberry und Raspbian die GPIO steuern - Teil 1

Eigene oder Gemeinschaftsprojekte, Klassen, Module, Codeschnipsel, HowTos, ...
Antworten
besenmuckel
Foriker
Beiträge: 114
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Raspberry und Raspbian die GPIO steuern - Teil 1

Beitrag von besenmuckel » So 3. Feb 2019, 23:26

Ich versuche hier eine einfache Anleitung zu geben wie man die entsprechenden GPIO aus Gambas ansteuert. Diesen Beitrag möchte ich so ausführlich wie möglich machen, so das auch ein nicht Geübter es nachvollziehen kann. Denn die Anleitungen im Netz sind manchmal nicht mehr aktuell. Auch ist die Beschreibung wenn man damit anfängt alles verwirrend. Im Projekt soll dann auch nur die Funktion rein LED an, aus und blinken.
In diesen Beispiel wird die Spannungsversorgung für die LED vom Raspi genommen! Wer z. B. eine Lampe oder anderes im Hause steuern möchte geht das so nicht. Ihr benötigt dann z. B. ein Relais und am besten ein Relais mit Optokoppler.

Zum schalten benutze ich hier im Beispiel die Bibliotheken von wiringpi.
Auf meinen Raspberry ist "Raspbian GNU/Linux 9 (stretch)" waren die schon per default installiert. Welche Version ihr habt könnt ihr auslesen mit Befehl

Code: Alles auswählen

cat /etc/os-release
Überprüfen könnt ihr es mit den Befehlen

Code: Alles auswählen

sudo apt-get update
apt-cache policy wiringpi
Gambas muss noch installiert werden falls noch nicht gemacht. Es ist nicht per default installiert. Installieren mit Bfehlen

Code: Alles auswählen

sudo apt-get update
sudo apt-get install gambas3
Ich kann in einen Beitrag wahrscheinlich nur max 3 Bilder hinzufügen. Deshalb teile ich ihn in mehreren auf!

Anleitung - Teil 1
Öffnet die Konsole und erstellt ein neues Verzeichnis(Ordner) LED17 in euer Home-Verzeichnis mit Befehl

Code: Alles auswählen

mkdir LED17
verzeichnis_erstellen.png
verzeichnis_erstellen.png (4.04 KiB) 297 mal betrachtet
Diese Bezeichnung ist bewust gewählt da in vielen Beispielen im Netz auch dieser Anschluss beschrieben ist. Dazu aber mehr später.
Jetzt könnt ihr Gambas starten und ein neues Projekt erstellen, ob ihr hier die GTK- oder QT-Auswahl nehmt ist hier egal. Danach wählt ihr das erstellte Verzeichnis LED17 aus. Klick auf weiter und vergebt einen Namen usw. Hier am Beispiel ist es test17.
project_name.png
project_name.png (19.14 KiB) 297 mal betrachtet
Wenn sich das Fenster geöffnet hat klickt doppelt auf das Formular FMain, dies ist die Startform.
doppelklick_form.png
doppelklick_form.png (24.01 KiB) 297 mal betrachtet
Zuletzt geändert von besenmuckel am Di 5. Feb 2019, 18:24, insgesamt 11-mal geändert.

besenmuckel
Foriker
Beiträge: 114
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Raspberry und Raspbian die GPIO steuern - Teil 2

Beitrag von besenmuckel » So 3. Feb 2019, 23:27

Anleitung - Teil 2

Jetzt könnt ihr mit gedrückter Maustaste die entsprechenden Sachen aus den Werkzeugkasten auf die Form ziehen. Für dieses Beispiel werden 4 OK-Button benötigt, 1 Label und 2 Timer. Den Timer findet ihr im Werzeugkasten unter Reiter Spezial.
Benennt die 4 Button entsprechend um. Dazu rechts in den Eigenschaften unter Text den gewünschten eintragen(siehe Bild)
form_object.png
form_object.png (49.22 KiB) 241 mal betrachtet
Hier der Quell-Code

Code: Alles auswählen

' Gambas class file

Public Sub Form_Open()
  
  '   Lege den GPIO 17 = Pin 11 als Ausgang fest.
  Shell "gpio -g mode 17 out"
  '   Timer2 einschalten und 5x die Sekunde den Zustand auslesen.
  Timer2.Enabled = True
  Timer2.Delay = 200
  
End

Public Sub Form_Close()
  
  '   Wird das Programm beendet schalte die LED aus.
  Button2_Click()
  
End

Public Sub Button1_Click()
  
  Shell "gpio -g write 17 1"
  
End

Public Sub Button2_Click()
  
  Shell "gpio -g write 17 0"
  
End

Public Sub Button3_Click()
  
  Timer1.Enabled = True
  
End

Public Sub Button4_Click()
  
  Timer1.Enabled = False
  Shell "gpio -g write 17 0"
  
End

Public Sub Timer1_Timer()
  
  Dim blinker As String
  
  '   Lese GPIO ein und speichere sie in Variable jede Sekunde.
  Shell "gpio -g read 17" Wait To blinker
  '   Variable ohne Zeilenumbruch auswerten und entsprechenden Befehl ausführen.
  If Trim(blinker) = "1" Then
    Shell "gpio -g write 17 0"
  Else
    Shell "gpio -g write 17 1"
  Endif
  
End

Public Sub Timer2_Timer()
  
  Dim zustand As String
  
  Shell "gpio -g read 17" Wait To zustand
  If Trim(zustand) = "1" Then
    Label1.Background = Color.Yellow
  Else
    Label1.Background = Color.Default
  Endif
  
End
 
Bevor ihr das Projekt startet (ausführt), bitte die Anleitung weiter lesen. Denn es werden die entsprechenden GPIO gesetz und geschaltet.
Wer es testen möchte ohne LED kann Teil 2.a überspringen.

Raspberry und Raspbian die GPIO steuern - Teil 2.a
In meinen Beispiel benutze ich hier den Pin 9 und Pin 11 auf den Raspberry.
raspi_hardware.png
raspi_hardware.png (281.43 KiB) 249 mal betrachtet
Pin 11 ist hier der GPIO 17 und Pin 9 GND. Schaltplan entspricht den Bild Schaltung 1 im Link.
Nachlesen wie ihr die LED mit den entsprechenden Widerstand anschliesst könnt ihr z. B. hier.
https://www.elektronik-kompendium.de/si ... 102181.htm
Natürlich lässt sich das Projekt starten ohne eine LED anzuschliessen. Mit einer LED macht es sich schöner und man hat den echten Beweis.
Zuletzt geändert von besenmuckel am Di 5. Feb 2019, 02:18, insgesamt 22-mal geändert.

besenmuckel
Foriker
Beiträge: 114
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Raspberry und Raspbian die GPIO steuern - Teil 3

Beitrag von besenmuckel » So 3. Feb 2019, 23:27

Anleitung -Teil 3

Die aktuelle Belegung der GPIO auf euren Raspberry erhaltet ihr mit gpio readall oder den Befehl

Code: Alles auswählen

gpio -g readall
In meinen Beispiel werden die Befehle mit gpio -g gemacht. Die Option -g bedeutet das er die GPIO-Bezeichnung von Raspberry(BCM) nimmt. Ohne diese Option ist der Befehl ein anderer. Gehe hier in der Anleitung darauf aber nicht ein.
Ist dieser Anschluss schon belegt könnt ihr auch einen anderen nehmen. Der Quell-Code in Gambas muss dann entsprechend geändert werden. Also vorher mit den Befehl prüfen ob alles passt.

Siehe auch dazu unter der Projekt-Beschreibung die LED steuern uber Gambas - Teil 5
Hier am Beispiel an Pin 11 = GPIO(BCM) 17
Bevor ihr das Programm startet seht ihr Bild 1. Dazu in der Konsole den Befehl gpio -g readall eingeben. Wenn das Programm gestartet ist, wird automatisch die Mode für den 17 auf out gesetzt. Überprüfen könnt ihr es wieder mit den gleichen Befehl.
gpio_read_all.png
gpio_read_all.png (63.3 KiB) 246 mal betrachtet
Wenn ihr jetzt auf den Button LED an klickt ändert sich der Zustand in 1. Überprüfen wieder mit den gleichen Befehl.
gpio_read_all_2.png
gpio_read_all_2.png (23.75 KiB) 244 mal betrachtet
Wer eine LED angeschlossen hat, der sieht dann auch das sie an ist. Für die keine LED angeschlossen haben ändert sich nur die Farbe des Label, wenn das Ganbas-Projekt geöffnet ist. Um den Zustand für die 17 nur anzeigen reicht auch der Konsolen-Befehl

Code: Alles auswählen

gpio -g read 17
Er gibt bei aus eine 0 zurück und bei ein eine 1
Die Einstellungen für Mode werden hier im Beispiel nicht dauerhaft gespeichert und sind beim Neustart wieder weg.
Sowohl beim Gambas-Projekt als auch bei den Scripten ist sie beim Start eingeschaltet.
Zuletzt geändert von besenmuckel am Di 5. Feb 2019, 02:12, insgesamt 18-mal geändert.

besenmuckel
Foriker
Beiträge: 114
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Raspberry und Raspbian die GPIO steuern - Teil 4

Beitrag von besenmuckel » So 3. Feb 2019, 23:43

Anleitung - Teil 4

Shell-Script zum schalten der LED
Einfaches Shell-Script zum einschalten der LED. Offnet dazu den Text-Editor(leafpad über das Menü), hier nicht das Libre-Office öffnen und kopiert den Text hinein. Dann Datei->speichern unter -> das erstellt Verzeichnis LED17 auswählen und mit Namen LEDan.sh abspeichern.

Code: Alles auswählen

#!/bin/sh

# Nur in der 1. Zeile wird angewiesen 
# welches Programm gestartet werden soll beim ausführen.
# Alle weiteren mit Raute sind Kommentare.

# Schalte mode 17 = Pin 11 auf out
gpio -g mode 17 out

# Schalte LED ein
gpio -g write 17 1

# Programm schliessen
exit
Einfaches Shell-Script zum ausschalten der LED. Unter leafpad Datei->neu auswählen den Text einfügen und speichern unter im Verzeichnis LED17 mit Namen LEDaus.sh

Code: Alles auswählen

#!/bin/sh

gpio -g mode 17 out

gpio -g write 17 0

exit
Nun müssen die Scripte nur noch ausführbar gemacht werden. Hier am Beispiel über die Konsole. Öffnet ein Terminal. Wechselt mit den Befehl cd LED17/ in das Verzeichnis und mit Befehl ls seht ihr den Inhalt. Die Farbe der Scripte ist weiss. Jetzt müssen die beiden Scripte mit chmod +x ausführbar gemacht werden. Siehe die Befehle im Bild. Hier am Beispiel von LEDan.sh

Code: Alles auswählen

chmod +x LEDan.sh
Wenn ihr jetzt nochmal ls aufruft hat sich die Farbe geändert und man kann diese starten zum schalten der LED. Diese Scripte deshalb weil es sich einfacher macht um sie vom anderen Rechner oder Smartphone zu starten.
ausfuehrbar.png
ausfuehrbar.png (13.86 KiB) 241 mal betrachtet
Starten könnt ihr das Script zum einschalten der LED, wenn ihr in den Verzeichnis LED17 seit wo das Script liegt reicht es mit mit

Code: Alles auswählen

./LEDan.sh
Befindet ihr euch nicht in den Verzeichnis, dann mit kompletten Pfad. Siehe Bild. Hier am Beispiel ausschalten

Code: Alles auswählen

/home/pi/LED17/LEDaus.sh
led_aus_pfad.png
led_aus_pfad.png (4.82 KiB) 241 mal betrachtet

Einstellung zum aktivieren von ssh
Das geht über Menü->Einstellungen->Raspberry-Pi Konfiguration. Dann auf Reiter Schnittstelle->SSH aktivieren auswählen.
Wer es über das Terminal machen möchte wäre der Befehl

Code: Alles auswählen

sudo raspi-config
Zuletzt geändert von besenmuckel am Di 5. Feb 2019, 02:22, insgesamt 20-mal geändert.

besenmuckel
Foriker
Beiträge: 114
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Raspberry und Raspbian die GPIO steuern - Teil 5

Beitrag von besenmuckel » So 3. Feb 2019, 23:44

Anleitung - Teil 5

Beschreibung die LED steuern uber Gambas.

project_test17.png
project_test17.png (6.95 KiB) 229 mal betrachtet
Beim Start des Projekts wird die Mode für die 17 auf out geschaltet. Mit Klick auf Button LED an wird das Label gelb und die GPIO bekommt 1 für an. Überprüfen könnst ihr es auch mit den Konsolen-Befehl

Code: Alles auswählen

gpio -g read 17
Bei Klick auf Button LED aus wird das Label transparent GPIO bekommt 0. Mit Klick auf Button Blinker an schaltet er die Zustände jede Sekunde um. Den Timer2 habe ich auf der schnelle eingebaut, damit die ohne LED auch sehen können ob der geschaltet wurde vom Smartphone oder anderen Rechner. Er liest die 5x die Sekunde aus. Man könnte aber auch alles in ein Timer packen.

Die LED mit den Smartphone und hier am Beispiel mit der App RasPiCheck steuern.
Es muss aber ssh auf den Raspi eingeschaltet sein. Ist nicht mehr per default aktiviert. Siehe Teil 4

RasPiCheck starten. Den Raspberry hinzufügen. Dann klick auf Befehle hinzufügen. Befehl und Name eingeben und speichern. Mit Klick auf den Befehl wird dieser dann ausgeführt.
raspicheck_2.png
raspicheck_2.png (76.03 KiB) 263 mal betrachtet
Die LED von einen Linux-Rechner steuern.
Konsole auf den Linux-Rechner öffnen. Befehl ssh pi@Raspberry-IP

Code: Alles auswählen

ssh  pi@192.xxx.xxx.xx
IP-Adresse anpassen die von euren Raspberry.
Wenn das Anmelden funktioniert hat, könnt ihr die LED am einfachsten einschalten mit den Script. Wenn das Gambas-Project gestartet ist seht ihr es auch an der Farbe des Label.
Konsolen-Befehle zum schalten
Einschalten

Code: Alles auswählen

/home/pi/LED17/LEDan.sh
Ausschalten

Code: Alles auswählen

/home/pi/LED17/LEDaus.sh
Zim Abmelden vom Raspi mit Befehl
konsole_befehle.png
konsole_befehle.png (14.2 KiB) 242 mal betrachtet
Die LED von einen Windows-Rechner über PuTTY steuern.
Da ich seit Jahren kein Windows mehr habe füge ich hier mal ein Link ein der noch aktuell sein sollte. Evtl. kann das jemand überprüfen und ich passe es hier an.
https://tutorials-raspberrypi.de/raspbe ... iff-putty/
Zum schalten sind die Befehle wie bei Linux. Siehe dort unter Konsolen-Befehle zum schalten

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste