
Arduino data naar Sparkfun loggen
Leuk al die 'Internet of Things'-projecten op EngineerAtHome, maar wat nu als je zelf geen server hebt om je data naar te loggen? Dan kun je gebruik maken van de gratis data-service van Sparkfun.
Helaas is de Sparkfun data-service niet meer actief, daarom is er nu het IoT Dataplatform van EngineerAtHome! Op data.engineerathome.com lees je precies hoe je een nieuwe sensor aanmaakt en eenvoudig de data naar onze servers logt.
Stream aanmaken bij Sparkfun
Een nieuwe stream aanmaken bij Sparkfun is heel eenvoudig met onderstaand stappenplan:
- Ga naar data.sparkfun.com
- Maak m.b.v. het plus-teken rechtsboven op de site een nieuwe datastream aan
- Vul de velden van het formulier in, bij 'fields' geef je bijv 'kwh', 'liter', en 'm3' op als je resp. elektriciteit, water en gas waarden wil opslaan
- In reactie hierop krijg je een e-mail met een publieke sleutel en een privé-sleutel en een link naar je stream
Zodra je deze sleutels in je bezit hebt kun je aan de slag met jouw eigen datastream.
Arduino klaar maken voor logging
Nu de serverkant gereed is kunnen we de Arduino in orde maken. Declareer bovenaan je code de volgende variabelen:
// Variabelen benodigd voor SparkFun sensor-data logging
char server[] = "data.sparkfun.com";
const String publicKey = "*de publickey*";
const String privateKey = "*de privatekey*";
// Het aantal velden dat opgeslagen wordt op de Sparkfun server
const byte NUM_FIELDS = 3;
// Onderstaande veld-namen moeten overeenkomen met wat je in je stream hebt opgegeven
const String fieldNames[NUM_FIELDS]= {"kwh", "liter", "m3"};
String fieldData[NUM_FIELDS];
Vervolgens gebruik je het volgende code-fragment op de plaats waar het daadwerkelijke wegschrijven moet plaatsvinden:
if (client.connect(server, 80)) {
Serial.println("connection succes!");
// schrijf de standen weg in fieldData
fieldData[0] = String(totalWh);
fieldData[1] = String(totalDm3);
fieldData[2] = String(totalL);
// Hier wordt het GET commando voor de sparkfun server gemaakt
client.print("GET /input/");
client.print(publicKey);
client.print("?private_key=");
client.print(privateKey);
for (int i = 0; i < NUM_FIELDS; i++){
client.print("&");
client.print(fieldNames[i]);
client.print("=");
client.print(fieldData[i]);
}
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
// toon de server response (als er iets niet goed gaat)
/*
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
*/
delay(1);
client.stop();
}
else {
Serial.println("connection failed");
}
Data terugkijken bij Sparkfun
Als je datastream is opgezet en je Arduino aan het loggen is kun je de output bekijken op de Sparkfun-server via de link:
https://data.sparkfun.com/streams/*publickey*
Je kunt ook direct een .csv-bestand laten maken in onze tijdzone (GMT+1 Amsterdam) met de volgende URL:
https://data.sparkfun.com/output/*publickey*.csv?timezone=europe/amsterdam
De data in dit .csv-bestand kun je gemakkelijk inlezen in Excel om zo grafieken te genereren of op andere manieren de data te analyseren.
Dit gastartikel is geschreven door Coen.