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?
InformationsquelleAutor Boombrewer | 2014-06-06
Schreibe einen Kommentar