GPIOs steuern mit Raspberry Pi und 2.8″ Touch-Display

Raspberry Pi und TFT Display

Der Raspberry Pi ist schon seit einigen Jahren auf dem Markt, doch leider konnte ich bis jetzt kein Projekt damit anfangen, was mir auch Spaß machen würde. In letzter Zeit habe ich immer mehr von der Programmierung kleiner GUIs mit Python/Pygame gelesen und da war mein Interesse geweckt. Für den Anfang sollte das eine einfache Schaltfläche sein, mit der man fünf Ausgänge setzen und fünf Eingänge einlesen kann. Ich bin kein bzw. kein guter Programmierer und mit Python bin ich zum ersten mal in Berührung gekommen. Zum Glück gibt es im Netz eine Unmenge an Anleitungen, Tutorials, Open Source Codes usw. Dazu kommt noch, dass der Code ziemlich gut lesbar ist.

Das war quasi ein kleines Projekt für den Anfang. Später will ich mit ein kleines Webradio bauen.

Um das Ganze noch interessanter zu machen, wird die GUI auf dem RPi-Display von Watterott angezeigt und darüber (Touchscreen) bedient.

Hier ist eine kleine Demonstration

 

Folgende GPIOs sind als Ausgänge definiert: 4, 5, 6, 12, 13

Folgende GPIOs sind als Eingänge definiert: 16, 19, 20, 21, 26

Beim Start sind alle Ausgänge auf „LOW“ (Indikator rot). Wenn man auf einen Button drückt, ändert sich der Pegel auf „HIGH“ und der Indikator wechselt von rot auf grün.

Die Eingänge zeigen bei unbelegtem Zustand den Status „HIGH“. Das liegt daran, dass die Pull-Up-Widerstände aktiviert sind. Wird ein LOW-Pegel angelegt, wechselt der Indikator die Farbe von grün auf rot.

Falls jemand Lust hat, das Projekt nachzubauen, hier ist eine Kurze Bauteilliste und eine grobe Anleitung. Ich bin beim Schreiben der Anleitung nicht auf jede Kleinigkeiten eingegangen (wie z.B. Sprache ändern etc.). Anleitungen dafür gibt es echt mehrfach im Netz, sodass man nur kurz eine Suchmaschine anwerfen muss.

Materialliste

  • Raspberry Pi B+
  • RPi-Display
  • GPIO-Adapter
  • Internetverbindung
  • Tastatur
  • USB-Stick
  • Steckbrett + Spielzeug, wie LEDs, Jumper Wires, Taster, was auch immer 🙂

 

Anleitung

  • Skript gpiocontrol.py herunterladen
  • Raspbian Image herunterladen https://github.com/watterott/RPi-Display
  • mit Win32DiskImager oder dd auf eine SD-Karte flashen
  • beim ersten Start:
    • einlogen
      • Benutzer: pi
      • Passwort:  raspberry  (Die Tasten Y und Z sind vertauscht)
    • sudo raspi-config  (Bindestrich befindet sich bei Tastaturen mit deutschem Layout bei „?“)
    • expand Filesystem
    • Wenn nötig, bei Internationalisation, Timezone, Spracheinstellungen und Tastaturlayout anpassen
  • sudo reboot
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo rpi-update
  • sudo reboot
  • sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate
    • die fünf Kreuze nacheinander möglichst genau berühren.
  • sudo mkdir /mnt/usb
  • sudo mount /dev/sda1 /mnt/usb/
  • sudo cp /mnt/usb/gpiocontrol.py ~
  • sudo python gpiocontrol.py

Skrpit beim Booten ausführen

  • sudo nano /etc/rc.local
  • und folgende Zeile über dem „exit 0“ einfügen
  • (python /home/pi/gpiocontrol.py)&
  • mit Strg + X schließen, mit Y bestätigen und neu starten.

Python Skript

Die Software ist evtl. nicht ganz sauber geschrieben, aber für mich funktioniert es so, wie es ist 😉

Die Software ist eine Beta und diente für mich als ein einfacher Einstieg in Python/Pygame und GUI Programmierung. Ich rate davon ab, die GUI 24/7 zu verwenden, sonst brennt man evtl. das Muster der GUI in das Display ein (siehe http://de.wikipedia.org/wiki/Einbrennen_(Bildschirm)).

Weitere Informationen

RPi-Display:

https://github.com/watterott/RPi-Displayhttps://github.com/watterott/RPi-Display

Pygame:

http://pygame.org

FBTFT von Notro:

https://github.com/notro/fbtft/wiki

 

17 Replies to “GPIOs steuern mit Raspberry Pi und 2.8″ Touch-Display”

  1. Ah, endlich mal einer, der auch wieder was zurückspeist ins Internetz! (hab mir vorgenommen, die CAN-Bus Geschichte aus dem Space sauber dokumentiert zu posten!)… man profitiert so viel von Foren und Blogs!

    • Wow! So schnell wurde noch kein meiner Einträge kommentiert. Danke! 🙂
      Ja, die Informationen in Blogs und Foren, machten es möglich, das Projekt so schnell umzusetzen 🙂

  2. Hi 5-Volt Junkie
    Habe dein Script für das C-Berry Touch Display umgeschrieben und bin im Moment dabei, eine Python-Anbindung für die Touch Funktionen zu schreiben.
    Sieht vielversprechend aus, habe aber noch Klippen zu umschiffen und weiß nicht ob das ganze taugt um es zu veröffentlichen. Aber wenn, wollte ich dich fragen, ob ich das Script dann in veränderter Form weitergeben kann?

    • Hi PiLlhipp,

      vielen Dank für deine Rückmeldung. Ich höre/lese natürlich immer wieder gern, wenn jemand mit meiner Arbeit was anfangen kann.
      Selbstverständlich darfst du den Code verändern und unter gleichen Bedingungen wieder veröffentlichen. Über kleine Erwähnung des Blogs, würde ich mich natürlich auch sehr freuen 🙂

  3. Hi,

    Sorry I don’t speak your language. Do you think a similar set-up could be use to activate a motor/pump instead of controlling a LED light ?

    Thanks

    • That should be not difficult at all. You need a relay for every motor / pump you like to control. Those relays cannot be driven by the RasPi directly, instead you will need an relay driver which is an transistor.

      See this example: https://www.pololu.com/product/2480
      This Board can be controlled with your Pi, and will switch on your motor. It contains the relay as well as the driver transistor.

      If you have havy loads like a swamp cooler or some fat compressor, you will like to have much bigger relays due to the havy inrush current when switching on those loads.

  4. Hallo 5Vollt Junkie

    Erst einmal super Anleitung für dieses Projekt.

    Hast du eventuell auch ein Beispiel für eine grafische Anzeige für Druckluftgeber oder Temperaturfühler.
    Die anpassung der Spannung von den Fühlern ist nicht das Problem wird mit nem A/D Wandler eingespeisst. aber ich hätte gern eine Analoge Anzeige wie die echten Anzeigen meist Halbkreis, auf dem Bildschirm.

    Mit freundlichem Gruss Arno

    • Hallo Arno,

      ich habe leider kein Beispiel dafür. Ich weiß aber, dass es sowas Ähnliches mit einer Weboberfläche realisiert wurde. Frag mal am Besten die Jungs/Mädels im Raspberry-Forum.

  5. Hallo zusammen,

    ich versuche gerade das Script „gpiocontrol.py“ auszuführen. Bin genau nach obiger Anleitung vorgegangen.
    Leider bekomme ich eine Fehlermeldung, die wie folgt ausschaut:
    File „gpiocontrol.py“, line 60, in Screen= pygame.display.set_mode(size)
    Pygame.error: Unable to open mouse
    Kann mir hier jemand weiterhelfen?

    Danke im Voraus

  6. Pingback: Rückblick 2015 – 5Volt-Junkie

  7. Ist es möglich das Script für HDMI Displays umzuschreiben und es dann mit der Maus zu bedienen, wenn ja wie?

    • Hi,
      das Projekt ist schon etwas älter, aber wenn ich mich richtig erinnere, musste man nur die ganzen os.environs rausnehmen. Zeile 11-13.

  8. Hallo junkie 😉

    Erst einmal herzlichen Dank für die Einsteiger-Anleitung, die einem Anfänger im Bereich pygame und touch-display schon sehr hilft!
    Deine Beschreibung ist zwar schon etwas älter, aber immer noch gut verständlich…

    Zwei Fragen habe ich aber noch:
    1) (Wie) kann man Dein Script auf das offizielle 7″ Raspi-Touchdisplay anpassen? Ich vermute, dass neben der Anpassung der Bildschirm-Größe ganz einfach die Zeilen 11-13 entfernt werden müssen? (Habe noch kein „offizielles“ Display, sonst hätte ich´s wohl schon heraus gefunden 😉

    2) Hast Du einen Tipp, wie man innerhalb des Python-scripts beim Aufbau der Bildschirm-Seite zusätzlich zu den Schaltflächen ggf. auch eigene icons (gifs oder bmp oder so) anzeigen kann? -gibt es da ein empfehlenswertes Tutorial für pygame, dass ich noch nicht gefunden habe?

    Vielen Dank für Deine Hilfe!
    Heinz

    • Das Anpassen müsste nicht so schwer sein.

      #screen size
      width = 320
      height = 240

      Da musst du die passende Auflösung eintragen. Wenn du größere Schaltflächen haben willst, musst du diese auch dementsprechend anpassen

      Das Zeichnen der Rechtecke beginnt ab dieser Zeile #lets draw some buttons and indicators
      Die Areas für den Touchscreen musst du dann auch anpacken.

      Wenn du Grafiken darstellen möchtest, schau dir mal mein Radio Projekt an und lies dir den Code durch. Da kann man was abgucken https://5volt-junkie.net/raspberry-pi-internetradio/

      Das offizielle Display habe ich auch noch rumliegen, aber leider nur wenig damit rumgespielt.
      Habe mich damals auch nur durch die Doku zum Wunschergebnis gearbeitet.
      Ofizielle Pygame und Python Dokus lesen, Foren lesen, evtl. nachfragen und YouTube Video. Das waren so meine Mitteln 😉
      https://www.pygame.org/docs/
      https://www.python.org/doc/

      Wenn du dir eh das große Display holen willst, dann einfach kaufen und anfangen zu spielen. Der Rest ergibt sich schon 😉

      pygame gui, python display image etc. sind so die ersten Suchbegriffe, mit denen ich so ziemlich alle Suchergebnisse lila geklickt habe 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Bitte löse folgende Rechenaufgabe * Time limit is exhausted. Please reload CAPTCHA.