Seite 1 von 1

serial: Problem mit der Übertragungsrate

Verfasst: Mittwoch 8. Juni 2016, 12:05
von Nitram
Guten Tag,

ich bin Python-Neuling und kämpfe mit der Übertragung von Daten über die serielle Schnittstelle.
Die Daten stammen von einem Arduino, der nichts anders macht als sich zu "melden".

Code: Alles auswählen

void setup() {
Serial.begin(115200);
}
void loop() {
  Serial.println("Hier bin ich.");
  delay(1000);
}
Nun der Python-Teil.
Wenn ich die serielle Schnittstelle mit der am Arduino eingestellten Übertragungsrate 115200 öffne, erhalte ich "Müll".
Wenn ich sie mit einer falschen Übertragungsrate (9200) öffne, wieder schließe und dann mit 115200 öffne, erhalte ich die gewünschten Daten.

Auf der Konsole sieht das so aus:

Code: Alles auswählen

Python 2.7.8 (default, Sep 30 2014, 15:34:38) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))
�a
�▒�▒▒�p�1�:�
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))

�▒��p��8p�p���
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',9200)
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))
Hier bin ich.

>>> print(ser.read(15))
Hier bin ich.

>>> print(ser.read(15))
Hier bin ich.

>>> ser.close()
Wenn ich wieder / weiter lesen will wiederholt sich das Spiel.
Auch jetzt muss ich erst mit 9200 öffnen, um dann erfolgreich mit 115200 lesen zu können.

Code: Alles auswählen

>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))
p�p�p�1�:1�>:�▒
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))
p�>:�a��a▒��p��
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',9200)
>>> ser.close()
>>> ser=serial.Serial('/dev/ttyUSB0',115200)
>>> print(ser.read(15))
Hier bin ich.

>>> ser.close()
>>> 
Das Problem tritt auch auf, wenn ich serial.tools.miniterm verwende:

Code: Alles auswählen

nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> python -m serial.tools.miniterm -p /dev/ttyUSB0 -b 115200
--- Miniterm on /dev/ttyUSB0: 115200,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Hier bin ich.
Hier bin ich.
Hier bin ich.
--- exit ---
nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> python -m serial.tools.miniterm -p /dev/ttyUSB0 -b 115200
--- Miniterm on /dev/ttyUSB0: 115200,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
p�p�>:
--- exit ---
nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> python -m serial.tools.miniterm -p /dev/ttyUSB0 -b 115200
--- Miniterm on /dev/ttyUSB0: 115200,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
�▒▒
--- exit --
nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> python -m serial.tools.miniterm -p /dev/ttyUSB0 -b 9200
--- Miniterm on /dev/ttyUSB0: 9200,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
�]�
--- exit ---
nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> python -m serial.tools.miniterm -p /dev/ttyUSB0 -b 115200
--- Miniterm on /dev/ttyUSB0: 115200,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Hier bin ich.
Hier bin ich.
Hier bin ich.
Hier bin ich.
Hier bin ich.

--- exit ---
nitram@linux-DrDet:~/Downloads/ArduinoPlot-master> ^C
Kann mir jemand einen Tipp geben, wie ich die Verbindung "sicher" in einem Versuch aufbauen kann?

Gruß
Nitram

Re: serial: Problem mit der Übertragungsrate

Verfasst: Mittwoch 8. Juni 2016, 13:14
von BlackJack
@Nitram: Je nachdem welchen Arduino Du hast kann es sein das der jedesmal wenn eine Serielle Verbindung aufgebaut wird resettet und die ersten 1 oder zwei Sekunden nicht Dein Programm auf dem Arduino auf der seriellen Schnittstelle lauscht sondern die Firmware kurz wartet ob man versucht den Arduino über die serielle Schnittstelle neu zu flashen. Also bau nach dem Verbindungsaufbau einfach mal eine kurze Wartezeit ein und schau ob es dann funktioniert.

Re: serial: Problem mit der Übertragungsrate

Verfasst: Mittwoch 8. Juni 2016, 15:11
von Nitram
Leider nicht.
Ich habe mit zwei Nanos und einem Duemilanove getestet.
Die Code-Schnippsel oben sind wirklich "von der Konsole", d.h. während ich Tippe hatte der Arduino viel Zeit ("mehrere" bis "viele" Sekunden , bis ich das nächste mal auf Return gedrückt habe.

Gruß
Nitam

Re: serial: Problem mit der Übertragungsrate

Verfasst: Freitag 10. Juni 2016, 14:39
von Sr4l
Ich habe dein Code ausprobiert. Sowohl auf Arduino als auch Python Seite kann ich das Verhalten nicht bestätigen.

Xubuntu 14.04 mit Python 2.7.6 und Arduino Nano.

Re: serial: Problem mit der Übertragungsrate

Verfasst: Sonntag 12. Juni 2016, 12:38
von Nitram
Danke für die Hilfe-Versuche.
Ich habe mittlerweile mit einem Raspi (Phyton 2.7.3) statt PC (OpenSuse 13.2 mit Phyton 2.7.8 und Phyton 3.4.1) getestet.
Dort gibt es keine Probleme.

Ist wohl kein Python-Problem, sondern irgendwo bei der Installation oder Hardware meines PCs zu suchen.

Gruß
Nitram

Re: serial: Problem mit der Übertragungsrate

Verfasst: Sonntag 12. Juni 2016, 14:45
von Sr4l
Installation kannst du mit einer Live CD schnell testen.

Ich könnte mir vorstellen das mehr als ein zweites Programm mit falschen Einstellungen auf die Schnittstelle zugreift und das dadurch das Verhalten ausgelöst wird.

PS: Unter meinem Laptop Xubuntu 16.04 mit Python 2.7.11+ funktioniert es auch.