[Python] Arduino Variable(n) über USB an RPi senden

  • Hi,

    ich versuche gerade eine (bzw. später auch mehrere) Variablen vom Arduino an den Pi zu senden.
    Dabei habe ich versuch dieses Tutorial zu verwenden. Da ich aber keinen Google AppEngine Server verwenden will, sonderen erstmal nur die Variable ausgeben musst eich den Python-Code ein wenig abändern:

    Jetzt gibt er mir die Temperatur (Ich hab keinen analogen Temperatursensor sondern ein Poti am Arduino angeschlossen) zwar aus, allerdings mit "T:" und Zeilenumbruch. Ich würde aber gerne nur den Wert der Variable haben um diese Weiterverarbeiten zu können.

    Wenn ich aber beim Arduino-Code

    Code
    Serial.print("T: ");
      Serial.print("\n");


    entferne gibt mir der Raspberry Pi gar nichts mehr aus. Obwohl das

    Code
    Serial.print(temperature);


    Element eigentlich ja die Temperatur zum Pi senden müsste. Gibt es eine Möglichkeit nur die Variable zu übertragen?
    Kann ich auch mehrere Variablen übertragen?

    MfG c3ntry

  • [Python] Arduino Variable(n) über USB an RPi senden? Schau mal ob du hier fündig wirst!

  • \n ist Zeilenvorschub, ich vermute erst ab da wird es ausgegeben

    statt \n (kannst du weglassen) geht auch Serial.println("T: "); (ln für Line was auch wieder den Zeilenvorschub macht)

    ignoriere das doch einfach im PI und nehme \n als Zeilenende im PI und hole dir nur das benötigte raus.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Also es funktioniert jetzt, Serial.println(temperature) gibt den Zeilenvorschub nach dem Wert zwar aus, allerdings konnte ich das Problem lösen indem ich die Variable in Python nach dem auslesen in einen Integer konvertiert habe.

    Jetzt habe ich noch eine Frage: Welchen Einfluss hat die delay-Zeit auf den Pi?

    Und wie funktioniert das ganze mit 2 oder mehr Variablen?

    MfG c3ntry

    • Offizieller Beitrag

    wenn du in python readline verwendest musst du auf dem Arduino auch \n mitsenden (bzw. println) ansonsten kennt musst du read() unter python nutzen.

    Bei mehreren Variablen baust du dir vor dem Senden einen String zusammen (WERT1;WERT2;WERT3) und splittest diesen unter python wieder auf auf.

    Code
    Serial.println(temperature+";"+Luftfeuchtigkeit)
    #####
    a = serial.readline().strip()
    a.split(";")

    Es kommen immer Strings an, die ich pauschal Trimmen (strippen) würde. Sprich wenn du Zahlen brauchst musst du die Werte danach umwandeln.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (2. Juli 2014 um 19:26)

  • Also das Splitten hat mit 2 Werten noch klasse geklappt allerdings funktioniert es mit 3 nicht zuverlässig. Da die Liste die er Einlist manchmal zu kurz ist:
    Der Serial Monitor (ino serial) auf dem Pi empfängt aber die Korrekten Werte, außer beim ersten mal, und darauf kommt es ja an:

    Ich schätze das ist ein Timing Problem oder so, kann man in Python beim RPi kurz warten oder hilft es vielleicht beim Arduino die Pause zwischen den Messungen zu verlängern?

    EDIT: Mit 3000ms Pause funktioniert es (bis jetzt) stabil.
    EDIT2: Es lief leider nur 8 min bis zum ersten Abstürz...

    MfG c3ntry

    Einmal editiert, zuletzt von c3ntry (3. Juli 2014 um 16:58)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!