1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Mit Python Messen, schreiben und Wert in txt Datei speichern

Dieses Thema im Forum "CGI, Perl, Python, Ruby, Power Shell" wurde erstellt von Flipswetter, 8. Januar 2017.

  1. Flipswetter

    Flipswetter Grünschnabel

    Hallo zusammen

    Ich habe mir ein Raspberry pi 3 erst vor einigen Wochen erworben um mit einem Ultraschall Sensor (SR 04) Die Schneehöhe automatisiert messen zu können. Dies ist zu mindest der Plan :)

    Der Plan fürs erste ist das der Sensor misst, schreibt, und eine Text Datei mit einem Wert, jede Minute überschrieben wird mit neuem Wert. (automatisiert)
    Die Text Datei könnte man automatisiert per FTP hoch laden und in eine Mysql Tabelle eintagen. (automatisiert)

    Nun ich habe einige Anleitungen gefunden um das Raspberry einzurichten und ein Python Code gefunden
    um den Sensor anzusprechen und Messungen zu machen und abzuspeichern in TXT.
    Das Problem ist der Code ist nicht automatisiert.
    Ich muss das Prog. mit "sudo python Ultraschall.py" starten, der Sensor misst alle 5 Sekunden ein ein Wert und Speichert die Werte erst in die Datei wenn ich manuell mit Ctrl. C das Programm beende.

    Meiner Ansicht nach gibt 2 Lösungsansätze:
    1.Man könnte den Code zu einer schlaufe bringen.

    So das er nicht:
    Misst (in 5Sek. Abstand), schreibt,.... manuell Stopt mitCtrl. und Speichert in txt.

    Sondern:
    Messen, Schreiben, Speichern, 5 sekunden pausiert und wider automatisch von vorne beginnt
    Messen Schreiben Speichern

    2. Der Andere Lösungsansatz währe:

    Das Ultraschall.py Prog. extern mit externem .py Zu Starten und nach 7 Sek. zu beenden und danach erneut Starten. In Schleife.
    Ich denke ist sicher die unelegantere Lösung.

    Habe einiges probiert leider bin ich nicht der Python freak.
    Ich versuchte den Code im untern teil bei der Ausgabe zu verändern um zu speichern ohne das Prg. stopen zu müssen,
    leider wurde mir immer ein Fehler Protokolliert. :(

    Hier den Code der Misst (in 5Sek. abstand), schreibt,.... manuell stopt mitCtrl. und Speichert in txt.

    Code ((Unknown Language)):
    1. #Bibliotheken einbinden
    2. import RPi.GPIO as GPIO
    3. import time
    4.  
    5. #GPIO Modus (BOARD / BCM)
    6. GPIO.setmode(GPIO.BOARD)
    7. GPIO.setwarnings(False)
    8. #GPIO Pins zuweisen
    9. GPIO_TRIGGER = 16
    10. GPIO_ECHO = 18
    11.  
    12. #Richtung der GPIO-Pins festlegen (IN / OUT)
    13. GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    14. GPIO.setup(GPIO_ECHO, GPIO.IN)
    15.  
    16.  
    17. def distanz():
    18.         # setze Trigger auf HIGH
    19.         GPIO.output(GPIO_TRIGGER, True)
    20.  
    21.         # setze Trigger nach 0.01ms aus LOW
    22.         time.sleep(0.00001)
    23.         GPIO.output(GPIO_TRIGGER, False)
    24.  
    25.         StartZeit = time.time()
    26.         StopZeit = time.time()
    27.  
    28.         # speichere Startzeit
    29.         while GPIO.input(GPIO_ECHO) == 0:
    30.                 StartZeit = time.time()
    31.  
    32.         # speichere Ankunftszeit
    33.         while GPIO.input(GPIO_ECHO) == 1:
    34.                 StopZeit = time.time()
    35.  
    36.         # Zeit Differenz zwischen Start und Ankunft
    37.         TimeElapsed = StopZeit - StartZeit
    38.         # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
    39.         # und durch 2 teilen, da hin und zurueck
    40.         distanz = (TimeElapsed * 34300) / 2
    41.  
    42.         return distanz
    43.  
    44. if __name__ == '__main__':
    45.  
    46.   try:
    47.     file_out = open("Testdatei.txt","w")
    48.  
    49.     while True:
    50.  
    51.       abstand = distanz()
    52.  
    53.       print ("Gemessene Entfernung = %.1f cm" % abstand)
    54.  
    55.       file_out.write("%.1f cm\n" % abstand)
    56.  
    57.       time.sleep(5)
    58.  
    59.  
    60.  
    61.   # Beim Abbruch durch STRG+C resetten
    62.  
    63.   except KeyboardInterrupt:
    64.  
    65.     print("Messung vom User gestoppt")
    66.  
    67.     GPIO.cleanup()
    68.  
    69.     file_out.close()
    70.  
    Ich währe euch sehr dankbar wenn mir jemand mit der Automatisierung der Erstellung der Text Datei alle 5sek Abgespeichert....helfen könnte.

    Das mit dem hochladen der Datei und eintagen in Mysql. schaue ich später weiter.
    Genau so das ich den Abstand vom Sensor bis zu Schneedecke messe und eintage was nicht die Schneehöhe ist

    Danke im Voraus für ein Lösungsansatz
     
    Zuletzt bearbeitet: 8. Januar 2017
  2. Technipion

    Technipion Erfahrenes Mitglied

    Hallo Flipswetter,
    wenn ich den aktuellen Code richtig verstehe, speicherst du bereits alle 5 Sekunden automatisiert einen neuen Wert in die Ausgabedatei (Testdatei.txt). Allerdings werden die Werte jeweils in eine neue Zeile geschrieben.

    Kannst du vielleicht nochmal ein bisschen ausholen und genauer erklären, was das Python-Programm machen soll? Ich kenne mich recht gut mit Python/Raspi aus und könnte dir dann dabei helfen.
    Allerdings habe ich im Moment den Eindruck, die Details sind noch nicht ganz ausgefeilt.

    Am besten ist, du machst dir nochmal die übergeordnete Aufgabe klar. Dinge wie z.B. die Synchronisation per FTP, oder die Geschichte mit der MySQL-Datenbank müssen eigentlich klar sein bevor man an's Entwickeln eines einzelnen Unterprogrammes gehen kann.
    Tipp: Da Python sehr mächtig ist, könnte man das evtl. auch mit dem Python-Programm machen. Andererseits bietet Linux natürlich auch alles was du brauchst.

    Ich weiß wie ich gerade klinge, aber vertraue mir bitte, ich meine es nur gut mit dir :). Ein Software-System muss durchdacht sein, bevor man in die Entwicklung geht. Zumindest in einem gewissen Grad, sonst verlierst du irgendwann den Faden. Da spricht meine Erfahrung als Code-Cleaner ;).

    Gruß Technipion
     
Die Seite wird geladen...