Datenpakete einlesen und verschiedene GPIOs schalten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Duz
User
Beiträge: 2
Registriert: Samstag 26. September 2020, 16:31

Hallo Python Forum,

ich bin Python Neuling und möchte mein erstes Projekt starten.
Mir fehlt leider ein Ansatz für die Umsetzung.

Ich würde gerne eine Ampel bauen (rotgelb,grün), die verschiedene Zustände eines Bauteils anzeigen kann.
Normal wäre das kein Problem, wenn ich für X Zustände auch X Signale hätte.
Somit wäre das nur eine logische Verbindung, die man auch ohne einen Raspberry mit einfachen Transistoren realisieren könnte.

Leider steht mir nur ein Kanal zur Verfügung. Mit dieser Ausgangssituation hätte ich mit einer einfachen Lösung nur eine Information ( 1 oder 0)
Dem Kanal könnte ich aber auch Datenpakete mit bestimmten Bitfolgen entlocken ... z.b. 001 Grün, 010, Gelb und 011 für Rot.

Folglich müsste ich also ein Programm schreiben, welches:
  • auf einem bestimmten GPIO Eingang lauscht
  • ein definiertes Datenpaket (wie im Beispiel oben) erkennt
  • ggf. eine Baudrate/Frequenz einstellen
  • eine logische Verknüpfung die drei GPIO Ausgänge in Abhängigkeit der erkannten Bitfolgen schaltet, die auf die Ampel gehen
Nun wären die Fragen:
  • gibt es ein Python Modul für die Verarbeitung von solchen Bitfolgen?
  • nehme ich einen X Beliebigen Eingang oder muss das irgendwie mit dem I2C Bus o.a kombinieren?
Wenn ich weiss was die Grundvoraussetzungen für solch eine Datenverarbeitung ist kann ich auch meinen Verfügbaren Kanal entsprechend Programmieren

Danke euch im voraus ..
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das einfachste ist ein UART. Damit kannst du beliebig viele Informationen übertragen.
Sirius3
User
Beiträge: 17831
Registriert: Sonntag 21. Oktober 2012, 17:20

Du brauchst mindestens zwei Eingänge/Ausgänge. Welche Hardware verwendest Du denn für die Ampel?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso braucht er zwei? Wenn die Information nur in eine Richtung Fließen muss, reicht einer. Oder gar one wire, damit geht auch bidirektional. Aber das ist zu fummelig.
Duz
User
Beiträge: 2
Registriert: Samstag 26. September 2020, 16:31

__deets__ hat geschrieben: Samstag 26. September 2020, 18:45 Das einfachste ist ein UART. Damit kannst du beliebig viele Informationen übertragen.
Vielen Dank! das hört sich doch schonmal gut an ... hättest du mir sowas wie ein Grundgerüst wie ich sowas angehe?

Python modul, Schnittstelle/device am Raspberry, gif einen kleinen code schnipsel 8)
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Dazu steht schon eine Menge im Internet. Man muss nur danach suchen und findet u.a. das hier: https://www.electronicwings.com/raspber ... thon-and-c

Bevor Du loslegst solltest Du aber beachten, dass der RPi nur 3V3 abkann, 5V grillen die GPIO!
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
__blackjack__
User
Beiträge: 13242
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Der Python-Code dort verwendet Sachen die „deprecated“ sind, denn mittlerweile bietet das `serial`-Modul Attribute die sich an die Namenskonventionen halten.

Interessanterweise hat das C-Programm auf der Seite einen sehr viel besseren Namen für die serielle Verbindung als `ser` in dem Python-Programm.

Die beiden Programme sind auch nicht wirklich äquivalent. Das Python-Äquivalent zu dem C-Programm dort wäre eher so etwas hier:

Code: Alles auswählen

#!/usr/bin/env python3
import sys

from serial import Serial


def main():
    raw_stdout = sys.stdout.buffer.raw
    with Serial("/dev/ttyS0", 9600) as connection:
        while True:
            data = connection.read(1)
            raw_stdout.write(data)
            print(data)
            connection.write(data)


if __name__ == "__main__":
    main()
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Stimmt, das inWaiting() hatte ich übersehen und wollte eigentlich auch noch den Link zum Modul (https://pyserial.readthedocs.io/en/latest/index.html) hinzufügen. Wenn es schnell gehen soll... :roll:

Nichtsdestotrotz finde ich auf der Seite das "Drumherum" ziemlich verständlich erklärt.
Alles was wir sind ist Sand im Wind Hoschi.
Antworten