Mikrocontroller Sensordaten -> MySQL mehrmals

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Soleska
User
Beiträge: 1
Registriert: Freitag 15. März 2019, 11:36

Hi!
Mir ist der Titel etwas schwer gefallen, deshalb hier eine genauere Beschreibung des Problems:

Ich habe einen Mikrocontroller, der mit einem Temperatur-/Luftfeuchtigkeitssensor verbunden ist. Diese Daten würde ich gerne in regelmäßigen Abständen mithilfe von Python in meine MySQL-Datenbank schreiben. Grundgerüst des Codes steht bereits, allerdings werden die Daten dabei nur einmal ausgelesen/übertragen.
Wenn mein Programm fertig ist, muss ich jedes Mal die Verbindung des Mikrocontrollers trennen, dann den Code neu hochladen und den Python-Algorithmus starten (ansonsten bekomme ich von Python "Zugriff verweigert/Port busy"). Alles etwas mühselig. Eine Verbindung über Ethernet/W-Lan ist leider nicht möglich, da das im Netzwerk geblockt ist und ich dafür auch keine Freigabe erhalte.
Meine eigenen Versuche führen nur zu Fehlermeldungen (meistens IndexError) und ich bin mittlerweile etwas ratlos, da ich mich auch erst seit dieser Woche an Python versuche. Ich habe auch schon nach Echtzeit Streaming Libraries geschaut, aber davon verstehe ich noch weniger :'D

Code: Alles auswählen

import serial
import mysql.connector as mc

connection = mc.connect (host = "localhost",
                         user = "root",
                         passwd = "4526",
                         db = "wetterstation")

cursor = connection.cursor()

arduino = serial.Serial('COM3', 9600)

data = arduino.readline().decode('ascii')
test = data.split()
data1 = test[0]
data2 = test[1]
print(data1) // Das hier steht nur zur Überprüfung während den Tests drin
print(data2)
sql_data = "INSERT INTO wettera (luftfeuchtigkeit , temperatur) VALUES ('%s' , '%s')" %(data1 , data2)
cursor.execute(sql_data)	   
connection.commit()

cursor.close()
connection.close()
Ich wäre für jegliche Ideen dankbar (oder auch Verbesserungsvorschläge)!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich verstehe dein Problem nicht ganz. Das du ein Programm beenden musst, wenn du eine neue Version starten willst ist doch normal. Wie soll das denn sonst gehen? Und das eine Schnittstelle wie COMx nur einmal geöffnet werden kann, ist ja auch nicht so ungewöhnlich.

Wenn du willst, das etwas mehrfach geschieht, dann musst du das programmieren. Das Konstrukt dazu nennt sich Schleife & wird in jedem Tutorial beachrieben.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

`//` ist kein Kommentarzeichen.
In SQL-Statements formatiert man keine Werte hinein, dazu nimmt man Platzhalter.
data, test, data1 oder data2 sind keine guten Variablennamen, weil sie nichts aussagen.

Willst Du einfach eine Schleife, um mehrfach Daten von Deinem Arduino zu lesen?

Code: Alles auswählen

arduino = serial.Serial('COM3', 9600)
for line in arduino:
    humidity, temperature = line.decode('ascii').split()
    sql_data = "INSERT INTO wettera (luftfeuchtigkeit , temperatur) VALUES (%s , %s)"
    cursor.execute(sql_data, (humidity, temperature))	   
    connection.commit()
Antworten