@error404: Vielleicht die Steuerzeichen für Wagenrücklauf und Zeilenvorschub *nach* den Daten senden und nicht *davor*? Oder zumindest sollte/müsste man ohne abschliessende Steuerzeichen den Ausgabepuffer ”flush”en.
Die „she-bang“-Zeile ist fehlerhaft. Zwischen '!' und '/' darf kein Leerzeichen stehen. Ausserdem ist es besser `env` zu verwenden und den Pfad zum Python-Interpreter nicht hart vorzugeben. ``/bin/python3`` ist wahrscheinlich auch nicht sooo häufig. Zumindest nicht unter den meisten Linuxdistributionen.
Allerdings ist Python 3 eh falsch wenn der Code `raw_input()` verwendet! Andererseits schreibst Du die ``print``-Anweisung als wäre es eine Funktion. Sehr verwirrend.
Zudem sind da einige Merkwürdigkeiten in dem Code.
Das ``if`` mit `ser.isOpen()` macht keinen Sinn weil die Verbindung an der Stelle offen *ist*, denn sonst hätte das erstellen des `Serial`-Exemplars eine Ausnahme ausgelöst.
Wie ``while``-Schleife macht so gar keinen Sinn weil sie grundsätzlich *genau* einmal durchlaufen wird. Damit ist das aber Schleife.
`exit()` braucht man am Ende des normalen Programmflusses nicht aufrufen und vor allem sollte man das nicht tun ohne die Funktion explizit aus dem `sys`-Modul zu importieren. Das die einfach so existiert ist ”Zufall”. Grundsätzlich sollte man die Funktion sowieso nur aufrufen wenn man einen Rückgabecode an den aufrufenden Prozess übermitteln möchte, und nicht einfach nur um das Programm zu beenden.
`Serial`-Objekt sind übrigens Kontextmanager und können mit ``with`` verwendet werden.
Die Ausgabe am Programmende stimmt nicht: Nicht irgendeine Taste beendet das Programm, sondern die Eingabetaste. `cmd` wird nicht verwendet, braucht also auch nicht definiert zu werden. Wobei so etwas sehr nervig ist wenn man das Konsolenprogramm in der Konsole startet. Da enden Programme einfach und gut ist.
Eingerückt wird per Konvention vier Leerzeichen pro Ebene. Nicht fünf und auch nicht acht.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import time
from serial import Serial
def main():
port = '/dev/ttyUSB0'
baud = 115200
with Serial(port, baud) as connection:
print(connection.name, 'is open...')
time.sleep(1)
print('Please wait a few seconds')
connection.write(b'SET NAME TEST123\r\n')
time.sleep(2)
raw_input('successful!\npress enter to exit...')
if __name__ == '__main__':
main()