Daten in Datenbank schreiben

Hey Leute,

ich versuche gerade mit dem Arduino aufgenommene Daten in eine MYSQL Datenbank zu speichern.

Ich habe einen funktionieren Sketch

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library
#define DHTPIN 8     // benutzter ARDUINO-Pin (Analog-Pin 1)
#include <Servo.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#include <Ethernet.h>
#include <math.h>
#include <EEPROM.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {                          // Beschreibung des Ethernet Shields, steht auf der Rückseite!
   0x90, 0xA2, 0xDA, 0x0E, 0xB, 0x76
};
 IPAddress ip(192,168,0,2);      // Ip des Arduinos oder des Servers????
EthernetServer server(80);

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // diese Pins werden benutzt

#define DHTTYPE DHT11   // DHT 11 

DHT dht(DHTPIN, DHTTYPE);
Servo myservo;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  Serial.println("DHT11-Test");
   Serial.begin(9600);
        myservo.attach(9);
        
  lcd.clear();      // LCD löschen 
  lcd.begin(16, 2); // verfügbare Spalten und Zeilen
   
  dht.begin();
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
}


void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("Fehler beim Lesen vom DHT-Sensor");
  } 
  else 
  {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
           {
            
           client.print("INFO 1 - Simuliertes Badezimmer"); // send these lines to the client.
           client.println();
           client.println("
");
           client.print("Temperatur: ");
           client.print(t);
           client.print(" *C");
           client.println();
           client.println("
");
           client.print("Luftfeuchtigkeit: ");
           client.print(h);
           client.print(" %");
            
           
            
                  
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
  }
 Serial.print("Feuchtigkeit: "); 
    Serial.print(h);
    Serial.print(" %\t   ");
    Serial.print("Temperatur: "); 
    Serial.print(t);
    Serial.println(" Grad Celsius");
    
    lcd.setCursor(0,0);      
    lcd.print("Feuchtigk.:"); 
    lcd.print(h);
     lcd.setCursor(0,1);      
    lcd.print("Temperatur:");
    lcd.print(t);
    
    
    
    if (t > 30 || h > 50) {
                myservo.write(45);
 } else
        {
                myservo.write(0);}
    delay (2000);}

und das ist das dazugehörige PHP programm…

<?php

$verbindung = mysql_connect ("localhost",
"root", "raspberry")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("raspberrypidb")
or die ("Die Datenbank existiert nicht.");



$seite = fopen("192.168.0.2", "r"); // IP des Arduinoes!
$source = fread($seite, 1000000);

if (preg_match('/<h1>([^<]*)/', $source, $regs)) {
   $result = $regs[1];
echo "<pre>";  

// in diesem Array stehen die Ergebnisse
print_r ($regs);
echo "</pre>";
} 
else {
   $result = "";
}



$eintrag = "INSERT INTO Temperaturwerte
(temperatur_in_celsius)
VALUES
('$regs[1]')";

$eintragen = mysql_query($eintrag);



if($eintragen == true)
   {
   echo "Eintrag war erfolgreich 
";
   }
else
   {
   echo "Fehler beim Speichern";
   }



$abfrage = "SELECT * FROM Temperaturwerte";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   echo "$row->ID, $row->Zeit, $row->temperatur_in_celsius 
";
   }

   
   
header("Refresh: 31; url=http://192.168.0.16/Temperturwerte.php");

echo 'Logged in successfully.';

?>

Leider steht auf meiner Seite dann dies hier…

Eintrag war erfolgreich
1, 2016-01-21 10:57:52, 0
2, 2016-01-21 10:58:12, 0
3, 2016-01-21 10:58:20, 0
4, 2016-01-21 11:01:35, 0
5, 2016-01-21 11:07:18, 0
6, 2016-01-21 11:13:58, 0
Logged in successfully.

Dort wo die 0 steht, sollte aber der aufgenommene Temperaturwert stehen…

Kann mir dabei jemand helfen?

Ich danke euch …

Warum setzt du deinen Sketch nicht in Code-Tags?

Quote ist hier falsch.

HotSystems:
Warum setzt du deinen Sketch nicht in Code-Tags?

Quote ist hier falsch.

Sry hab ich nicht gesehen :o

funduinoinfo3:
Sry hab ich nicht gesehen :o

Ok, das ist so besser, danke.

Ich habe mit dem Ethernet-Shield bisher noch nichts gemacht, vermute aber, das kann mit "float"

client.print(t);

nicht umgehen.

Leider hat es weder mit

int oder double funktioniert...

Wenn du mal in deinem php script

  echo " $eintrag 
";

einbaust, da wo

 $eintragen = mysql_query($eintrag);

steht...

@Hotsystems: client.print sollte eigentlich das print erben, und alles können was ein print normalerweise kann.

michael_x:
@Hotsystems: client.print sollte eigentlich das print erben, und alles können was ein print normalerweise kann.

Ja, ok.
Vielen Dank.

Da fehlt mir bisher die Erfahrung.
Komme ich sicher auch nochmal hin.

Ein Ethernet-Shield liegt hier schon länger rum. :wink:

michael_x:
Wenn du mal in deinem php script

  echo " $eintrag 

";



einbaust, da wo 



$eintragen = mysql_query($eintrag);



steht...

@Hotsystems: client.print sollte eigentlich das print erben, und alles können was ein print normalerweise kann.

Leider nicht funktioniert...

Leider nicht funktioniert...

Was soll das heissen?

Das ist nur eine Testausgabe mehr, die eigentlich so aussehen sollte

INSERT INTO Temperaturwerte (temperatur_in_celsius) VALUES (0)

, bevor

Eintrag war erfolgreich

kommt.

Was hat er denn stattdessen ausgeschrieben ?

gelöscht. hab erst jetzt das php angeschaut.

Aber um das richtig zu verstehen: Du rufst von einem Browser das Programm auf dem PI auf, der holt sich die Werte ab und trägt sie in die SQL DB ein?

Ich bin jetzt nicht so der phpler und mit regulären Ausdrücken kenne ich mich nicht aus, aber bist du sicher, das preg_match(’/

([^<]*)/’, $source, $regs) die richtigen Werte rausfischt?

Mach eine debug Ausgabe, wie es michael_x vorschlägt.

Was passiert denn, wenn du die Arduino Seite mit dem Browser aufmachst?

Warum lässt du den Arduino für die logging Sache nicht als client laufen?