seit ein par tagen bin ich da an einem script welches mein bescheidenes latein ans ende bringt.
die aufgabe ist folgende:
ich habe einen flash xml-socket und will auf einen python socket-server verbinden welcher die gesendeten daten via pyserial an mein arduino(microcontrollerboard) schickt und wieder zurück. ich werte damit verschiedene sensoren aus und brauche auch die resultate.
nun habe ich mal einen server angelegt und mit threading zwei verschiedene threads gestartet, wobei der einte von flash daten liest und diese an mein arduino sendet und der andere wartet bis mein arduino sendet und leitet die daten an flash weiter.
das problem ist nun folgendes:
ein weg funktioniert problemlos! egal ob ich vom board sende oder oder von flash aus. solange nur ein thread läuft kommt alles dort an wo es soll. starte ich aber beide passiert nicht mehr als wenn ich einen starte.
ich denke mal ich habe da ein problem mit threading und finde keine lösung.
bin also dankbar um jede hilfe, hier mal mein code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#---------------------------------------------------------
import serial
import socket
import threading
#---------------------------------------------------------
ser = serial.Serial('/dev/cu.usbserial-A50018g9', 9600, timeout=1)
#---------------------------------------------------------
HOST = ''
PORT = 2500
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
#---------------------------------------------------------
class arduino(threading.Thread):
def __init__(self):
print 'arduino is running'
threading.Thread.__init__(self)
self.cancel = threading.Event()
def run(self):
while True:
data02 = ser.read(100)
if not data02:break
if data02:
print data02
t.send(data02)
s.close()
#---------------------------------------------------------
class processing(threading.Thread):
def __init__(self):
print 'processing is running'
threading.Thread.__init__(self)
self.cancel = threading.Event()
def run(self):
while True:
data01 = t.recv(1024)
if not data01: break
if data01:
print data01
ser.write(data01)
ser.close()
#---------------------------------------------------------
def main():
ard = arduino()
ard.start()
pro = processing()
pro.start()
#---------------------------------------------------------
if __name__ == "__main__":
main()
#---------------------------------------------------------