Raspberry GPIOs
-
- Foriker
- Beiträge: 8
- Registriert: Mi 10. Jan 2018, 18:11
- Kontaktdaten:
Raspberry GPIOs
Hallo, ich bin neu hier und benötige Hilfe bei Gambas !
Es geht um den Raspberry 3 B+. Da genau um die generellen IOs. Die kann ich ja garnicht steuern unter Gambas (V 3.10) oder sehe ich das falsch ? Ich finde leider keine Lib für für die IOs. Gibt es keine ?? oder bin ich nur zu Dumm ? Also ich suche eine Lib mit der ich die IOs Steuern bzw. abfragen kann. Gut währe auch den I2C Bus zu benutzen. Es gibt ja für Pythen (was ist das denn) die wringPi aber ich weis nicht wie ich die in Gambas einbinden soll. Nur zum verständnis ich finde Gambas sehr gut nur die Verbreitung in Deutschland ist doch sehr begrenzt es gibt sehr viele Spanier oder auch Franzosen die damit was machen, nur die verstehe ich nicht -SORRY-. Also vieleicht findet hier ein Kontakt statt, ich würde mich freuen. Ach ja, es gibt auch keine kaufbaren Libs für Gambas anders als für VB. Alles ein wenig bescheidener. Ich hoffe doch auf das beste !! So das solls erstmal gewesen sein. Bei bedarf teile ich meine Email Adresse mit.
Vielen Dank für euer Intresse !!
Gruss Günni / Fileplayer
Es geht um den Raspberry 3 B+. Da genau um die generellen IOs. Die kann ich ja garnicht steuern unter Gambas (V 3.10) oder sehe ich das falsch ? Ich finde leider keine Lib für für die IOs. Gibt es keine ?? oder bin ich nur zu Dumm ? Also ich suche eine Lib mit der ich die IOs Steuern bzw. abfragen kann. Gut währe auch den I2C Bus zu benutzen. Es gibt ja für Pythen (was ist das denn) die wringPi aber ich weis nicht wie ich die in Gambas einbinden soll. Nur zum verständnis ich finde Gambas sehr gut nur die Verbreitung in Deutschland ist doch sehr begrenzt es gibt sehr viele Spanier oder auch Franzosen die damit was machen, nur die verstehe ich nicht -SORRY-. Also vieleicht findet hier ein Kontakt statt, ich würde mich freuen. Ach ja, es gibt auch keine kaufbaren Libs für Gambas anders als für VB. Alles ein wenig bescheidener. Ich hoffe doch auf das beste !! So das solls erstmal gewesen sein. Bei bedarf teile ich meine Email Adresse mit.
Vielen Dank für euer Intresse !!
Gruss Günni / Fileplayer
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Die GPIOs lassen sich mit Gambas(+ Shell-Befehl) wunderbar steuern. Nur gibt es hier wenig Infos dazu. Kannst ja mal hier im Forum suchen einige und ich haben schon was gemacht. Sudo-Rechte sind seit ca. 1-2 Jahren nicht meht erforderlich zum steuern der GPIOs.
Python ist eine Programmiersprache wie C, C++, Java, Gambas oder andere auch. Die meisten Beispiele sind in Python beschrieben. Es gibt aber kleine Unterschiede zwischen Python2 und Python3. Auf den Raspi sind beide drauf. Wenn du Python lernen willst nimmt gleich Python3. Aber egal welche Programmierung du lernen willst der Anfang ist schwer und der Weg ist lang.
Falls du ein einfaches Beispiel brauchst zum schalten einer LED mit Gambas kann ich ja dies mal hier reinstellen. Muss nur erst suchen wo ich die LED, Widerstände, Relais usw. habe. Es läuft bei mir z. Z. nur der VDR-Client auf meinen Raspi.
Python ist eine Programmiersprache wie C, C++, Java, Gambas oder andere auch. Die meisten Beispiele sind in Python beschrieben. Es gibt aber kleine Unterschiede zwischen Python2 und Python3. Auf den Raspi sind beide drauf. Wenn du Python lernen willst nimmt gleich Python3. Aber egal welche Programmierung du lernen willst der Anfang ist schwer und der Weg ist lang.
Falls du ein einfaches Beispiel brauchst zum schalten einer LED mit Gambas kann ich ja dies mal hier reinstellen. Muss nur erst suchen wo ich die LED, Widerstände, Relais usw. habe. Es läuft bei mir z. Z. nur der VDR-Client auf meinen Raspi.
-
- Foriker
- Beiträge: 8
- Registriert: Mi 10. Jan 2018, 18:11
- Kontaktdaten:
Re: Raspberry GPIOs
Hallo Besenmuckel !
Danke für die Antwort, Du bist wohl der einzige !!
Also die Sache mit den GPIOs ist im Moment zurückgestellt, ich habe das mit der Lib PIGPIO zur Zeit gelöst ! Leider muss dazu das Programm als ROOT laufen, aber dazu später mehr.
Vielen Dank für die Antwort
Gruss Günni
Danke für die Antwort, Du bist wohl der einzige !!
Also die Sache mit den GPIOs ist im Moment zurückgestellt, ich habe das mit der Lib PIGPIO zur Zeit gelöst ! Leider muss dazu das Programm als ROOT laufen, aber dazu später mehr.
Vielen Dank für die Antwort
Gruss Günni
Re: Raspberry GPIOs
check http://captainbodgit.blogspot.co.uk/201 ... brary.html
also
check http://captainbodgit.blogspot.com/2013/ ... ambas.html
some examples useful for your needs.
also
check http://captainbodgit.blogspot.com/2013/ ... ambas.html
some examples useful for your needs.
-
- Foriker
- Beiträge: 8
- Registriert: Mi 10. Jan 2018, 18:11
- Kontaktdaten:
Re: Raspberry GPIOs
Danke an alle, ich habe GAmbas 3 am laufen dafür, nur der root stört mich noch !!
Danke , Danke !
Gruss Günni
Danke , Danke !
Gruss Günni
Re: Raspberry GPIOs
Hallo,
am Raspberry finde ich als Einsteiegr gerade die GPIOs besonders interessant, weil ich mir vorstellen kann damit einiges an Steuer- und Überwachungsaufgaben lösen zu können. Ich habe gerade (mit freundlicher Unterstützung von Besenmuckel) Gambas3 installiert. Leider musste ich feststellen, dass man die GPIO mit Gambas3 gar nicht direkt ansprechen kann! Besenmuckel deutet an, dass die Verbindung von Gambas + Shell-Befehlen die Lösung ist. Heißt das, dass man aus einem Gambas-Projekt heraus Shell-Befehle zum Ansteuern/Auswerten der GPIO geben kann? Wie sieht so etwas aus? Wie sieht das aus mit der Ansteuerung von I2C, UART oder SPI. Wie kann man die vielen Sensoren und Module, die es für den RPi3 gibt, nutzen?
Das bin ich mal gespannt.
am Raspberry finde ich als Einsteiegr gerade die GPIOs besonders interessant, weil ich mir vorstellen kann damit einiges an Steuer- und Überwachungsaufgaben lösen zu können. Ich habe gerade (mit freundlicher Unterstützung von Besenmuckel) Gambas3 installiert. Leider musste ich feststellen, dass man die GPIO mit Gambas3 gar nicht direkt ansprechen kann! Besenmuckel deutet an, dass die Verbindung von Gambas + Shell-Befehlen die Lösung ist. Heißt das, dass man aus einem Gambas-Projekt heraus Shell-Befehle zum Ansteuern/Auswerten der GPIO geben kann? Wie sieht so etwas aus? Wie sieht das aus mit der Ansteuerung von I2C, UART oder SPI. Wie kann man die vielen Sensoren und Module, die es für den RPi3 gibt, nutzen?
Das bin ich mal gespannt.
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Ich vermute mal du kommst von Windows.
Du brauchst ein paar Grundkenntnisse von Shell und Gambas, deshalb wie schon in den anderen Beitrag beschrieben, fang an unter Gambas kleine Brötchen zu backen. Kannst als Anfänger auch mal in den Beispielen schauen. Sonst wird das nichts.
Der Konsolenbefehl für die GPIO alle anzeigen wäre z. B.
für einen einzelnen z. B. Er gibt dir 0 oder 1 zurück.
Es gibt natürlich Unterschiede zwischen BCM und Pin. Kommt darauf an was du machen willst und was schon läuft mit anderen Programmen um die GPIO zu steuern. Am besten wäre es du hast dafür einen Bastel-Raspi wo du erst einmal testen kannst, wenn an den anderen schon die ganze Haussteuerung ist.
Hier mal ein Link http://wiringpi.com/the-gpio-utility/
Hier ein einfaches kurzes Beispiel unter Gambas die GPIO auslesen in Variable speichern und in der Message ausgeben.
Man kann dann aus Gambas den GPIO mit Shell-Befehl die Mode festlegen. Mit IF abfragen, wenn dann mache mit Shell-Befehl das Gegenteil usw. Wie das geht - es stehen ja schon Beispiele in den Link von oben. Dann den Partner im Keller scihcken der soll nachschauen ob Licht auch wirklich an oder aus ist.
Einfache Grundkenntnisse in Gambas solltest du dir aneignen.
Du brauchst ein paar Grundkenntnisse von Shell und Gambas, deshalb wie schon in den anderen Beitrag beschrieben, fang an unter Gambas kleine Brötchen zu backen. Kannst als Anfänger auch mal in den Beispielen schauen. Sonst wird das nichts.
Der Konsolenbefehl für die GPIO alle anzeigen wäre z. B.
Code: Alles auswählen
gpio readall
Code: Alles auswählen
gpio read GPIO.23
Hier mal ein Link http://wiringpi.com/the-gpio-utility/
Hier ein einfaches kurzes Beispiel unter Gambas die GPIO auslesen in Variable speichern und in der Message ausgeben.
Code: Alles auswählen
Public Sub Button1_Click()
Dim liesgpio As String
Shell "gpio read GPIO.23" Wait To liesgpio
Message.Info("GPIO.23 = " & liesgpio)
End
Einfache Grundkenntnisse in Gambas solltest du dir aneignen.
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Wenn du dann alles etwas durchblickst und den Shell-Befehl weisst, dann kann man sogar die Lampe über das Smartphone schalten.
Re: Raspberry GPIOs
Hallo Besenmuckel,
ich habe gute Fortschritte mit Gambas3 gemacht. Ist ja auch vieles fast wie bei VB6 / VBA. Mein Interesse gilt weiter den GPIOs, über die ich mittlerweile viel gelesen habe. Ich habe WiringPi auf meinem RPi3 installiert und versucht im Netz Hilfe zur GPIO-Ansteuerung zu finden. Obwohl die Quellen dünn gesät sind, habe ich es geschafft, GPIO als Ausgänge zu bearbeiten. Mit dem nachfolgenden Code kann ich mit zwei Button 1 und 2 den GPIO27 als Ausgang zu steuern.
Mit dem Button 3 möchte ich den aktuellen Zustand des GPIO22, der als Eingang bestimmt ist, auslesen und weiterverarbeiten, aber da habe ich Probleme (siehe ute nach dem Code).
Library "/usr/local/lib/libwiringPi"
Public Extern wiringPiSetupGpio() As Integer
Public Extern pinMode(pin As Integer, pud As Integer)
Public Extern pullUpDnControl(pin As Integer, mode As Integer)
Public Extern digitalRead(pin As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Extern digitalWrite(pin As Integer, value As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Const PIN_INPUT As Integer = 0
Public Const PIN_OUTPUT As Integer = 1
Public Const PIN_LOW As Integer = 0
Public Const PIN_HIGH As Integer = 1
‘Public Const Ausgang2 As Integer
Public Eingang22 As Integer '= Zustand an GPIO-Eingang22
Public Sub Form_Open()
Dim TestVar As Integer
'Nun können wir WiringPi mit WiringgPiSetupGpio() initialisieren.
wiringPiSetupGpio()
pinMode(27, PIN_OUTPUT) 'GPIO27 soll ein Ausgang sein
pinMode(22, PIN_INPUT) 'GPIO22 soll ein Eingang sein
'pinMode(22, 0) 'GPIO22 soll ein Eingang sein
TestVar = 0 'digitalRead(27)
If TestVar = 1 Then
Label2.text = "GPIO27 = HIGH "
Label2.Background = Color.Red
Else
Label2.text = "GPIO27 = Low "
Label2.Background = Color.Green
End If
'Wenn WiringPi nicht installiert ist oder Sie nicht als Root ausgeführt werden oder ein anderes Problem auftritt, wird ein Fehler ausgegeben.
'Vielleicht könnte die Fehlerroutine so aussehen: unser Code so aussehen: -
Catch 'wird erreicht, wenn ein Error auftritt
'der nachfolgende Code wird nur ausgeführt wenn ein Fehler erfolgt ist
Me.text = "Das Setup des WiringPi ist fehlgeschlagen! - Ist der Bediener angemeldet als root?"
End
Public Sub Button1_Click()
'setzt den GPIO27 Ausgang = L
'digitalWrite(27, PIN_LOW) 'GPIO2 (Ausgang) soll LOW sein
'man könnte wohl auch schreiben:
digitalWrite(27, 0) 'getestet --> iO
Label2.text = "GPIO27 = Low "
Label2.Background = Color.Green
End
Public Sub Button2_Click()
'setzt den GPIO27 Ausgang =
digitalWrite(27, PIN_HIGH) 'GPIO27 (Ausgang) soll HIGH sein
'man könnte wohl auch schreiben:
'digitalWrite(27, 1)
Label2.text = "GPIO27 = HIGH"
Label2.Background = Color.Red
End
Public Sub Button3_Click()
'Zustand des Eingangs GPIO22 einlesen und in Label3 darstellen
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
‘Eingang22 = 1 'kann zu Testzwecken aktiviert / auskommentiert werden
If digitalRead(22) = 1 Then
Label3.text = "GPIO22 = HIGH "
Label3.Background = Color.Red
Else
Label3.text = "GPIO22 = Low "
Label3.Background = Color.Green
End If
End
Fehlermeldung in der Zeile:
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
Text der Fehlermeldung: "Kein Rückgabewert in FMain:145"
Wenn ich im LXTerminal den Termialbefehl gpio readall eingebe, wird mir in der Übersichtstabelle in der Spalte V für den GPIO/BCM22 der richtige Wert (0 oder 1) angezeigt (abhängig davon, ob ich Vcc oder Gnd an GPIO22 angelegt habe).
Auch mit
Eingang22 = Shell "gpio read GPIO.22"
bin ich nicht weitergekommen.
Meine Fragen:
1.) Wie kann ich den Zustand / Wert eines GPIO (egal ob Eingang oder Ausgang) einer Variablen zuordnen?
2.) Wie kann ich den Modus eines GPIO (also, ob er ein Eingang oder Ausgang ist) ermitteln und einer Variablen zuordnen?
3.) Kann man eine Ereignis-Prozedur generieren, die nur dann aufgerufen wird, wenn an einer GPIO, die als Eingang konfiguriert, der Zustand geändert wird.
4.) in den Foren ist man sich uneins, ob es besser ist, mit den Bibliotheken von WiringPi oder pigpio zuarbeiten. Was empfiehlst du mir? Wo gibt es die besseren Foren / Tuturials / Übersicht der Schlüsselworte usw.?
5.)Braucht man die überhaupt oder kann man alles über Shell bearbeiten.
Natürlich nehme ich auch gern Hilfe von der Community an.
Im voraus schon vielen Dank.
ich habe gute Fortschritte mit Gambas3 gemacht. Ist ja auch vieles fast wie bei VB6 / VBA. Mein Interesse gilt weiter den GPIOs, über die ich mittlerweile viel gelesen habe. Ich habe WiringPi auf meinem RPi3 installiert und versucht im Netz Hilfe zur GPIO-Ansteuerung zu finden. Obwohl die Quellen dünn gesät sind, habe ich es geschafft, GPIO als Ausgänge zu bearbeiten. Mit dem nachfolgenden Code kann ich mit zwei Button 1 und 2 den GPIO27 als Ausgang zu steuern.
Mit dem Button 3 möchte ich den aktuellen Zustand des GPIO22, der als Eingang bestimmt ist, auslesen und weiterverarbeiten, aber da habe ich Probleme (siehe ute nach dem Code).
Library "/usr/local/lib/libwiringPi"
Public Extern wiringPiSetupGpio() As Integer
Public Extern pinMode(pin As Integer, pud As Integer)
Public Extern pullUpDnControl(pin As Integer, mode As Integer)
Public Extern digitalRead(pin As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Extern digitalWrite(pin As Integer, value As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Const PIN_INPUT As Integer = 0
Public Const PIN_OUTPUT As Integer = 1
Public Const PIN_LOW As Integer = 0
Public Const PIN_HIGH As Integer = 1
‘Public Const Ausgang2 As Integer
Public Eingang22 As Integer '= Zustand an GPIO-Eingang22
Public Sub Form_Open()
Dim TestVar As Integer
'Nun können wir WiringPi mit WiringgPiSetupGpio() initialisieren.
wiringPiSetupGpio()
pinMode(27, PIN_OUTPUT) 'GPIO27 soll ein Ausgang sein
pinMode(22, PIN_INPUT) 'GPIO22 soll ein Eingang sein
'pinMode(22, 0) 'GPIO22 soll ein Eingang sein
TestVar = 0 'digitalRead(27)
If TestVar = 1 Then
Label2.text = "GPIO27 = HIGH "
Label2.Background = Color.Red
Else
Label2.text = "GPIO27 = Low "
Label2.Background = Color.Green
End If
'Wenn WiringPi nicht installiert ist oder Sie nicht als Root ausgeführt werden oder ein anderes Problem auftritt, wird ein Fehler ausgegeben.
'Vielleicht könnte die Fehlerroutine so aussehen: unser Code so aussehen: -
Catch 'wird erreicht, wenn ein Error auftritt
'der nachfolgende Code wird nur ausgeführt wenn ein Fehler erfolgt ist
Me.text = "Das Setup des WiringPi ist fehlgeschlagen! - Ist der Bediener angemeldet als root?"
End
Public Sub Button1_Click()
'setzt den GPIO27 Ausgang = L
'digitalWrite(27, PIN_LOW) 'GPIO2 (Ausgang) soll LOW sein
'man könnte wohl auch schreiben:
digitalWrite(27, 0) 'getestet --> iO
Label2.text = "GPIO27 = Low "
Label2.Background = Color.Green
End
Public Sub Button2_Click()
'setzt den GPIO27 Ausgang =
digitalWrite(27, PIN_HIGH) 'GPIO27 (Ausgang) soll HIGH sein
'man könnte wohl auch schreiben:
'digitalWrite(27, 1)
Label2.text = "GPIO27 = HIGH"
Label2.Background = Color.Red
End
Public Sub Button3_Click()
'Zustand des Eingangs GPIO22 einlesen und in Label3 darstellen
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
‘Eingang22 = 1 'kann zu Testzwecken aktiviert / auskommentiert werden
If digitalRead(22) = 1 Then
Label3.text = "GPIO22 = HIGH "
Label3.Background = Color.Red
Else
Label3.text = "GPIO22 = Low "
Label3.Background = Color.Green
End If
End
Fehlermeldung in der Zeile:
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
Text der Fehlermeldung: "Kein Rückgabewert in FMain:145"
Wenn ich im LXTerminal den Termialbefehl gpio readall eingebe, wird mir in der Übersichtstabelle in der Spalte V für den GPIO/BCM22 der richtige Wert (0 oder 1) angezeigt (abhängig davon, ob ich Vcc oder Gnd an GPIO22 angelegt habe).
Auch mit
Eingang22 = Shell "gpio read GPIO.22"
bin ich nicht weitergekommen.
Meine Fragen:
1.) Wie kann ich den Zustand / Wert eines GPIO (egal ob Eingang oder Ausgang) einer Variablen zuordnen?
2.) Wie kann ich den Modus eines GPIO (also, ob er ein Eingang oder Ausgang ist) ermitteln und einer Variablen zuordnen?
3.) Kann man eine Ereignis-Prozedur generieren, die nur dann aufgerufen wird, wenn an einer GPIO, die als Eingang konfiguriert, der Zustand geändert wird.
4.) in den Foren ist man sich uneins, ob es besser ist, mit den Bibliotheken von WiringPi oder pigpio zuarbeiten. Was empfiehlst du mir? Wo gibt es die besseren Foren / Tuturials / Übersicht der Schlüsselworte usw.?
5.)Braucht man die überhaupt oder kann man alles über Shell bearbeiten.
Natürlich nehme ich auch gern Hilfe von der Community an.
Im voraus schon vielen Dank.
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Hallo Leopard,
Macht dir nix draus. Ging mir am Anfang auch so. Die Befehle gehen auch ohne root oder sudo. Früher musste man das. Ich kann auch nicht komplizierte Schaltpläne lesen, trotzdem musste ich mir praktisch zeigen lassen wie ich eine simple LED schalte und das 0 nicht immer Licht aus und 1 nicht immer Licht an bedeutet. Ich suche mal das alles zusammen. Habe schon über ein Jahr damit nichts mehr gemacht. Es dauert aber noch ein paar Tage.
Ich hoffe das ich es spätestens in einer Woche fertig habe. Auch schaue ich noch mal wo ich die Linksammlung habe. Wenn ich fertig bin bekommst du eine Anleitung mit Bilder zum schalten einer LED und noch ein paar Info. Evtl. auch noch mit Taster, da gibt es auch wieder zwei Möglichkeiten wie man den anschliesst. Wenn viel Zeit ist auch noch für Bewegungsmelder und Relais. Wenn man den Anfang versteht geht der Rest dann von alleine.
Ich hoffe du hast noch soviel Zeit bis ich es fertig habe. Die nächsten 2-3 Tage schaffe ich es aber nicht. Sollte ich mich in einer Woche noch nicht gemeldet haben, schreibe einfach nochmal. Schaue oft in den News.
Macht dir nix draus. Ging mir am Anfang auch so. Die Befehle gehen auch ohne root oder sudo. Früher musste man das. Ich kann auch nicht komplizierte Schaltpläne lesen, trotzdem musste ich mir praktisch zeigen lassen wie ich eine simple LED schalte und das 0 nicht immer Licht aus und 1 nicht immer Licht an bedeutet. Ich suche mal das alles zusammen. Habe schon über ein Jahr damit nichts mehr gemacht. Es dauert aber noch ein paar Tage.
Ich hoffe das ich es spätestens in einer Woche fertig habe. Auch schaue ich noch mal wo ich die Linksammlung habe. Wenn ich fertig bin bekommst du eine Anleitung mit Bilder zum schalten einer LED und noch ein paar Info. Evtl. auch noch mit Taster, da gibt es auch wieder zwei Möglichkeiten wie man den anschliesst. Wenn viel Zeit ist auch noch für Bewegungsmelder und Relais. Wenn man den Anfang versteht geht der Rest dann von alleine.
Ich hoffe du hast noch soviel Zeit bis ich es fertig habe. Die nächsten 2-3 Tage schaffe ich es aber nicht. Sollte ich mich in einer Woche noch nicht gemeldet haben, schreibe einfach nochmal. Schaue oft in den News.
Re: Raspberry GPIOs
Hallo,
vielen Dank für die schnelle Antwort. Mit der Hardware hab ich keine Probleme, ich bin Dipl. Ing. für Nachrichtentechnik. Ich hab auch reichlich Bastlererfahrung. Und recht anspruchvolle VB6-Projekte habe ich auch schon bewältigt, bei denen ich mit meiner selbst entwickelten Software über die RS-232 die selbst entwickelte Hardware angesteuert habe und damit Prozesse gesteuert habe. War alles sehr interessant und oft müsste ich dabei Neuland beschreiten - und das in Zeiten, wo es noch gar kein Internet gab. Jetzt hat es mir der RPi3 deshalb so angetan, weil ich glaube, dass gerade im GPIO großes Potential liegt für sehr interessante Projekte. In meinem Alter möchte ich allerdings keine andere Programmiersprache mehr lernen (C, oder Python o.ä.), sondern den leichteren Umstieg auf Gambas wagen.
Für eine Linksammlung und sonstige Hinweise auf (möglichst deutschsprachige) Quellen wäre ich auch weiterhin dankbar. Ohne deine bisherigen Hilfen hätte ich wahrscheinlich schon genervt das Handtuch geworfen. Lass dir Zeit mit der Bereitstellung von Hilfen, denn gut Ding braucht Weil. Bis bald.
vielen Dank für die schnelle Antwort. Mit der Hardware hab ich keine Probleme, ich bin Dipl. Ing. für Nachrichtentechnik. Ich hab auch reichlich Bastlererfahrung. Und recht anspruchvolle VB6-Projekte habe ich auch schon bewältigt, bei denen ich mit meiner selbst entwickelten Software über die RS-232 die selbst entwickelte Hardware angesteuert habe und damit Prozesse gesteuert habe. War alles sehr interessant und oft müsste ich dabei Neuland beschreiten - und das in Zeiten, wo es noch gar kein Internet gab. Jetzt hat es mir der RPi3 deshalb so angetan, weil ich glaube, dass gerade im GPIO großes Potential liegt für sehr interessante Projekte. In meinem Alter möchte ich allerdings keine andere Programmiersprache mehr lernen (C, oder Python o.ä.), sondern den leichteren Umstieg auf Gambas wagen.
Für eine Linksammlung und sonstige Hinweise auf (möglichst deutschsprachige) Quellen wäre ich auch weiterhin dankbar. Ohne deine bisherigen Hilfen hätte ich wahrscheinlich schon genervt das Handtuch geworfen. Lass dir Zeit mit der Bereitstellung von Hilfen, denn gut Ding braucht Weil. Bis bald.
Re: Raspberry GPIOs
Ohne zum Thema beitragen zu können: Wenn du damit leben kannst, dass du auf Linux beschränkt bist (ich kann das sehr gut), dann ist Gambas eine sehr schöne Sprache, mit der du deine alten Kenntnisse nicht wegwerfen musst, die aber auch moderne Möglichkeiten der Programmierung (Objektorientierung) erlaubt. Außerdem steht Dir alles zur Verfügung, was ein Linux-System so hergibt, und es gibt keine künstlichen Einschränkungen, wie man es unter Windows so gewohnt war.In meinem Alter möchte ich allerdings keine andere Programmiersprache mehr lernen (C, oder Python o.ä.), sondern den leichteren Umstieg auf Gambas wagen.
Alles Gute,
tionov
tionov
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Hallo Leopard.
Hat etwas gedauert. Habe nach langen Suchen das Steckbrett mit der LED und einen handgeschrieben Schaltplan gefunden. Lag schon 2 Jahre versteckt herum, aber noch nicht im Keller.
Links, Gambas-Projekte oder Code-Schnipsel alles weg. Mit den selbst geschriebenen Schaltplan könnte ich auch nichts mehr anfangen. Auch hatte ich mal mit Gambas für jemanden ein komplettes Projekt gemacht mit 2 Taster, 2 Bewegungsmelder und 2 Relais. ohne vor Ort zu sein. Dazu ein passendes Shell-Script. Er hat mir nur gesagt wie die GPIO geschalten sind. Taster habe ich improsiert in dem ich 2 Kabel kurz überbrückt habe, die Relais statt von GPIO zu lesen aus der entsprechenden Datei und für den Bewegungsmelder eine PictureBox auf der Form. Kann man dann unter Gambas simulieren, Wenn Maus über PictureBox dann mache usw. Vor Ort brauchte man dann nur das passende umändern. Ging schnell und funktioniert bis heute noch. Leider hat er auch nichts mehr und kann z. Z. auch nicht auf den Raspi zugreifen. So das solls erst einmal gewesen sein.
Deshalb hier mal eine kleine Anleitung. Hat mehr Mühe gemacht als ich dachte und Rechtschreibfehler sind bestimmt auch noch drin. Diese Anleitung habe ich auch für mich gemacht, falls mir nach 2 Jahren einfällt weiter zumachen und ich nicht bei 0 anfangen muss wieder.
viewtopic.php?f=33&t=5590
In der Anleitung habe ich eine gelbe LED verwendet und einen Widerstand von 120 oder 150 KiloOhm. Genau kann ich das nicht mehr sagen. Brille, Lupe und Messgerät verschwunden. Da du dich auskennst sollte das für dich aber kein Problem sein.
Hier noch einiges was Zeit in Anspruch genommen hat. Da sich der Bekannte nicht auskennt mit der Struktur des Linux-Verzeichnis, habe ich ihm telefonisch erklärt wie er das Shell-Script mit Schleife in den versteckten Verzeichnis autostart packt. Man findet dazu auch Links im Netz. Jetzt der Fallstrick. Wenn der Desktop(grafische Oberfläche) gestartet wird, startet auch das Script. Soweit auch alles in Ordnung. Wenn er aber von Windows aus den Remote-Desktop startet wird die grafische Oberfläche nochmal gestartet und das Script auch nochmal. das passiert bei jeden Anmelden über Remote-Desktop oder unter Linux z. B. mit den Programm rdesktop. Hierzu ein Link, ob der noch aktuell ist kann ich nicht sagen, da ich nur über die Konsole mich mit den Raspi verbinde.
https://www.datenreise.de/raspberry-pi- ... tallieren/
Nächste Problem was über 2 Stunden gekostet hat war. Alles war so eingestellt das es funktionierte und hatten das am Abend gemacht. Am nächsten Nachmittag der Anruf das die Bewegungsmelder nicht funktionieren. Nach über 2 Stunden gefunden. Alles war so eingestellt die Bewegungsmelder nur schalten von Sonnenuntergang bis Sonnenaufgang. Haben dann das Script angepasst mit 3 Parameter. Es waren bestimmt noch ein paar Probleme mehr, diese sind mir aber noch in Erinnerung.
Falls du dich etwas eingearbeitest hast und dich gut auskennst mit den GPIO kannst du hier auch Beiträge schreiben. Andere und ich wären dankbar. Denn irgendwann will ich da auch weiter mit bauen.
Hat etwas gedauert. Habe nach langen Suchen das Steckbrett mit der LED und einen handgeschrieben Schaltplan gefunden. Lag schon 2 Jahre versteckt herum, aber noch nicht im Keller.
Links, Gambas-Projekte oder Code-Schnipsel alles weg. Mit den selbst geschriebenen Schaltplan könnte ich auch nichts mehr anfangen. Auch hatte ich mal mit Gambas für jemanden ein komplettes Projekt gemacht mit 2 Taster, 2 Bewegungsmelder und 2 Relais. ohne vor Ort zu sein. Dazu ein passendes Shell-Script. Er hat mir nur gesagt wie die GPIO geschalten sind. Taster habe ich improsiert in dem ich 2 Kabel kurz überbrückt habe, die Relais statt von GPIO zu lesen aus der entsprechenden Datei und für den Bewegungsmelder eine PictureBox auf der Form. Kann man dann unter Gambas simulieren, Wenn Maus über PictureBox dann mache usw. Vor Ort brauchte man dann nur das passende umändern. Ging schnell und funktioniert bis heute noch. Leider hat er auch nichts mehr und kann z. Z. auch nicht auf den Raspi zugreifen. So das solls erst einmal gewesen sein.
Deshalb hier mal eine kleine Anleitung. Hat mehr Mühe gemacht als ich dachte und Rechtschreibfehler sind bestimmt auch noch drin. Diese Anleitung habe ich auch für mich gemacht, falls mir nach 2 Jahren einfällt weiter zumachen und ich nicht bei 0 anfangen muss wieder.
viewtopic.php?f=33&t=5590
In der Anleitung habe ich eine gelbe LED verwendet und einen Widerstand von 120 oder 150 KiloOhm. Genau kann ich das nicht mehr sagen. Brille, Lupe und Messgerät verschwunden. Da du dich auskennst sollte das für dich aber kein Problem sein.
Hier noch einiges was Zeit in Anspruch genommen hat. Da sich der Bekannte nicht auskennt mit der Struktur des Linux-Verzeichnis, habe ich ihm telefonisch erklärt wie er das Shell-Script mit Schleife in den versteckten Verzeichnis autostart packt. Man findet dazu auch Links im Netz. Jetzt der Fallstrick. Wenn der Desktop(grafische Oberfläche) gestartet wird, startet auch das Script. Soweit auch alles in Ordnung. Wenn er aber von Windows aus den Remote-Desktop startet wird die grafische Oberfläche nochmal gestartet und das Script auch nochmal. das passiert bei jeden Anmelden über Remote-Desktop oder unter Linux z. B. mit den Programm rdesktop. Hierzu ein Link, ob der noch aktuell ist kann ich nicht sagen, da ich nur über die Konsole mich mit den Raspi verbinde.
https://www.datenreise.de/raspberry-pi- ... tallieren/
Nächste Problem was über 2 Stunden gekostet hat war. Alles war so eingestellt das es funktionierte und hatten das am Abend gemacht. Am nächsten Nachmittag der Anruf das die Bewegungsmelder nicht funktionieren. Nach über 2 Stunden gefunden. Alles war so eingestellt die Bewegungsmelder nur schalten von Sonnenuntergang bis Sonnenaufgang. Haben dann das Script angepasst mit 3 Parameter. Es waren bestimmt noch ein paar Probleme mehr, diese sind mir aber noch in Erinnerung.
Falls du dich etwas eingearbeitest hast und dich gut auskennst mit den GPIO kannst du hier auch Beiträge schreiben. Andere und ich wären dankbar. Denn irgendwann will ich da auch weiter mit bauen.
Re: Raspberry GPIOs
Hallo Besenmuckel,
da hast du dir ja ne Menge Arbeit gemacht. VIELEN Dank.
Ich habe nicht alles verstanden, was du mir jetzt mitgeteilt hast (z.B. den Teil mit dem SSH (ich will ja keine verschlüsselte Netzwerkverbindung mit einem entfernten Gerät herstellen). Insbesondere verstehe ich auch nicht, warum die ein Shell-Skript brauchst.
Ich habe in den letzten Tagen intensiv im Netz recherchiert und habe dabei einen sehr einfachen und übersichtlichen Lösungsansatz gefunden. Ich hab mich da so Stück für stück vorarbeiten müssen und bin bei meiner (Google-) Suche immer wieder in Sackgassen geraten oder in ganz falsche Richtungen, weil viele Beiträge gar nicht auf Gambas abzielten. Was nützt es mir aber, wenn man immer wieder auf Code stößt, der für bzw. in Python oder gar C++ geschrieben ist.
Einen großen Fortschritt habe ich gemacht, als ich auf WiringPi gestoßen bin (Bibliotheken wie WiringPi und Pigpio sind in der Programmiersprache C geschrieben, können aber auch mit anderen Sprachen einschließlich Gambas verwendet werden). Ich habe mich erstmal für WiringPi (statt Pigpio) entschieden. WiringPi war ruckzuck installiert. Den Installations-Code für WiringPi kann ich gerne nachreichen. Nun kann ich in Gambas mit wenig (Gambas-) Code die GPIOs bearbeiten (Ausgänge setzen, den Zustand der Eingänge und Ausgänge lesen und natürlich weiterverarbeiten. Hier die wichtigsten Codes dazu:
Library "/usr/local/lib/libwiringPi"
Aus dieser Bibliothek werden nur die folgenden 5 Funktionalitäten benötigt, die ich nachfolgend
deklariere:
Dies erfolgt mit EXTERN, damit Gambas in der bereits deklarierten externen Bibliothek nachschauen kann:
Public Extern wiringPiSetupGpio() As Integer
'WiringPi wird initialisiert (wobei das Programm die BCM- bzw. GPIO-Nummern (für die GPIO-Schnittstelle) verwendet (und nicht die wPi-Nummern))
Public Extern pinMode(pin As Integer, pud As Integer)
'setzt den Pin-Modus entweder auf INPUT, OUTPUT (ggf. auf PWM_OUTPUT (Puls-Weiten-Modulation) oder GPIO_CLOCK)
Public Extern pullUpDnControl(pin As Integer, mode As Integer)
'setzt den Eingangswiderstandsmodus (50k) (PUD_OFF, PUD_DOWN, PUD_UP)
Public Extern digitalRead(pin As Integer) As Integer
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Extern digitalWrite(pin As Integer, value As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Eingang22 As Integer '= Zustand an GPIO-Eingang22
Public Zustand27 As Integer '= Zustand an GPIO-Ausgang27
pinMode(27, 1) 'GPIO27 soll ein Ausgang sein
pinMode(22, 0) 'GPIO22 soll ein Eingang sein
'GPIO27 (Ausgang) auf LOW oder HIGH setzen :
-----------------------------------------------------------
'GPIO27 (Ausgang) soll LOW sein:
digitalWrite(27, 0
'GPIO27 (Ausgang) soll HIGH sein:
digitalWrite(27, 1)
'tatsächlichen / physikalischen Zustand des Eingangs GPIO22 einlesen:
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
Ich habe auch ein kleines Projekt geschrieben, in dem man mit ein paar Schaltflächen (CommandButton) und Labels die Funktionalität schön demonstrieren kann. Ich weiss allerdings nicht, wie ich das hier bereitstellen kann oder hier Bilder (Screen-Shots u.ä.) einfügen kann.
Jetzt arbeite ich daran, spontan auftretende Zustandsänderungen an den Eingängen abfangen / auswerten zu können, ohne dabei über ein Zeitfunktion periodisch deren Zustand abzufragen (z.B. mit digitalRead(22)), um auch bei sehr schnell aufeinanderfolgenden Zustandsänderungen keine zu verpassen oder das System sehr stark zu belasten.
Mein aktueller Ansatz geht in die Richtung mit der Funktion wiringPiISR() aus der WiringPi-Bibliothek:
Extern wiringPiISR(GpioNr As Integer, Flankentyp As Integer, ausfuehrFkt As Pointer)
mit den Flanken-Typen: INT_EDGE_FALLING, INT_EDGE_RISING; INT_EDGE_BOTH
Das könnte auch so aussehen: wiringPiISR(17, 1, Ereignis2_am_GPIO(a As Integer))
In unterschiedlichen Versuchen / Ansätzen bekomme ich immer wieder die unterschiedlichsten Fehlermeldungen (z.B. über Syntaxfehler... oder fehlende "," oder ")" u.v.m., die ich aber nicht nachvollziehen oder verstehen kann:
z.B.: mein Code: wiringPiISR(17, 1, Ereignis2_am_GPIO(a As Integer))
Fehlermeldung: fehlende "," oder ")"
Vielleicht hat ja einer der Leser einen Vorschlag oder ein paar Code-Schnipsel zu dieser Aufgabenstellung mit wiringPiISR().
So weit für heute und erst mal vielen Dank.
da hast du dir ja ne Menge Arbeit gemacht. VIELEN Dank.
Ich habe nicht alles verstanden, was du mir jetzt mitgeteilt hast (z.B. den Teil mit dem SSH (ich will ja keine verschlüsselte Netzwerkverbindung mit einem entfernten Gerät herstellen). Insbesondere verstehe ich auch nicht, warum die ein Shell-Skript brauchst.
Ich habe in den letzten Tagen intensiv im Netz recherchiert und habe dabei einen sehr einfachen und übersichtlichen Lösungsansatz gefunden. Ich hab mich da so Stück für stück vorarbeiten müssen und bin bei meiner (Google-) Suche immer wieder in Sackgassen geraten oder in ganz falsche Richtungen, weil viele Beiträge gar nicht auf Gambas abzielten. Was nützt es mir aber, wenn man immer wieder auf Code stößt, der für bzw. in Python oder gar C++ geschrieben ist.
Einen großen Fortschritt habe ich gemacht, als ich auf WiringPi gestoßen bin (Bibliotheken wie WiringPi und Pigpio sind in der Programmiersprache C geschrieben, können aber auch mit anderen Sprachen einschließlich Gambas verwendet werden). Ich habe mich erstmal für WiringPi (statt Pigpio) entschieden. WiringPi war ruckzuck installiert. Den Installations-Code für WiringPi kann ich gerne nachreichen. Nun kann ich in Gambas mit wenig (Gambas-) Code die GPIOs bearbeiten (Ausgänge setzen, den Zustand der Eingänge und Ausgänge lesen und natürlich weiterverarbeiten. Hier die wichtigsten Codes dazu:
Library "/usr/local/lib/libwiringPi"
Aus dieser Bibliothek werden nur die folgenden 5 Funktionalitäten benötigt, die ich nachfolgend
deklariere:
Dies erfolgt mit EXTERN, damit Gambas in der bereits deklarierten externen Bibliothek nachschauen kann:
Public Extern wiringPiSetupGpio() As Integer
'WiringPi wird initialisiert (wobei das Programm die BCM- bzw. GPIO-Nummern (für die GPIO-Schnittstelle) verwendet (und nicht die wPi-Nummern))
Public Extern pinMode(pin As Integer, pud As Integer)
'setzt den Pin-Modus entweder auf INPUT, OUTPUT (ggf. auf PWM_OUTPUT (Puls-Weiten-Modulation) oder GPIO_CLOCK)
Public Extern pullUpDnControl(pin As Integer, mode As Integer)
'setzt den Eingangswiderstandsmodus (50k) (PUD_OFF, PUD_DOWN, PUD_UP)
Public Extern digitalRead(pin As Integer) As Integer
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Extern digitalWrite(pin As Integer, value As Integer)
'gibt den Eingangsstatus zurück (low = 0, high = 1)
Public Eingang22 As Integer '= Zustand an GPIO-Eingang22
Public Zustand27 As Integer '= Zustand an GPIO-Ausgang27
pinMode(27, 1) 'GPIO27 soll ein Ausgang sein
pinMode(22, 0) 'GPIO22 soll ein Eingang sein
'GPIO27 (Ausgang) auf LOW oder HIGH setzen :
-----------------------------------------------------------
'GPIO27 (Ausgang) soll LOW sein:
digitalWrite(27, 0
'GPIO27 (Ausgang) soll HIGH sein:
digitalWrite(27, 1)
'tatsächlichen / physikalischen Zustand des Eingangs GPIO22 einlesen:
Eingang22 = digitalRead(22) 'Eingang22 soll den Wert des GPIO22 (Eingang) erhalten
Ich habe auch ein kleines Projekt geschrieben, in dem man mit ein paar Schaltflächen (CommandButton) und Labels die Funktionalität schön demonstrieren kann. Ich weiss allerdings nicht, wie ich das hier bereitstellen kann oder hier Bilder (Screen-Shots u.ä.) einfügen kann.
Jetzt arbeite ich daran, spontan auftretende Zustandsänderungen an den Eingängen abfangen / auswerten zu können, ohne dabei über ein Zeitfunktion periodisch deren Zustand abzufragen (z.B. mit digitalRead(22)), um auch bei sehr schnell aufeinanderfolgenden Zustandsänderungen keine zu verpassen oder das System sehr stark zu belasten.
Mein aktueller Ansatz geht in die Richtung mit der Funktion wiringPiISR() aus der WiringPi-Bibliothek:
Extern wiringPiISR(GpioNr As Integer, Flankentyp As Integer, ausfuehrFkt As Pointer)
mit den Flanken-Typen: INT_EDGE_FALLING, INT_EDGE_RISING; INT_EDGE_BOTH
Das könnte auch so aussehen: wiringPiISR(17, 1, Ereignis2_am_GPIO(a As Integer))
In unterschiedlichen Versuchen / Ansätzen bekomme ich immer wieder die unterschiedlichsten Fehlermeldungen (z.B. über Syntaxfehler... oder fehlende "," oder ")" u.v.m., die ich aber nicht nachvollziehen oder verstehen kann:
z.B.: mein Code: wiringPiISR(17, 1, Ereignis2_am_GPIO(a As Integer))
Fehlermeldung: fehlende "," oder ")"
Vielleicht hat ja einer der Leser einen Vorschlag oder ein paar Code-Schnipsel zu dieser Aufgabenstellung mit wiringPiISR().
So weit für heute und erst mal vielen Dank.
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Raspberry GPIOs
Er gibt dir ja schon Vorschläge. Wahrscheinlich musst du das selber lösen. Ich habe nicht gefunden wo das Ereignis2_am_GPIO(a As Integer) herkommt.
Wenn du direckt vor den Raspi mit Monitor, Maus und Tastatur sitzt ist ssh nicht notwendig. Wenn du z. B. von einen anderen Rechner oder weil am Raspi kein Monitor angeschlossen ist. Oder es ist ein Raspi-Zero mit Lite-Image ohne Monitor, Maus und Tastatur der irgendwo verbaut ist und nur seine Sachen macht. Denn zum schalten der GPIO braucht man nicht unbedingt eine grafische Oberfläche. Dann kannst du mit ssh auf den Raspi zugreifen. Die Shell-scripte deshalb, man braucht dann nur von den entfernten Rechner das Script zu starten um die Sachen auszuführen. Unbedingt gebraucht wird es nicht. Habe es nur der vollständigshalber mit eingebaut,
In meiner Anleitung verwende ich auch gpio -g. Deshalb werden auch die (BCM- bzw. GPIO-Nummern (für die GPIO-Schnittstelle) verwendet (und nicht die wPi-Nummern)). Ohne den -g müsste man die wPi-Nummern nehmen.
Auf den Raspi ist als Standard nur ein Konsolen-Programm drauf für Bildschirmfoto. Du kannst aber eins installieren. Bin z. Z. nicht am Raspi. Geben tut es einige, am besten ging es auf den Raspi mit gnome-screenshot. Der von xfce lief nicht so gut bei mir. Installieren mit
Code: Alles auswählen
sudo apt-get update
sudo apt-get install gnome-screenshot
Evt. musst du den Raspi neustarten. Das Programm ist dann unter Menü->Zubehör->Bildschirmfoto.
Wenn du lieber den von xfce möchstest dann installieren mit
Code: Alles auswählen
sudo apt-get install xfce4-screenshooter
Code: Alles auswählen
apt-get remove NamedesPakets
Für Sachen die in Code angezeigt werden sollen, den entsprechenden Text makieren und über den wo du schreibst liegen die Icons mustt mit der Maus rüberfahren und das passende auswählen.
Bilder hinzufügen im Beitrag, geht mit wo du schreibst darunter - klick auf Dateianhänge -> auswählen. Wenn er im Beitrag angezeigt werden soll dann im Text auf die entsprechende Stelle mit der Maus klicken und unten bei bei den Bild klick auf Schaltfläche in Beitrag anzeigen.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast