Arduino <-> Raspberry <-> MySQL Serial Communication

Hallo,

ich habe schon einige Arduino Projekte gemacht und wollte jetzt auch eines von mir mit einem Rasperry verbinden und die Daten in einer SQL DB abspeichern... Mit Rasperry/Linux/Phyton, habe ich leider gar keine Erfahrung.

Den Code bzw deren Funktion, die Jomelo in Post #6 gepostet hatte ist genau was ich brauche. Also habe ich seine Anleitung befolgt.
Leider bekomme ich folgende Fehlermeldung wenn ich das Phyton script ausführe:

python2.7 /var/www/html/F5DTimer.py
Traceback (most recent call last):
  File "/var/www/html/F5DTimer.py", line 20, in <module>
    ser.open()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 261, in open
    raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.

Da ich den Code bis auf DB Anmeldaten und Auskommentieren der print Befehle nichts geändert habe bin ich etwas ratlos.

Hier mein Pyhton Code:

import time
import serial
import MySQLdb as mdb

# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial(
   port='/dev/ttyACM0',
   baudrate=9600,
   parity=serial.PARITY_ODD,
   stopbits=serial.STOPBITS_TWO,
   bytesize=serial.SEVENBITS
)

db_host = 'localhost'
db_user = 'F5D'
db_pass = '***'   # <--------------------- diese Zeile anpassen
db_name = 'test_db'

ser.open()
ser.isOpen()

while True:
   # Zum Arduino senden
   # Ueberpruefen ob neue Daten in Datenbank, dann diese Senden
   try:
       con = mdb.connect(db_host, db_user, db_pass, db_name);
       cur = con.cursor()
       # Abfrage
       cur.execute("SELECT id, to_arduino FROM test_table WHERE to_arduino != '' and status = '1'")
       # Ergebnis
       rows = cur.fetchall()
       # Zerlegen und Senden, eventuell mit Zeitverzgerung von 100 ms damit
       # damit der Arduino Zeit zum verarbeiten hat
       if len(rows) > 0:
           for row in rows:
               string = str(row[1]) + '\r\n'
               ser.write(string)
               # Datensatz deaktivieren oder loeschen
               cur = con.cursor()
               cur.execute("UPDATE test_table SET status=0 WHERE id=%s", row[0])
               con.commit()
           #print 'Daten gesendet'
   except mdb.Error, e:
       #print 'Error %d: %s' % (e.args[0],e.args[1])
       sys.exit(1)


   # Vom Arduino empfangen
   out = ''
   while ser.inWaiting() > 0:        
       out += ser.read()

   if out != '':
       #Daten in Datenbank schreiben
       try:
           con = mdb.connect(db_host, db_user, db_pass, db_name);
           cur = con.cursor()
           cur.execute("INSERT INTO test_table (to_arduino, from_arduino, status) VALUES ('', %s, 1)", out)
           con.commit()
           #print 'Daten empfangen'
       except mdb.Error, e:
           if con:
               con.rollback()
           #print 'Error %d: %s' % (e.args[0],e.args[1])
           sys.exit(1)

   time.sleep(0.5)

Vielleich weiß jemand von euch woran es liegen könnte?

Vielen Dank im Voraus und Gruß
Christoph