Att få Arduino data till en webbsida (3 / 5 steg)
Steg 3: Förbereda för databasen och bearbetning skissen
En av de första saker jag gör alltid är bygga en databasfil connector att skära ner på skriva koden i de viktigaste filerna och måste inkluderas i katalogen.
My SQL-databas anslutning fil: db_connect.php
Detta är filen bearbetning är arbetshästen av projektet! Jag göra tre saker i denna fil, som hjälper mig att visualisera vad som händer. Från början ser jag min data i fönstret skiss (oavgjort) och sedan jag skriva ut den seriella datan med det har etikett innan jag skicka den till MySql-databasen men detta är bara för felsökning och kan utelämnas när du har det fungerar korrekt. Du kommer att märka att jag uppbrottet data i en matris innan det skickas till MySql-databasen. Jag lämnade också koden för att skicka den till en CSV-fil eller en textfil genom att bara ändra ".txt" till "CSV" utvidgning och att lägga till uttrycket "output.print" till matriselementen. När jag fick den MySql fungerar jag inte längre behövde skapa CSV- eller txt-filen. Du vill också märka användningen av De.Bezier MySql biblioteket där jag lagt en länk till och det måste vara installerad för att denna skiss att arbeta.
http://Bezier.de/Processing/libs/SQL/
Processing Sketch: mysql_write_1.pde fil
Detta är en fil som ursprungligen skriven av Tom Igoe
Jag har ändrat koden för att följa min ansökan.
Tom om du ser detta, tack! för din bra exempel.
import processing.serial.*;
import java.util.*;
import java.text.*;
import de.bezier.data.sql.*;
PrintWriter utgång;
DateFormat fnameFormat = ny SimpleDateFormat("yyMMdd_HHmm");
DateFormat timeFormat = ny SimpleDateFormat("hh:mm:ss");
Sträng filnamn.
Seriella myPort; Den seriella porten
InString sträng; Indatasträngen från serieporten
int lf = 10; ASCII-radmatning
PFont teckensnitt;
MySQL dbconnection;
void setup() {
size(600,100);
println(Serial.list());
myPort = ny följetong (denna, Serial.list() [1], 9600);
myPort.clear();
Rensa databastabellen
Strängen user = "root";
Sträng pass = "";
String = "myurov";
DbConnection = nya MySQL (här, "localhost", databas, användare, pass);
om (dbconnection.connect()) {
DbConnection.Query ("trunkera aptc"); Avmarkera alla tabelldata
DbConnection.Close();
}
Datum nu = nya Date();
Filnamn = fnameFormat.format(now);
Filnamn = "läsningar";
output = createWriter (filnamn + ".txt"); Spara filen i mappen skiss i form av antingen "CSV" eller ".txt"
myPort.bufferUntil(lf);
}
void draw() {
Background(0);
text ("fick:" + inString, 10,50);
}
void serialEvent(Serial p) {
Delay(1000);
inString = p.readString();
String timeString = timeFormat.format (nya datum());
output.Print(timeString);
output.Print(",");
output.println(inString);
Här utgång jag antingen koden till en fil eller på skärmen
Om du vill gå till fil vill jag tillägga "utgång." till början av uttalandena som "println"
Jag också ta den seriella data och dela upp den och skapa en array av data.
println ("Meddelande tas emot vid" + timeString + ":");
println(inString);
Sträng avläsningar = (inString);
String [] lista = split (avläsningar, ',');
println ("barometertrycket =" + lista [0] + "inHg");
println ("temperatur =" + lista [1] + "\u00B0 F");
println ("höjd =" + lista [2] + "Ft");
println ("Magnetometer Raw X-axeln =" + lista [3] + "");
println ("Magnetometer Raw Y-axeln =" + lista [4] + "");
println ("Magnetometer Raw Z-axel =" + lista [5] + "");
println ("Magnetometer skalas X-axeln =" + lista [6] + "");
println ("Magnetometer skalas Y-axeln =" + lista [7] + "");
println ("Magnetometer skalas Z-axel =" + lista [8] + "");
println ("Magnetometer rubrik =" + lista [9] + "");
println ("Magnetometer rubrik grader =" + lista [10] + "\u00B0 grader");
särskilda char för grader "www.ascii-code.com/" u00XX = HEX / /
Obs: den sista raden i println uttalanden kommer att göra en line feed efter variabeln lista.
println();
Strängen user = "root";
Sträng pass = "";
String databas = "myurov";
ansluta till databas på servern "localhost"
DbConnection = nya MySQL (här, "localhost", databas, användare, pass);
om (dbconnection.connect()) {
nu skicka data till databasen
DbConnection.Execute ("Infoga i aptc (tryck, temperatur, höjd, rxaxis, ryaxis, rzaxis, sxaxis, syaxis, szaxis, rubrik, hddegrees) värden (" "+ list[0]+"','"+list[1]+"','"+list[2]+"','"+list[3]+"','"+list[4]+"','"+list[5]+"','"+list[6]+"','"+list[7]+"','"+list[8]+"','"+list[9]+"','"+list[10]+"');");
DbConnection.Close(); utan detta fick jag en "för många anslutningar" felmeddelande efter ca 4 minuter.
Det finns flera sätt att hantera databasen uthållighet fel Detta är enkelt.
}
}
void keyPressed() {
output.flush(); Skriver återstående data till filen
output.Close(); Filen är klar
Exit(); Stoppar programmet
}