Tutorial: Speicherung von Arduino Messdaten auf Webserver und deren Darstellung – Teil 4

Teil 4 – Einrichten der MySQL Datenbank und speichern der Daten

In diesem Teil des Tutorials werde ich euch zeigen, wie man vom Arduino erzeugte Daten über Ethernet in einer MySQL Datenbank abspeichert. Eine Datenbank hat gegenüber der im vorherigen Beitrag angelegten csv-Datei viele Vorteile, z.B. dass die Daten bei der Abfrage bereits selektiert werden können (z.B. ein bestimmter Zeitraum) oder sortiert werden können. Ein Abfragebeispiel dazu werde ich in diesem Teil des Tutorials später vorstellen.

Die MySQL Datenbank und die Datentabelle muss zunächst auf dem Webspace angelegt werden, am einfachsten ist das über das Programm phpMyAdmin, dass auf den meisten Webspaces bereits installiert ist. Auf dem Webspace aus dem Teil 2 des Tutorials greift man darauf über die Administration des eigenen Webspaces zu. Dazu loggt man sich ein und wählt im linken Menue meine Projekte und dann das bereits angelegte Projekt. Auf dieser Seite scrollt man ganz nach unten und wählt dann unter Webspace MySQL. Die Zugangsdaten für MySQL werden später im Programm noch verwendet. Wenn noch keine Datenbank angelegt ist, muss man jetzt zunächst eine Datenbank anlegen.

Über den Link zu phpMyAdmin erreichen wir die Administration der Datenbank. Als nächstes legen wir eine Tabelle zur Speicherung der Daten an, Das geht am schnellsten mit einem SQL Statement. Zunächst wählt man links die Datenbank, dann den Reiter SQL und geben folgendes Statement ein

CREATE TABLE IF NOT EXISTS `analog_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`analog0` int(11) NOT NULL COMMENT 'Analog0',
`analog1` int(11) NOT NULL COMMENT 'Analog1',
PRIMARY KEY (`id`)
)

das wir mit OK bestätigen. Mit diesem Statement wird eine Tabelle mitr dem Namen analog_data mit 4 Feldern (Spalten) angelegt, einer ID, die mit jedem Datensatz automatisch hochzählt, einem Zeitstempel, der bei Erzeugung eines neuen Datensatzes automatisch erzeugt wird und die beiden Messwerte analog0 und analog1.
Wenn keine Fehlermeldung kommt, ist die Tabelle, zunächst leer, jetzt angelegt.

Wie in Teil 3 benötigen wir jetzt zunächst eine php-Webseite die die Daten des Arduino annimmt und dann in der MySQL Tabelle abspeichert. Diese Seite legen wir unter dem Namen data2mysql.php an. Die Zugangsdaten (siehe Webspace Administrationsseite) müssen innerhalb der Anführungsstriche eingetragen werden. Der Name des Servers ($mysql_host) ist im Falle von kilu.de „localhost“.

<?php
$mysql_host = "<hier Name des Server/Host eintragen>";
$mysql_db   = "<hier Datenbanknamen eintragen>";
$mysql_user = "<hier MySQL User eintragen>";
$mysql_pw   = "<hier MySQL Passwort eintragen>";
isset($_GET['A0']) ? $a0=$_GET['A0'] : $a0='';
isset($_GET['A1']) ? $a1=$_GET['A1'] : $a1='';

$connection = mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die("Verbindung zur Datenbank fehlgeschlagen.");
mysql_select_db($mysql_db, $connection) or die("Datenbank konnte nicht ausgewaehlt werden.");
$insert_data = "INSERT INTO analog_data (analog0, analog1) VALUES ($a0, $a1)";
mysql_query($insert_data, $connection) or die("Fehler beim Eintragen der Daten in die Datenbank!");
?>

Einen ersten Test können wir wie im 3. Teil auch mit dem direkten Aufruf der Webseite machen, also z.B.:  <webspace>/data2mysql.php?A0=123&A1=345

Mit phpMyAdmin kann man jetzt kontrollieren, ob die Werte korrekt übernommen wurden. Nun muss nur noch das Arduino Programm aus Teil 3 auf die neue php-Webseite umgestellt werden, also statt der Zeile

client.print("GET /data2csv.php?A0=");

wird jetzt

client.print("GET /data2mysql.php?A0=");

eingetragen.

Um sich die letzten Daten anzusehen reicht diese einfache php-Webseite, wobei wieder die Zugangsdaten der Datenbank eingetragen werden müssen.

<?php
$mysql_host = "<hier Name des Server/Host eintragen>";
$mysql_db   = "<hier Datenbanknamen eintragen>";
$mysql_user = "<hier MySQL User eintragen>";
$mysql_pw   = "<hier MySQL Passwort eintragen>";
$connection = mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die("Verbindung zur Datenbank fehlgeschlagen.");
mysql_select_db($mysql_db, $connection) or die("Datenbank konnte nicht ausgewaehlt werden.");
$abfrage = "SELECT datum, analog0, analog1 FROM analog_data ORDER BY datum DESC LIMIT 20";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
{
echo $row[datum].",".$row[analog0].",".$row[analog1]."<br>";
}
?>

In dieser Abfrage wird die oben erwähnte Selektion, hier der letzten 20 Datensätze und eine Sortierung angewendet. Im nächsten und letzten Teil des Tutorial beschäftigen wir uns dann mit der grafischen Präsentation der Daten.

Advertisements

Veröffentlicht am 22. Mai 2014, in Arduino, MySQL, Tutorial. Setze ein Lesezeichen auf den Permalink. 5 Kommentare.

  1. Super Tutorial! Hab es auf Anhieb verstanden!!!

  2. Geht das ganze auch mit einem Raspberry als Server ??

  3. Vielen Dank, Hat mir sehr geholfen.
    Nach langen verzweifelten Nächten.
    Endlich funktioniert alles :))

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: