WeMos D1 per WiFI Daten in mySQL schreiben

Mit dem nachfolgendem Sketch ist der WeMos D1 in der Lage Messdaten in eine mySQL Datenbank zu senden.

Das eigentliche schreiben der Daten erfolgt mit dem Aufrufen einer PHP Datei in Form eines GET Befehls.

<?php
/*
 
Daten per GET in eine mySQL Datenbank schrieben
 
by Tobias Guggenberger
guggenberber.me
 
*/
 
// POD Verbindung zur Datenbank
$datenbank_name 		= "NAME_DATENBANK";
$datenbank_username 	= "USER";
$datenbank_passwort		= "PASS";
 
// Datenbankverbindung aufbauen
$pdo = new PDO('mysql:host=localhost;dbname='.$datenbank_name, $datenbank_username, $datenbank_passwort);
 
// Neuen Datensatz schreiben
$neuer_datensatz = array();
$neuer_datensatz['WERT1'] = time();
$neuer_datensatz['WERT2'] = $_GET['temperatur'];
$neuer_datensatz['WERT3'] = $_GET['sensor'];
$statement = $pdo->prepare("INSERT INTO TABELLE (wert1, wert2, wert3) VALUES (:wert1, :wert2, :wert3)");
$statement->execute($neuer_datensatz);
?>

Der passende Sketch sieht so aus:

 
#include <ESP8266WiFi.h>
const char* ssid     = "SSID";      // SSID
const char* password = "PASS";      // Password
const char* host = "SERVER_DB";  // IP ServeP
const int   port = 80;            // Port
const int   watchdog = 5000;        // Schreibefruenz
unsigned long previousMillis = millis(); 
 
void setup() {
  Serial.begin(115200);
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
 
void loop() {
  delay(5000);  
    unsigned long currentMillis = millis();
 
  if ( currentMillis - previousMillis > watchdog ) {
    previousMillis = currentMillis;
    WiFiClient client;
 
    if (!client.connect(host, port)) {
      Serial.println("connection failed");
      return;
    }
 
    String url = "/arduino/FILE_zum-SCHREIBEN.php?wert1=wer1&usw";
    url += String(millis());
    url += "&ip=";
    url += WiFi.localIP().toString();
 
    // Envoi la requete au serveur - This will send the request to the server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(">>> Client Timeout !");
        client.stop();
        return;
      }
    }
      while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }
  }
}

Projektdatein zum Download

MYSQL Datenbankverbindung aufbauen PDO

Inhaltsverzeichnis

Die aktuell beste Möglichkeit sich mit SQL Datenbank zu verbinden sind PHP Data Objects (POD).

Mit einer Datenbank verbinden

Bevor man mit einer Datenbank arbeiten kann, muss man erst eine Verbindung zu dieser aufbauen. Die geschieht mir der Klasse PDO.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
?>
  • host: Hostname der Datenbank (meistens localhost)
  • dbname: Der Datenbankname
  • username: Benutzername in der Datenbank
  • password: Passwort in der Datenbank