Go Down

Topic: Ausgabe des Arduino per USB in Konsole auslesen (Read 2958 times) previous topic - next topic

hansi-gnhf

Hallo liebe Bastler-Freunde!

Aktuell stehe ich vor dem Problem, dass ich den Arduino angeschlossen habe. Er spuckt in der Arduino-Software auch brav alles aus, was ich ihm eingefüttert habe. Auf der seriellen Konsole kann ich schön die Temperatur sehen, die Luftfeuchte & Co.

Jetzt kommt der Teil, der das Ganze mit Kubuntu verbinden soll:

Kann man die Ausgabe, die vom Arduino kommt (über /dev/ttyUSB0) mit cat/dd auslesen und verwenden? Ich habe schon

cat /dev/ttyUSB0 > ~/textdatei

versucht, auch als root, aber das klappt nicht ernsthaft.

Nun seid ihr gefragt... denn wie schön wäre es, wenn man dann mit den mitgelieferten Linux-Tools an den Datenstrom herankommen könnte... dann könnte man die Dinge in eine Datenbank schreiben, oder umsortieren oder auf Webseiten grafisch (gnuplot) darstellen lassen, oder mit Calc übernehmen und so fort...

Danke schonmal im Voraus für gute Ideen!

Hansi

Webmeister

Das ist nicht wirklich ein Arduino-Problem. Stell deine Frage bitte in einem Ubuntu-Forum.

Udo Klein

Ich nehme dazu meisstens ein kleines Python Script:

Code: [Select]

#!/usr/bin/python
# -*- coding: utf-8 -*-

import serial
import time
import sys

if len(sys.argv) == 3:
     ser = serial.Serial(sys.argv[1], sys.argv[2])
else:
     print "# Please specify a port and a baudrate, e.g. %s /dev/ttyUSB0 115200" % sys.argv[0]
     print "# using hard coded defaults /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A900acuK-if00-port0  300"
     ser = serial.Serial("/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A900acuK-if00-port0", 300)

while 1:
     sys.stdout.write(ser.readline())


Geht sicher auch mit Perl oder der Shell, aber ich bevorzuge nun mal Python :)

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

hansi-gnhf

Hallo Udo!

Vielen Dank für dein Skript! Das habe ich mir sofort in einer Datei gesichert (~/arduino-auslesen.py).

Nun gehts los: wie rufe ich sie genau auf? Ich habe per chmod der Datei die Rechte 755 verpasst und wenn ich sie mit "./arduino-auslesen.py" aufrufe, erscheint eine Fehlermeldung:

hans@hans-desktop:~$ ./arduino-auslesen.py /dev/ttyUSB0 9600
Traceback (most recent call last):
 File "./arduino-auslesen.py", line 4, in <module>
   import serial
ImportError: No module named serial

Gibt es noch mehrere Parameter, die ich deinem Skript mitgeben mag?

Ich danke dir schonmal für eine Antwort auf meine unerfahrene Frage...

Hansi

Schwarzfuss

Sollte es nicht auch ein einfaches:
Code: [Select]
tail -f /dev/ttyUSB0 >>textdatei
tun?
Gruß Peter

hansi-gnhf

Leider nicht... das habe ich mir auch in etwa so vorgestellt, aber leider klappt es nicht. Schade!

Grüsse!

Hansi

Udo Klein

Hmm, dann fehlt Dir pyserial. Musst Du halt noch installieren. Du findest das z.B. hier:

http://pyserial.sourceforge.net/

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

Udo Klein

Nachtrag: unter Ubuntu sollte man das auch über den Paketmanager installieren können. Zumindest scheint das als Paket verfügbar zu sein:

http://packages.ubuntu.com/source/intrepid/pyserial

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

Schwarzfuss

Ich hoffe, das dir Udos Python Skript weiterhilft,
denn aktuell funktioniert auch hier leider kein tail mehr.
Siehe dir dazu mal diesen Post an:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1253326681

Bis vor 4 Wochen ist das problemlos gelaufen (Debian testing),
heute (nach div. Updates) leider nicht mehr, ob es an den Parametern für stty liegt,
oder an tail, das kann ich nicht beurteilen,
hab die verschiedensten Parameter durchgetestet, es will einfach nicht mehr... :'(
Gruß Peter

Udo Klein

#9
Jun 03, 2010, 01:59 pm Last Edit: Jun 03, 2010, 02:00 pm by udoklein Reason: 1
Noch ein Nachtrag. Manchmal will man ja auch Sachen an den Arduino schicken und ist zu faul das Skript zu erweitern. Oder man hat es nicht zur Hand und stört sich nicht eine schwergewichtige Lösung zu nehmen. Da fällt mir dann immer gleich "putty" ein. Das gibt's für Windows und Unix. Für Ubuntu installiert man das mit

Code: [Select]

sudo apt-get install putty


Das geht am allereinfachsten. "connection type serial" auswählen und fertig. Allerdings ist das ein ziemlicher Overkill.

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

Schwarzfuss

An tail beiß ich mir weiterhin die Zähne aus, keine Lösung in Aussicht...
aber cat sollte eigentlich gehen, wenn die Schnittstelle so vorbereitet wird:
Code: [Select]
stty -F /dev/ttyUSB0 115200 raw
cat /dev/ttyUSB0 >~/textdatei

Serial.begin(115200);
sollte dann so im Arduino Programm stehen.

Entgegen o.g. Link darf der Parameter hier nicht mehr min 0 sein, bei hupcl ist es egal,
also müßten die Einstellungen Baudrate und raw ausreichen.
Gruß Peter

hansi-gnhf

Dank eurer Hilfe habe ich nun die finale Lösung gefunden!

Leider klappt es nicht mit einfachen Befehlen, aber wenn die einfachen Befehle etwas genauer definiert werden, geht es damit auch:

1. Initialisieren des USB-Anschlusses
   stty -F /dev/ttyUSB0 9600 cs8 raw -cstopb -parity -icanon -hupcl min 0 time 10

2. Auslesen mit tail
   tail -f /dev/ttyUSB0 > textdatei

Fertig!
(Das Auslesen anstelle von tail ginge theoretisch auch mit cat oder dd - jedoch habe ich hier einen Abbruch nach ca. 5 Sekunden festgestellt. tail -f ist ja ein Befehl, der den Anschluss verfolgt und das auch längerfristig machen sollte...)

Ein zweiter Weg besteht über den Weg mit Python:

1.  apt-get install python-serial

2. ./arduino-auslesen.py > textdatei

Die Datei "arduino-auslesen.py" stammt von Udo Klein (oben weiter im Thread).

Ich danke allen, die hier teilgenommen haben und ihre Gedanken teilten!

Jetzt kann ich auch durch den Arduino Nachrichten in die Welt schicken lassen, in eine Datenbank hinein oder auch schlicht auswerten? Der Phantasie sind nun keine Grenzen gesetzt!

Danke an euch!

Stichworte für Suchmaschinen: Arduino auslesen seriell serielle Ausgabe stty tail python Duemillanove auswerten Meldungen


Udo Klein

Ich hab ja schon fast vermutet, daß das mit STTY irgendwie gehen muß. Jetzt weiß ich endlich wie :)

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

Schwarzfuss

Freut mich sehr, wenn dir geholfen wurde hansi-gnhf,
aber ich hoffe, das der Post damit noch nicht für dich erledigt ist.
Schreib doch mal bitte die Versionsnummer deiner coreutils:
Code: [Select]
stty --version
Hier ist es V8.5 und mittlerweile konnte ich den Fehler für tail eingrenzen,
schuldig sind offensichtlich min und time!

Für cat muß ich min 1 oder icanon nehmen, Werte für time sind egal (0-255),
für tail muß ich min 0 und -icanon nehmen, Werte für time sind ganz und garnicht egal!
Sie müssen zw. 101-192 sein dann läufts, könnte vielleicht daran liegen,
das hier nur ca. alle 10 Sekunden ein Wert übertragen wird.

Falls deine Versionsnummer höher ist, hab ich Hoffnung das das Problem bald gelöst ist,
ist sie niedriger, kommst du bald auch dahin..., bei gleichen Versionen ist was Anderes faul.
Gruß Peter

hansi-gnhf

Hallo Schwarzfuss,

du fragtest nach meiner Version von stty: es ist die Version 7.4 aus Kubuntu 04.10 Lucid Lynx.

Das ist natürlich absolut Käse, dass solch scheinbar einfache Dinge, wie einen Port auszulesen, so schwer gemacht werden. Und das quasi "künstlich" als ob wir nichts anderes zu tun hätten...

Ich "freu" mich schon auf die neuen Versionen... ;-)

Danke schonmal für den Hinweis!

hansi-gnhf

Go Up