Serielle Schnittstelle Arduino --> Raspberry Pi

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,


    ich will gerade ein bisschen mit der Seriellen Schnittstelle experimentieren. Ich habe als Test einfach ein Arduino Nano der jede 20 Sekunden einen Temperatursensor (DS18S20) ausliest und diesen Wer über die Serielle Schnittstelle ausgibt.

    Nun will ich hinbekommen das der Pi diese Daten auslesen kann. Diese soll er dann (nur zur Kontrolle) dort in der Konsole ausgeben sobald das Programm auf dem Pi läuft und später soll das ganze mit bottle dann an meine Webspace übertragen werden.

    Bis jetzt ist aber erstmal das Ziel das der Pi diese Daten in der Konsole ausgeben kann.

    Leider ist mir nicht klar wie das am besten geht. Ich habe zwar schon ein bisschen was über die Serielle Schnittstelle in Python gelesen aber erfolgreich war ich leider noch nicht.

    Würde mich über Hilfe sehr freuen.

    Viele Grüße und Frohes Weihnachtsfest!
    Florian

  • Hallo,

    kannst du mir evtl. nochmal drüber schauen. Bin mir unsicher. Habe auch noch so aus dem Internet ein paar Beispiele gefunden und mit diesen und deinem Link folgenden Code geschrieben:

    Einmal editiert, zuletzt von floflovaldo (21. Dezember 2015 um 23:23)

    • Offizieller Beitrag

    wenn dein arduino strings mit \n am ende sendet würde ich readline nehmen. Eine Funktion zu definieren reicht nicht, man muss sie auch aufrufen

    Code
    def ArduinoAuslesen():
         try:
              #bla
        except:
             #blub
    
    
    ArduinoAuslesen()
  • mit welcher Spannung läuft der Arduino?
    Der PI mag keine 5V am GPIO, deswegen, läuft bei mir schon 2 Jahre
    Atmel Atmega 8 an Raspberry Pi

    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)

  • Als Grundgerüst würde ich folgendes vorschlagen:

    [code=php]
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import serial, time, sys
    #-------------------------------------------------------------------

    SerialPort = "/dev/ttyACM0"
    SerialBaudrate = 38400

    #-------------------------------------------------------------------

    # serial docu: http://pyserial.sourceforge.net/pyserial.html

    #-------------------------------------------------------------------

    def ArduinoAuslesen(serObject):
    while True:
    try:
    # Remove newline character '\n'
    response = serObject.readline().strip()
    #response = serObject.readline()
    if response:
    print("Arduino-> "+str(response)),
    # ...do something with it...
    except serial.SerialException as e:
    print("Could not open serial port '{}': {}".format(SerialPort, e))
    except (KeyboardInterrupt, SystemExit):
    sys.exit()
    serObject.close()

    #-------------------------------------------------------------------

    def main():
    #initialization and open the port.
    #possible timeout values:
    # 1. None: wait forever, block call
    # 2. 0: non-blocking mode, return immediately
    # 3. x, x is bigger than 0, float allowed, timeout block call
    ser = serial.Serial()
    ser.port = SerialPort
    ser.baudrate = SerialBaudrate
    ser.bytesize = serial.EIGHTBITS #number of bits per bytes
    ser.parity = serial.PARITY_NONE #set parity check: no parity
    ser.stopbits = serial.STOPBITS_ONE #number of stop bits
    #ser.timeout = None #block read
    ser.timeout = 1 #non-block read
    #ser.timeout = 2 #timeout block read
    ser.xonxoff = False #disable software flow control
    ser.rtscts = False #disable hardware (RTS/CTS) flow control
    ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
    ser.writeTimeout = 2 #timeout for write
    try:
    ser.open()
    except Exception as e:
    print("Error open serial port: " + str(e))
    sys.exit()
    if ser.isOpen():
    try:
    ser.flushInput() #flush input buffer, discarding all its contents
    ser.flushOutput() #flush output buffer, aborting current output and discard all that is in buffer
    ArduinoAuslesen(ser)
    except Exception as e:
    print("Error...: " + str(e))
    except (KeyboardInterrupt, SystemExit):
    print("\nSchliesse Programm..\n")
    if ser: ser.close()
    exit()

    if __name__ == '__main__':
    main()
    [/php] --> http://codepad.org/0o3xbf7A

    Beachte dass das für Python 3 ist. Python2 ist nicht vollständig kompatibel.
    Beachte ebenfalls dass der Arduino jedes mal wenn du die Serielle Verbindung herstellst, resettet wird also neu startet. Ausserdem musst du 'SerialBaudrate' richtig/passend einstellen.

  • Hallo,

    also ist es mit dem Programm so möglich das die Werte die über die Serielle Schnittstelle gesendet werden so in der Console angezeigt werden?

    Weißt du auswendig wie man alle gerade verwendeten Schnittstellen anzeigen lassen kann. Weil die in meinem Code erwähnte "ttyACM0" ist ja nur ein Beispiel und trifft bei mir nicht zu.

    Viele Grüße
    Florian

Jetzt mitmachen!

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