Stap 3: Bereid voor de Database en de Processing Schets
Een van de eerste dingen die ik altijd doe is gebouwd een database connector-bestand om te bezuinigen op het schrijven van de code in de hoofdbestanden en moet worden opgenomen in de hoofdmap.
My SQL-Database connector-bestand: db_connect.php
Dit is het bestand van de verwerking is het werkpaard van het project! Ik drie dingen in dit bestand, dat zal helpen me visualiseren wat er gebeurt. In eerste instantie zie ik mijn gegevens in het venster Sketch (draw) en dan ik print de seriële data mee heeft label voordat ik stuur het naar de MySql database, maar dit is alleen voor het oplossen en kan worden weggelaten als u eenmaal het correct werkt. U zult merken dat ik uiteenvallen de gegevens in een Array voordat u deze verzendt naar de MySql-database. Ik liet ook in de code te sturen naar een CSV-bestand of een tekstbestand door alleen de ".txt" omzetten ".csv" uitbreiding en de "output.print"-instructie toe te voegen aan de arrayelementen. Zodra ik de MySql goed werkt ik niet langer nodig om het CSV- of txt-bestand te maken. U zult ook opmerken dat het gebruik van de De.Bezier MySql bibliotheek waarin ik een link naar voegde, en het moet zijn geïnstalleerd om deze schets te werken.
http://Bezier.de/processing/libs/SQL/
Verwerking schets: mysql_write_1.pde bestand
Dit is een gewijzigd bestand oorspronkelijk geschreven door Tom Igoe
Ik heb de code om te voldoen aan mijn verzoek aangepast.
Tom als u ziet dat dit, dank u! voor uw grote voorbeelden.
importeren van processing.serial.*;
import java.util.*;
importeren van java.text.*;
importeren van de.bezier.data.sql.*;
PrintWriter output;
DateFormat fnameFormat = nieuwe SimpleDateFormat("yyMMdd_HHmm");
DateFormat timeFormat = nieuwe SimpleDateFormat("hh:mm:ss");
String fileName;
Seriële myPort; De seriële poort
String inString; Invoerreeks van seriële poort
int lf = 10; ASCII regelinvoer
PFont lettertype;
MySQL dbconnection;
VOID Setup {}
size(600,100);
println(Serial.List());
myPort = nieuwe Serial (dit, Serial.list() [1], 9600);
myPort.clear();
Schakel de databasetabel
Tekenreeks user = "root";
Tekenreeks pass = "";
Tekenreeks = "myurov";
DBConnection = nieuwe MySQL (dit, "localhost", gegevensbank, user, pass);
Als (dbconnection.connect()) {}
DBConnection.query ("afkappen aptc"); alles van de gegevens in een tabel wissen
DBConnection.Close();
}
Datum nu = nieuwe Date();
fileName = fnameFormat.format(now);
fileName = "lezingen";
uitvoer = createWriter (fileName + ".txt"); Sla het bestand in de map van de schets in ".csv" of ".txt" vorm
myPort.bufferUntil(lf);
}
VOID draw() {}
Background(0);
tekst ("ontvangen:" + inString, 10,50);
}
VOID serialEvent(Serial p) {}
delay(1000);
inString = p.readString();
TimeString koord = timeFormat.format (nieuwe Date());
output.Print(timeString);
output.Print(",");
output.println(inString);
Hier output ik ofwel de code naar een bestand of naar het scherm
Ga naar het bestand zou overigens de "output." aan het begin van de verklaringen van de "println"
Ik ook nemen de seriële data en het breken en maak een array van de gegevens.
println ("Bericht ontvangen op" + timeString + ":");
println(inString);
Lezingen string = (inString);
Lijst met tekenreeksen [] = split (lezingen, ',');
println ("barometrische druk =" + "inHg" als lijst [0]);
println ("temperatuur =" lijst [1] + "\u00B0 F");
println ("hoogte =" lijst [2] + "Ft");
println ("Magnetometer Raw X-as =" + lijst [3] + "");
println ("Magnetometer Raw Y-as =" + lijst [4] + "");
println ("Magnetometer Raw Z-as =" + lijst [5] + "");
println ("X-as geschaald Magnetometer =" + lijst [6] + "");
println ("Y-as geschaald Magnetometer =" + lijst [7] + "");
println ("Magnetometer geschaald Z-as =" + lijst [8] + "");
println ("Magnetometer rubriek =" + lijst [9] + "");
println ("Magnetometer rubriek graden =" lijst [10] + "\u00B0 graden");
speciale char voor graden "www.ascii-code.com/" u00XX = HEX / /
Opmerking: de laatste regel van de verklaringen van de println zal doen een line feed na de variabele lijst.
println();
Tekenreeks user = "root";
Tekenreeks pass = "";
Tekenreeks databank = "myurov";
verbinding maken met database voor server 'localhost'
DBConnection = nieuwe MySQL (dit, "localhost", gegevensbank, user, pass);
Als (dbconnection.connect()) {}
nu het verzenden van gegevens naar de database
DBConnection.Execute ("INSERT INTO aptc (druk, temperatuur, hoogte, rxaxis, ryaxis, rzaxis, sxaxis, syaxis, szaxis, kop, hddegrees) VALUES ('" + list[0]+"','"+list[1]+"','"+list[2]+"','"+list[3]+"','"+list[4]+"','"+list[5]+"','"+list[6]+"','"+list[7]+"','"+list[8]+"','"+list[9]+"','"+list[10]+"');");
DBConnection.Close(); zonder dit ontvang ik de foutmelding "too many connections" na ongeveer 4 minuten.
Er zijn verschillende manieren om persistentie databasefouten dit is gewoon simpel.
}
}
ongeldig keyPressed() {}
output.Flush(); De resterende gegevens schrijft naar het bestand
output.Close(); Het bestand eindigt
Exit(); Stopt het programma
}