Forum: Analoge Elektronik und Schaltungstechnik Arduino und serielle Kommunikation mittels Python


von DerBee (Gast)


Lesenswert?

Hallo ihr lieben, ich steh etwas auf dem Schlauch und würde mich um 
Hilfe freune, da ich irgendwie nichts richtiges finde.

Ich habe eine Applikation die bei bestimmten Ereignissen eine serielle 
Verbindung zu einem Arduino aufbauen soll und ihm Variablen übergben 
soll.
An sich klappt das auch alles ganz gut, das einzige was etwas doof ist, 
ist die relativ lange Zeit (ca 2-3 Sekunden) die es braucht um die 
serielle Verbindung aufzubauen.
Zuerst hatte ich das ganze über Powershell gelöst, hier war aber der 
Nachteil, dass Powershell für jede Aufgabe erneut eine Verbindung 
aufbauen musste.
Also meinte ein Bekannter probiers mit Python.
Gesagt getan, alles runtergeladen und installiert, klappt auch genauso 
wie mit der Powershell, aber auch hier wieder relativ lange Zeit zum 
Aufbau der Verbindung.

Jetzt dachte ich mir, ich mache einfach zwei Skripts.
Das eine wird direkt bei Programmstart ausgeführt und öffnet die 
serielle Verbindung und das andere wird immer ausgeführt wenn die Aktion 
aus meinem Programm zutrifft.
Allerdings kennt natürlich das eine Skript nicht die Variablen des 
anderen und somit auch nicht die Variable für den Arduino.

Kennt jemand eine Möglichkeit eine serielle Verbindung aufzubauen die 
einfach nur darauf lauert bis sie input aus einem anderen Skript 
bekommt?

Eckdaten:
Arduino UNO Rev3
Windows 8.1
Python 3.x

Verbindungsaufbauskript:
import serial
import time
arduino = serial.Serial(2)
time.sleep(1) # waiting the initialization...

Ausführendes Skript:
arduino.write('1'.encode())

Die Variable Arduino kennt das ausführende Skript natürlich nicht.

Wäre dankbar über eure Hilfe.

Viele Grüße
Lorenz

von Sven B. (scummos)


Lesenswert?

Was ist das für ein Programm? Kann das nicht selbst eine Verbindung 
aufbauen und bereithalten?

von Bernd K. (prof7bit)


Lesenswert?

DerBee schrieb:

> das einzige was etwas doof ist,
> ist die relativ lange Zeit (ca 2-3 Sekunden) die es braucht um die
> serielle Verbindung aufzubauen.

Da ist was anderes faul.

Das liegt weder an der Tatsache daß es eine serielle Verbindung ist noch 
daß Du Python verwendest, noch nicht mal die Tatsache daß Du 
wahrscheinlich Windows verwendest kann so ein seltsames Verhalten 
erklären. Das sollte in jedem Falle in Sekundenbruchteilen ablaufen, so 
schnell daß Du ohne technische Hilfsmittel mit bloßem Auge keine 
Verzögerung feststellen kannst.

Kann es sein daß Du in das Problem stolperst daß einige (neuere?) 
Arduinos bei Betätigung der DTR-Leitung einen Reset auslösen? Achte mal 
drauf ob die LED an Pin 13 kurz anfängt zu blinken sobald Du am PC den 
seriellen Port öffnest (das Blinken wäre der Arduino bootloader nach dem 
Reset) oder häng mal das Oszi an den Reset-Anschluss und schau was da 
passiert. Wenn das der Fall ist dann google mal nach der Lösung mit dem 
festzurren der Reset-Leitung mittels 100 Ohm nach Vcc oder einem 
ausreichend großen Elko.

Es ist auch möglich unter Windows den com port so zu konfigurieren daß 
DTR nicht betätigt wird, auch mit Python sollte das theoretisch möglich 
sein, dann wäre keine Hardwareänderung nötig. Leider geht das aber nur 
unter Windows, der Linux-Treiber hat das Deaktivieren von DTR leider 
nicht implementiert.

von DerBee (Gast)


Lesenswert?

Hallo und Danke für eure Antworten,

hi Sven, nein das Programm kann das derzeit leider nicht, deswegen der 
umständliche Weg über Skripte oder Batchfiles.

Hallo Bernd, daran könnte es natürlich auch liegen. Ich werde das 
nachher gleich mal beobachten und den Reset mal unterbinden.

Danke schonmal für den vielversprechenden Tipp ich melde mich sobald ich 
es ausprobiert habe.

Viele Grüße
Lorenz

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.