Pages: 1 2 [3]   Go Down
Author Topic: MySQL DB Eintrag auslesen ? [gelöst]  (Read 3433 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eben, außerdem kannst Du ja jederzeit den aktuellen Stand als "letzten" Stand von Hand in die Datenbank schreiben und dann dem Arduino kontrolliert einen RESET verpassen. Dann zieht er sich den korrekten Stand und zählt von da an wieder korrekt weiter.
Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 30
Posts: 1284
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mal den alten kram ausgegraben.....
Hier der Sketch, mit dem ich einen Wert aus einer MySQL lese.
In diesem Sketch verwende ich noch float, was man aber lieber in unsigned long ändern sollte.

Code:
/*
  #####################################################
  #          Einen Wert aus einer MySQL DB lesen      #
  #####################################################
*/
#include <SPI.h>                                       // library für die Serielle Kommunikation
#include <Ethernet.h>                                  // library für Ethernet kommunikation

byte mac[] = { 0x00, 0xAB, 0xCB, 0xCD, 0xDE, 0x02 };   // MAC-Adresse der Arduino
IPAddress ip(192,168,178,140);                         // IP-Adresse des Arduino
IPAddress server(192,168,178,111);                     // IP-Adresse des Servers
EthernetClient client;                                 // initialisiere Ethernet-Bibliothek

char host[]    = "192.168.178.111";                    // Domain
char url[]     = "/Arduino/Gas/read.php";              // Pfad zur PHP-Datei

float GZStand;                                         // Wert aus DB als Variablentyp float
char* returnvalue = 0;                                 // Variable mit max 10 zeichen
char buffer[10];


void setup() {
  Serial.begin(9600);                                  // Serielle Konsole initialisieren
  Serial.print(F("Setup LAN ... "));
  delay(1000);
  Ethernet.begin(mac, ip);                             // IP Konfiguration setzen
  Serial.println(F("ok"));
}

void loop() {
  delay(1000);
  char* zaehlerstand = daten_laden();                 // http-request senden und in variable speichern
  Serial.print(F("\n\nAntwort : "));
  Serial.println(buffer);
  GZStand = atof(buffer)/100;                         // durch 100 teilen, weil in der read.php multipliziert wird (*100)
  Serial.println(GZStand);
  delay(10000);                                       // 10 sekunden warten
}


char* daten_laden()                                   //achtung wir liefern ein char* (c-String zurück)
    {
    int index = 0;                                    // zaehlindex auf 0 setzen
    client.connect(server, 8000);                     // connect to server
    Serial.print(F("Verbinde ... "));   
    delay(1000);

    if (client.connected()) {
    Serial.println(F("ok"));
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.print(host);
    client.println();
    client.println();
    delay(30);
  } else {
    Serial.println(F("Keine Verbindung..."));
    client.flush();
    client.stop();
    client.connect(server, 8000);                    // connect to server
    Serial.print(F("Neu Verbinden ... "));   
    delay(1000);
  }

  //Lese solange Bytes aus der Verbindung und wirf sie weg bis ein $ gefunden wird.
  while (client.available() && client.read() != '$');

  Serial.println(F("$ found"));                        // in der read.php ein $ vor den auszugebenden Wert setzen
  while (client.available() && index < 10) {        //einlesen der Nutzdaten. Aufpassen, das wir die Arraygrenze nicht überschreiten
    buffer[index++] = client.read();                // solange zeichen vorhanden sind, das aktuelle zeichen in puffer schreiben und zaehlindex erhoehen   
  }

  buffer[index] = 0;                                // wenn keine zeichen mehr vorhanden, dann puffer am letzten (schon erhoehten) index auf \0 setzen (c-String ende)
  client.stop();
}

An dieser stelle nochmal ein ganz großes Danke an mkl0815 !
Der Sketch funktioniert bei dir?

Also bei mir nicht. Ich sag auch warum:D

Code:
char* daten_laden()                                   //achtung wir liefern ein char* (c-String zurück)
    {
    int index = 0;                                    // zaehlindex auf 0 setzen
    client.connect(server, 80);                     // connect to server
    Serial.print(F("Verbinde ... "));   
    delay(1000);

    if (client.connected()) {
    Serial.println(F("ok"));
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.print(host);
    client.println();
    client.println();
    delay(30);
  } else {
    Serial.println(F("Keine Verbindung..."));
    client.flush();
    client.stop();
    client.connect(server, 80);                    // connect to server
    Serial.print(F("Neu Verbinden ... "));   
    delay(1000);
  }

  //Lese solange Bytes aus der Verbindung und wirf sie weg bis ein $ gefunden wird.
  while (client.available() && client.read() != '$');

  Serial.println(F("$ found"));                        // in der read.php ein $ vor den auszugebenden Wert setzen
  while (client.available() && index < 10) {        //einlesen der Nutzdaten. Aufpassen, das wir die Arraygrenze nicht überschreiten
    buffer[index++] = client.read();                // solange zeichen vorhanden sind, das aktuelle zeichen in puffer schreiben und zaehlindex erhoehen   
  }

  buffer[index] = 0;                                // wenn keine zeichen mehr vorhanden, dann puffer am letzten (schon erhoehten) index auf \0 setzen (c-String ende)
  client.stop();
}

Ich frag ab ob Verbunden wurde, fals ja dann den ganzen kram posten.
else
Keine Verbindung und deshalb neu Verbinden (zumindest posten dass neu Verbunden soll)
Nun kommt der Witz.
Hab den host falsch eingegeben, bzw garnicht geändert und es wird gepostet $ found
Das beste kommt ja aber zum schluss smiley-grin
Code:
client.read() != '$');
client.read() fals was anderes als '$');
dann posten $ found

Nun kommt aber der traurige Teil, nachdem ich den host richtig eingegeben hab, wird mir immer noch gepostet
Quote
Antwort :
0

Dies steht in der Datenbank:
2014-01-18 22:06:32.000000 //datum
12.00 //temp1
13.00 //temp2

Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo skorpi08,
also bei mir läuft das ganze seit einem Jahr.
Auch nach mehreren Stromausfällen. Löppt ohne Probleme.

Hier meine ganzer Sketch, der auf einem Arduino Ethernet läuft.

reed_14_SQL_LCD_request_MAIL.ino
Logged

*greatz*

 CeTax

www dot blinkmann dot de


Cloppenburg
Offline Offline
Edison Member
*
Karma: 30
Posts: 1284
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dass mit der mail funktion ist ja mal ne gute idee, mal gleich implementieren  smiley

Teste mal obs nun läuft
PS: Deine website ist auch schick smiley-grin
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Cloppenburg
Offline Offline
Edison Member
*
Karma: 30
Posts: 1284
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
...Lese aus DB ...Verbinde ... , lade Daten Gasstand aus DB0.00mSende Mail ... Ok

Code:
include("inc/db.inc.php");
 
$q_data  = mysql_query("SELECT DATE_FORMAT(datumzeit,'%d.%m.%Y') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i') AS ZEIT, temp1
                        FROM arduino_temperaturen ORDER BY datumzeit DESC LIMIT 1") or die(mysql_error());
if(mysql_num_rows($q_data) > 0)
{
  $r_data = mysql_fetch_array($q_data);
  $DATUM  = $r_data['DATUM'];
  $temp1  = number_format($r_data['temp1'], 2, '.', '');
  $ZEIT   = $r_data['ZEIT'];
}
echo $temp1;

Wieso wirds denn nicht angezeigt?
Mysql Tabellen richtig?


* Pasted Graphic 1.jpg (31.68 KB, 612x102 - viewed 15 times.)
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Pages: 1 2 [3]   Go Up
Jump to: