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