serial/usb-stick mit python ansprechen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
krischeu
User
Beiträge: 40
Registriert: Freitag 9. Januar 2009, 17:04

Hallo,
ich bräuchte mal wieder einen Tip ...

Ich habe einen USB-Stick von Amberwireless. Der ist zum senden und empfangen von Daten über das 800er MHz Frequenzband. Das funktioniert soweit unter Windows (VisalBasic) ganz gut. Im Terminal von gtkterm empfange ich unter Linux (Ubuntu 10.04 LTS) auch die Daten.
Dort gibt es ein ttyUSB0 das von gtkterm funktionabel unterstützt wird.

Im Terminal nutzen mir zum einen die Daten so nichts und zum anderen würde ich gerne die Empfangenen Daten auch gleich auswerten und in eine mysql-Datenbank schreiben.
Also wieder mal Python bemühen. Es gibt "import serial" und die Beispiele: http://www.zaber.com/wiki/Software/Python. Auch gefunden habe ich: http://pyserial.sourceforge.net

Probiert habe ich folgende codesnipps:

Code: Alles auswählen

#!/usr/bin/env python
# Import the pyserial module.
#
import serial

# Open the port. Specify baudrate and handshake.
#
ser = serial.Serial('/dev/ttyUSB0',19200)
ser.read(size=1)
#
ser.close()

Code: Alles auswählen

#!/usr/bin/env python
import sys
f = open('/dev/ttyUSB0', 'r')
try:
 while 1:
  l = f.readline()
  print l
except:
 f.close

Da der Sender dauernd sendet und mein Empfänger unter Linux immer empfängt, blinkt das Teil immer (ist schon mal gut). Aber wenn ich ein python programm starte hört das auf ... und ich bekomme auch keine Zeichen angezeigt die der Sender gesendet hat.

Hat da vielleicht jemand einen heißen TIP?
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

die Methode read() liefert dir doch das Zeichen zurück, du musst es nur noch ausgeben. Oder etwa nicht?

Dies funktioniert bei mir einwandfrei (unter Windows COM9):

Code: Alles auswählen

ser = serial.Serial()
ser.port = 8
if ser.isOpen():
    ser.close()
ser = serial.Serial(8, 2400, timeout=60)
while True:
    x = ser.read()          # read one byte
    print x
falls dies nicht funktioniert so zeig doch die exception oder beschreib den Fehler. Du kannst übrigens nicht gleichzeitig mit dem Terminalprogramm und mit dem Skript auf die gleiche serielle Schnittstelle zugreifen.
krischeu
User
Beiträge: 40
Registriert: Freitag 9. Januar 2009, 17:04

druckt es nicht mit "print l" ?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Frag doch mal den Anbieter des Sticks freundlich, wie er initialisiert werden muss.
Wenn du ihn mit 19200 Bit/s ansprichst, er aber 9600 erwartet, wird das nichts.
krischeu
User
Beiträge: 40
Registriert: Freitag 9. Januar 2009, 17:04

Hi,
unter Windows ist er fest auf 19200 eingestellt.
Das kann man dort mit dem Tool von den Amberwirelessjungens machen.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

krischeu hat geschrieben:druckt es nicht mit "print l" ?
Das verstehe ich nicht. Mit welchem Skript versuchst du es? Hast mein Skript schon einmal versucht?
Lösch einmal in deinem Skript den try-except Block weg und poste hier die Fehlermeldung. Ich vermute stark es gibt eine Exception, die mit deinem schlechten try-except konstrukt einfach verschluckt wird.
Es könnte auch sein, dass die serielle Schnittstelle bereits geöffnet ist. Aus diesem Grund habe ich die folgenden 2 Zeilen in meinem Skript:

Code: Alles auswählen

if ser.isOpen():
    ser.close()
liefere ein bissche mehr Infos über dein Skript und deine Versuche, sonst ist es nicht möglich dir besser zu helfen.
krischeu
User
Beiträge: 40
Registriert: Freitag 9. Januar 2009, 17:04

Also,
erst mal vielen Dank für das ausgraben des Threads.

Back to the roots.

Ich hab mal das Teil wieder rausgekramt, reingesteckt, blinkt.

Code: Alles auswählen

heinz@pippin:~/scripte$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> open('/dev/ttyUSB0', 'r')
<open file '/dev/ttyUSB0', mode 'r' at 0x7f8634973c00>
>>> 
Bei open file ... hört es dann auch wieder auf rumzublinken :(

Hilft euch das weiter um mir weiterzuhelfen ?
Antworten