Zusammenspiel Arduino und RPi

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

    bin neu hier und auch nur ein kleiner Hobbyprogrammierer.

    Für meine Arbeit möchte ich einen Arduino Mega eine gewisse Anzahl Sensoren und Eingänge auslesen lassen. Die Werte sollen über ein USB-Kabel an den Raspberry übertragen werden und von diesem in einer LOG-Datei gespeichert werden. (Später soll dann noch über einen Webserver auf den RPi zugegeriffen werden können. Doch das ist zweitrangig.)

    Ich habe jetzt mal die beiden Programme beispielhaft fertig. Könntet ihr mal bitte drüber schauen, ob ich etwas verkehrt gemacht habe. Ich habe nämlich keine Ahnung von seriellen Schnittstellen :blush:

    Vielen Dank schin einmal für Eure Mühen.

    Arduino Code:


    Python Code RPi:

  • Anhand deines Posts sieht man das du den Code aus einem anderen Forum copy&pastet hast :D Aber dabei eben den Fehler gemacht das dem Sketch aufm Arduino die SoftwareSerial lib vergessen hast sowie dessen Initialisierung..

    Beim kompilieren kriegt man zudem weitere FehlermeldungeN:

    Code
    Receive_PI.ino: In function 'void loop()':
    Receive_PI:44: error: 'A8' was not declared in this scope
    Receive_PI:45: error: 'A9' was not declared in this scope
    Receive_PI:46: error: 'A10' was not declared in this scope
    Receive_PI:47: error: 'A11' was not declared in this scope
    Receive_PI:48: error: 'A12' was not declared in this scope
  • Hallo Meigrafd,

    Natürlich kopiert, und schon etliche Spielchen mit gemacht :thumbs1:

    der Code läuft auf meinem Arduino. Auch zeigt er mir die Daten in dem Serial Monitor gut an. Die Auswertung mit dem Python Programm ist es, was mir Sorgen macht.

  • Hi,

    Code
    // start serial port at 9600 bps:
      Serial.begin(9600);
    Code
    ser = Serial('/dev/ttyUSB0', 9600, 7, 'E', 1)

    warum 7E1 ??
    Bist Du sicher, dass diese Schnittstellen-Parameter stimmen?

    Zitat


    The default is 8 data bits, no parity, one stop bit.

    cu,
    -ds-

  • Nein, überhaupt nicht.

    Das ist einer der wenigen kopierten Teile, bei dem ich gar nichts verstehe.

    Auf jeden Fall passte die Bezeichnung nicht. Die lautet /dev/ttyACM0

    Mit anderen Paramtern kann ich leider gar nicht anfangen. Wenn ich Sie weglasse, würde er dann irgendwelche Standardparameter heranziehen?

  • Zitat

    ich hab' jetzt leider überhaupt keine Ahnung von Python ...


    Ich auch nicht.
    Aber, nichts desto Trotz, stimme ich dir zu.

    Zitat

    Das ist einer der wenigen kopierten Teile, bei dem ich gar nichts verstehe.


    Mit den Suchworten "UART", "RS232" solltest du, bei Google, alles nötige finden um diesen unsäglichen Zustand zu beenden.
    Tipp:
    Das hat grundsätzlich erst mal nichts mit Arduinos oder RPIs zu tun. Auch nichts mit C++ oder Python.

    spruch.png

    Einmal editiert, zuletzt von combie (6. Juli 2014 um 16:21)

  • Woher hast du den Sketch denn kopiert also aus welchem Forum?


    Nicht im Bezug auf den PI @ dreamshader :D Beim PI sollte es nicht /dev/ttyUSB0 sein sondern /dev/ttyACM0 , zumindest ist das bei mir so wenn ich den Arduino-UNO an den PI anschließe (siehe Ausgabe des Befehls dmesg)


    combie: mit UART oder RS232 hat das auch nichts zu tun ;)
    Der Arduino wird über USB an den PI angeschlossen und dann passiert dies:

    Code
    [14501.780449] usb 1-1.3: new full-speed USB device number 5 using dwc_otg
    [14501.899780] usb 1-1.3: New USB device found, idVendor=2341, idProduct=0043
    [14501.899818] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=220
    [14501.899838] usb 1-1.3: Manufacturer: Arduino (www.arduino.cc)
    [14501.899854] usb 1-1.3: SerialNumber: 75331333939351B01292
    [14501.976265] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
    [14501.981731] usbcore: registered new interface driver cdc_acm
    [14501.981764] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters


    Künftig kann man über /dev/ttyACM0 mit dem Arduino kommunizieren

    Siehe dazu auch: http://www.elinux.org/Serial_port_programming

  • > combie: mit UART oder RS232 hat das auch nichts zu tun
    Doch!
    Die Parameter 9600, 8, 'N', 1
    Haben sehr wohl was mit UART und RS232 zu tun.
    Und da ist ja das Problem! (vermutlich)
    Mit 7,'E' wird die Übertragung bei ca jedem 2ten Zeichen ein Versagen erleiden.
    Bzw. die Übertragung tuts, nur wird die/der UART es als fehlerhaft einstufen


    Zitat

    Auf jeden Fall passte die Bezeichnung nicht. Die lautet /dev/ttyACM0


    Das Linux/Unix spezifische Problem /dev/ttyACM0 vs. /dev/ttyUSB0 ist damit gelöst.

    spruch.png

    Einmal editiert, zuletzt von combie (6. Juli 2014 um 16:53)

  • Hi,


    ...
    Nicht im Bezug auf den PI @ dreamshader :D Beim PI sollte es nicht /dev/ttyUSB0 sein sondern /dev/ttyACM0 , zumindest ist das bei mir so wenn ich den Arduino-UNO an den PI anschließe (siehe Ausgabe des Befehls dmesg)
    ...

    ja, klar ... hast ja recht, alter Krümel-K... ;)
    Hab ich jetzt nicht drauf geachtet ... mir sprangen da die 7E1 so heftig ins Auge ...

    cu,
    -ds-

  • Ich hab das mal lokal nachgebildet, auch wenn ich kein LCD hab...

    Benötigtes Paket installieren:

    Code
    apt-get install python-serial

    Sketch zum testen auf den Arduino flashen:

    Python Script auf PI ausführen:

    Arduino an den PI anschließen und danach Python Script ausführen.

    Ausgabe auf dem PI:

  • Hallo zusammen,

    vielen Dank noch Mal für die reichlichen Hinweise.

    Das Problem mit dem Verbindungsaufbau ist gelöst. Mit euren Einstellungen bekomme ich Verbindung.
    Einen weiteren Fehler habe ich auch beheben können. Das Arduino sendet zur Initialisierung ein A solange bis eine Verbindung hergestellt wurden. Ich habe zur Initialisierung haber eine .readline verwendet. Dieser Befehl erwartet am Ende der Zeichenkette ein \n. Problem gelöst.

    Wenn ich das jetzt auf dem PC laufen lasse und das Arduino mit dem PC reden lasse (Win7) klappt alles. Leider in Verbindung mit dem RPi nicht. Dieser macht mir noch ein Timeout bei folgendem Befehl:

    Code
    com_in = ('')
                ser.write('A\n')
                ser.flush()
                com_in = str(ser.readline())

    Hat da noch jemand eine Idee?

Jetzt mitmachen!

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