Eenvoudig Arduino data loggen met onze IoT dataserver
Veel van de projecten op EngineerAtHome vallen in de categorie 'Internet of Things', ze zijn verbonden met een server voor datalogging toepassingen. Wat nu als je zelf niet beschikt over een server? Dan kun je gebruik maken van EngineerAtHome's gratis dataplatform!
Vanwege veelvuldig misbruik van ons gratis IoT dataplatform hebben we de service helaas moeten staken op 20-07-2021.
Nieuwe sensor aanmaken op de IoT-server
Of je nu een connected weerstation gaat maken, CO2-niveau's wilt meten of graag je energieverbruik wilt loggen, met EngineerAtHome's gratis dataplatform kun je al je sensordata eenvoudig loggen, bekijken in onze webinterface en downloaden. Het aanmaken van een nieuwe sensor is heel eenvoudig: Ga naar data.engineerathome.com en druk op de knop 'Create a new sensor'.
Vul de velden van het formulier in, elke sensor kan maximaal 2 waardes tegelijk loggen, bijvoorbeeld temperatuur en luchtvochtigheid, of hoog-tarief en laag-tarief.
Vervolgens ontvang je een e-mail met je sensor-id en secret. Houdt je secret altijd voor jezelf, die gebruik je om te voorkomen dat anderen data naar jouw sensor sturen.
Data loggen via een GET-request
Zodra de sensor is aangemaakt op de server kun je meteen beginnen met data loggen via een eenvoudig http get-request. Het mooie van get-requests is dat ze super universeel zijn en op allerlei verschillende low-end en high-end devices werken. Zowel op een Arduino Uno met Ethernetshield als op een ESP8266 / NodeMCU, Raspberry Pi, Linux server of Windows computer. De higher-end devices ondersteunen ook de veiligere https versie die zorgt voor een versleutelde verbinding.
In de basis ziet het get-request om data te loggen er zo uit:
http://data.engineerathome.com/api/api.php?id={sensor_id}&secret={secret}&value1={value1}&value2={value2}
Arduino sensordata loggen met HTTP Get
Met onderstaande Arduino voorbeeld-code maak je verbinding met onze IoT dataserver en log je de data naar jouw sensor.
char server[] = "data.engineerathome.com";
if (client.connect(server, 80)) {
client.print("GET /api/api.php?id={sensor_id}&secret={secret}&value1=");
client.print(sensorTemperatuur);
client.print("&value2=");
client.print(sensorLuchtvochtigheid);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
delay(10);
client.stop();
}
Let er op dat je deze code niet vaker dan eens per 5 minuten uitvoert, de server negeert overige requests maar op termijn kun je worden geblokkeerd als je misbruik maakt van de service.
Bekijk je data in onze webinterface
Staat je Arduino lekker data te pompen? Dan is het tijd om te kijken of alles ook aankomt bij onze server. Je kunt inloggen op de webinterface via https://data.engineerathome.com/view/{sensor_id}/{secret}. Hier kun je zowel een lijngrafiek van jouw sensor raadplegen als een tabel met alle logregels die je eenvoudig kunt kopiƫren naar Excel voor verdere analyse.
Als je een publieke sensor hebt gemaakt kun je gasten toegang geven tot de webinterface via de link https://data.engineerathome.com/view/{sensor_id}/ dus zonder secret. Zo kunnen ze wel jouw grafieken bekijken maar geen gegevens wijzigen of toevoegen.
JSON data ophalen via HTTP Get
Wil je liever je eigen web-interface maken of de gelogde data in een app gebruiken? Dan kun je de sensordata opvragen via een eenvoudig get-request. Als je onderstaand request doet reageert de server met een JSON string met de laatste {number} logregels van jouw sensor (maximaal 1000).
https://data.engineerathome.com/api/api.php?id={sensor_id}&secret={secret}&view={number}
De respons ziet er ongeveer zo uit
{{"timestamp": "2019-01-13 17:36:41", "value1": 12.3, "value2": 100},
{"timestamp": "2019-01-11 17:14:15", "value1": 21.3, "value2": 95},
{"timestamp": "2019-01-11 17:11:45", "value1": 21.8, "value2": 98},
{"timestamp": "2019-01-11 17:10:53", "value1": 21.6, "value2": 91}}
Met behulp van JavaScript en Ajax kun je dan je eigen webinterface bouwen, data van verschillende sensoren combineren en verder verwerken, etc.