ich spiele mich gerade mit Python etwas rum, komme aus der C-Welt und versuche mich damit zurecht zu finden scheitere jedoch an einem Problem:
Im folgenden habe ich einen TCP-Socket Server auf Python aufgesetzt an welchem Sachen wie ein Servo und Schrittmotor angeschlossen sind. Funktionieren tut alles soweit, ich öffne vom Client eine Verbindung zum Socket-Server, sende meinen Befehl und schließe die Verbindung mit socket_close() am Client wieder. Wenn ich jedoch vom Client aus Verbinde und mehrere Befehle senden möchte funktioniert es nicht, es wird nur der erste Befehl angenommen, wenn ich einen weiteren sende bekomme ich aber vom Server über die Konsole die Info dass er die Informationen vom ersten Befehl erhalten hat, für mich sieht das so aus als wäre der Buffer noch mit dem alten Befehl befüllt und muss vorher geleert werden bevor ein weiterer eingelesen werden kann. Wie setze ich das denn um?!
Code: Alles auswählen
from pyfirmata import Arduino, util, SERVO
import socket
from time import sleep
HOST = '192.168.0.100'
PORT = 3000
response ="ok"
answer_ready_request = "ready"
arduino = Arduino('COM2')
print("Script Running...")
def rotateServo(servopin, angle):
arduino.digital[servopin].mode = SERVO
arduino.digital[servopin].write(angle)
def rotateStepper(dirpin, steppin, direction, steps, speed):
if direction == "cw":
direction_int = 1
elif direction == "ccw":
direction_int = 0
arduino.digital[dirpin].write(direction_int)
stepdelay = (60000 / (speed * 400)) * 0.000001
for i in range (steps):
arduino.digital(steppin).write(1)
sleep(stepdelay)
arduino.digital(steppin).write(0)
sleep(stepdelay)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
while True:
c, addr = s.accept()
print(f"Connected by {addr}")
try:
msg = c.recv(1024)
if not msg:
break
elif msg.decode() == "ready?":
print("Answer Ready Request")
print("Sending Response")
c.send(answer_ready_request.encode())
print("Answer Ready Request Done")
elif msg.decode().find("servo") !=-1:
print("Receive Move Servo Request")
request, value1, value2 = msg.decode().split(';')
print("Received Servo Values:", "Servopin:", value1, "Angle:", value2)
servopin = int(value1)
angle = int(value2)
print("Moving Servo")
rotateServo(servopin, angle)
print("Sending Response")
c.send(response.encode())
print("Servo Move Request Done")
elif msg.decode().find("stepper") !=-1:
print("Receive Move Stepper Request")
request, value1, value2, value3, value4, value5 = msg.decode().split(';')
print("Received Stepper Values:", "Direction:", value3, "Steps:", value4, "Speed:", value5)
dirpin = int(value1)
steppin = int(value2)
direction = value3
steps = int(value4)
speed = int(value5)
print("Moving Stepper")
rotateStepper(dirpin, steppin, direction, steps, speed)
print("Sending Response")
c.send(response.encode())
print("Stepper Move Request Done")
except socket.error as socketerror:
print ("ERROR")