Pages: [1]   Go Down
Author Topic: Ausgabe des Arduino per USB in Konsole auslesen  (Read 2566 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3488
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich nehme dazu meisstens ein kleines Python Script:

Code:
#!/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 smiley

Gruß, Udo
Logged

Check out my experiments http://blog.blinkenlight.net

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sollte es nicht auch ein einfaches:
Code:
tail -f /dev/ttyUSB0 >>textdatei
tun?
Logged

Gruß Peter

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Grüsse!

Hansi
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3488
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

http://pyserial.sourceforge.net/

Gruß, Udo
Logged

Check out my experiments http://blog.blinkenlight.net

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3488
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Check out my experiments http://blog.blinkenlight.net

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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... :'(
Logged

Gruß Peter

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3488
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
sudo apt-get install putty

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

Gruß, Udo
« Last Edit: June 03, 2010, 07:00:52 am by udoklein » Logged

Check out my experiments http://blog.blinkenlight.net

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged

Gruß Peter

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3488
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Gruß, Udo
Logged

Check out my experiments http://blog.blinkenlight.net

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged

Gruß Peter

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: