python arduino serial Lesen & schreiben
Ich versuche, die "ping-pong" - info hin und her zwischen einigen python-code und arduino-code.
Ich möchte zum senden von zwei Sollwerte an den arduino-code in regelmäßigen Abständen (zum Beispiel auf die minute), Lesen Sie auf arduino & aktualisieren von Variablen, dann senden Sie status-info aus dem arduino zurück zu python in regelmäßigen Abständen (z.B. auf :30 Sekunden). Schließlich python versenden, und ziehen Informationen aus einer mySQL-db (später dev).
Jetzt komme ich nicht an die info zu hüpfen hin und her zuverlässig. Ich habe nicht gefunden was in der Nähe dieser in die Recherchen und alles, was ich habe versucht zu ändern, funktioniert nicht. Nächste, den ich habe, ist diese (und es tatsächlich nicht hin und her wechseln zwischen senden und empfangen):
Python
#!/usr/bin/python
import serial
import syslog
import time
#The following line is for serial over GPIO
port = '/dev/ttyS0'
ard = serial.Serial(port,9600,timeout=5)
i = 0
while (i < 4):
# Serial write section
setTempCar1 = 63
setTempCar2 = 37
ard.flush()
setTemp1 = str(setTempCar1)
setTemp2 = str(setTempCar2)
print ("Python value sent: ")
print (setTemp1)
ard.write(setTemp1)
time.sleep(4)
# Serial read section
msg = ard.readline()
print ("Message from arduino: ")
print (msg)
i = i + 1
else:
print "Exiting"
exit()
Arduino:
// Serial test script
int setPoint = 55;
String readString;
void setup()
{
Serial.begin(9600); // initialize serial communications at 9600 bps
}
void loop()
{
while(!Serial.available()) {}
// serial read section
while (Serial.available())
{
if (Serial.available() >0)
{
char c = Serial.read(); //gets one byte from serial buffer
readString += c; //makes the string readString
}
}
if (readString.length() >0)
{
Serial.print("Arduino received: ");
Serial.println(readString); //see what was received
}
delay(500);
// serial write section
char ard_sends = '1';
Serial.print("Arduino sends: ");
Serial.println(ard_sends);
Serial.print("\n");
Serial.flush();
}
Alle, die ich am Ende immer die gleichen Werte wiederholt (nicht das, was tatsächlich gesendet wurde, nicht sicher, ob es ein string oder byte-Ausgabe) und nichts zurück, um das python-Skript. Jede Hilfe oder Ideen werden sehr geschätzt. Danke.
EDIT: code Geändert, was ich bin derzeit ausgeführt, wie unten vorgeschlagen. Arduino empfängt fein-und serielle Kommunikation überprüft, indem minicom. Aber das python-Skript immer noch druckt eine leere Zeile nach der "Nachricht von arduino: ".
- Warum schließen Sie den seriellen port in python in zwischen lese - & schreibt?
- Ich wurde mit dieser Methode in einem Versuch zu zwingen, tauschen die das Lesen und schreiben. Ich hatte gelesen, dass über das tun, anstatt flush auf einem der Foren.
- Ich bekomme die Fehlermeldung "serial' hat kein Attribut 'Seriell', wenn Sie versuchen, führen Sie es auf windows. Wissen Sie, was ist falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht schließen Sie die serielle Schnittstelle in Python zwischen schreiben und Lesen. Es gibt eine chance, dass der port immer noch geschlossen ist, wenn der Arduino reagiert, in welchem Fall die Daten verloren.
Python
Serial.read
Funktion gibt nur ein einziges byte standardmäßig, so müssen Sie entweder nennen es in einer Schleife oder warten, bis die Daten übertragen werden und dann Lesen Sie den gesamten Puffer.Auf der Arduino-Seite, sollten Sie überlegen, was in Ihrem
loop
Funktion, wenn keine Daten verfügbar sind.Stattdessen warten auf den start der
loop
Funktion, bis Daten ankommen:EDIT 2
Hier ist, was ich bekommen, wenn die Kommunikation mit der Arduino-app von Python:
So, die scheint zu funktionieren gut.
In der Prüfung Ihres Python-Skript, es scheint, das problem ist, dass der Arduino zurückgesetzt, wenn Sie öffnen Sie die serielle Schnittstelle (zumindest meine Uno tut), so müssen Sie warten Sie einige Sekunden, bis es zu starten. Sie sind auch nur das Lesen einer einzigen Zeile für die Antwort, also habe ich behoben, in dem code unten auch:
Hier ist die Ausgabe des obigen jetzt:
Zuerst müssen Sie installieren ein Modul-Aufruf Serial. Das zu tun, gehen Sie zu dem Ordner call Scripts, die sich in python-Ordner installiert. Wenn Sie mit Python-3-version es befindet sich normalerweise in Position unten,
Sobald Sie öffnen Sie den Ordner rechtsklicken Sie auf den Ordner mit gedrückter shift-Taste. Dann klicken Sie auf 'Eingabeaufforderung hier öffnen'. Danach
cmd
pop-up. Schreiben Sie den untenstehenden code in dascmd
Fenster,und drücken Sie die EINGABETASTE.nach, dass PySerial - Modul installiert werden. Denken Sie daran, um die Installation der module u muss eine INTERNET-Verbindung.
nachdem erfolgreich installiert, das Modul öffnen Sie die python-IDLE und notieren Sie die Balg-code und führen Sie es.