Ich hab ein seltsames Problem mit einem über USB verbundenen Arduino, in Verbindung mit Python.
Und zwar lese ich die Ausgaben des Arduino's über USB aus. Das funktioniert soweit auch sehr gut, nur krieg ich nach ein paar Steuerbefehlen die ich auch über USB Sende plötzlich folgende Fehlermeldung:
Code
Could not open serial port '/dev/ttyACM0': device reports readiness to read but returned no data (device disconnected?)
In Python sieht die Anweisung wie folgt aus:
Code
#read from Arduino
def Serial_read_Thread():
print("Starte Thread: serial read")
while True:
try:
# Remove newline character '\n'
response = ser.readline().strip()
#response = ser.readline()
if response:
printD("Arduino-> "+response),
ParseSerialInput(response)
except serial.SerialException as e4:
print("Could not open serial port '{}': {}".format(SerialPort, e4))
_exit()
except (KeyboardInterrupt, SystemExit):
_exit()
ser.close()
Alles anzeigen
Die Anweisung zum Senden nutzt die bereits geöffnete USB-Verbindung:
Code
#send to Arduino
def send_serial_data(line):
output = "%s\r\n" % (line)
try:
bytes = ser.write(output)
except Exception, e3:
print("Error sending via serial port: " + str(e3))
# Flush input buffer, if there is still some unprocessed data left
ser.flush() # Try to send old message
ser.flushInput() # Delete what is still inside the buffer
Zum öffnen der Verbindung werden folgende Parameter verwendet:
Spoiler anzeigen
Code
SerialPort = "/dev/ttyACM0"
SerialBaudrate = 38400
ser = serial.Serial()
ser.port = SerialPort
ser.baudrate = SerialBaudrate
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
ser.timeout = 1 #non-block read
ser.xonxoff = False #disable software flow control
ser.rtscts = False #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 2 #timeout for write
....
if __name__ == '__main__':
try:
ser.open()
except Exception, e:
print("Error open serial port: " + str(e))
exit()
if ser.isOpen():
try:
ser.flushInput() #flush input buffer, discarding all its contents
ser.flushOutput() #flush output buffer, aborting current output and discard all that is in buffer
HOST, PORT = SocketHost, SocketPort
socket_server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = socket_server.server_address
# Start a thread with the server - that thread will then start one more thread for each request
socket_server_thread = threading.Thread(target=socket_server.serve_forever)
socket_server_thread.start()
# Start Serial read Thread
read_thread = threading.Thread(target=Serial_read_Thread)
read_thread.start()
print("read_Thread ist aktiv: ", read_thread.isAlive())
print("socket_server_thread ist aktiv: ", socket_server_thread.isAlive())
#print "Socket Server loop running in thread:", socket_server_thread.name
#thread_count = threading.active_count()
#print "Insgesamt sind ", thread_count, " Threads aktiv."
except Exception, e1:
print("Error...: " + str(e1))
except (KeyboardInterrupt, SystemExit):
print("Schliesse Programme..")
_exit()
else:
print("Cannot open serial port ")
def _exit():
try:
read_thread.exit()
socket_server_thread.exit()
sys.exit()
except Exception, e3:
exit()
Alles anzeigen
Woran kann das liegen?
Sieht jemand meinen Bockmist?