Ergebnis aus einer PHP Datei (MYSQL) in eine Variable speichern

Hallo zusammen,
ich bin neu auf dem Gebiet des Arduinos und bastel mir nur ein bisschen Code zusammen.

Ich habe folgendes Problem, ich möchte von meinem Webserver ein SQL Ergebnis in eine variable des Arduino speichern, damit ich nachher damit weiter arbeiten kann.

Eine Verbindung zum Server bekomme ich hin und die PHP Datei gibt mir auch am PC die richtige Antwort. Nur beim Arduino bekomme ich es nicht hin, das Ergebnis in dem Serial Monitor anzuzeigt. Es handelt sich nur um ein Zahlen Ergebnis.

Code vom Arduino

#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // MAC-ADRESSE eingeben!
 byte ip[] = { 192, 168, 12, 90 }; // IP-Adresse eingeben!
 byte gateway[] = { 192, 168, 12, 1 }; // Gateway eingeben!
 byte subnet[] = { 255, 255, 255, 0 };
 byte server[] = {192, 168, 12, 1}; // IP des Servers eingeben
 EthernetClient client;
 char host[] = "192.168.12.1"; // DOMAIN eingeben!
 char url[] = "/arduino_take_data.php"; // Pfad zur PHP-Datei eingeben
 char c;

 int PowerLED = 3; // Power LED

void setup()
 {
 pinMode(PowerLED, OUTPUT);
 Serial.begin(9600); // für Debug-Ausgaben
 Serial.println("Programm gestartet…");
digitalWrite(PowerLED, HIGH);
 Ethernet.begin(mac, ip, gateway, subnet);
 delay(5000); // warten, bis LAN gestartet
 }

void loop()
 {
 digitalWrite(PowerLED, LOW);
 Daten_Anfragen();
 Daten_Empfangen();
 delay(900);
 digitalWrite(PowerLED, HIGH);

if (client.available())
 {
 char c = client.read();
 Serial.print(c);
 }
 delay(899000);
 client.stop();
 client.flush();
 }

void Daten_Anfragen()
 {
 if (client.connect(server, 80)) // Verbindung zum Server aufbauen
 {    
  Serial.print("Verbunden...sende Daten...");
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(host);
    client.println();
    Serial.println("fertig!");
 }
else
 {
 Serial.println(" ***** Verbindungsaufbau nicht möglich *****");
 }
 }

void Daten_Empfangen()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  Serial.println("Server echo:");
  if (client.available()) {
  char c = client.read();
  Serial.print(c);
  }
}

Code von der PHP-Datei

<?php
 /* Datenbankserver - In der Regel die IP */
$db_server = '192.168.12.1';

/* Datenbankname */
$db_name = 'DB';

/* Datenbankuser */
$db_user = 'user';

/* Datenbankpasswort */
$db_passwort = 'pw';

/* Erstellt Connect zu Datenbank her */
$db = @ mysql_connect ( $db_server, $db_user, $db_passwort )
    or die ( 'Konnte keine Verbindung zur Datenbank herstellen' );

$db_check = @ mysql_select_db ( $db_name );


        $abfrage = mysql_query("SELECT Regelkreisnummer FROM Taggy.Regelkreise where Regelkreisnummer = '519062'");
        while($ergebnis = mysql_fetch_array($abfrage))

        {
        echo $ergebnis['Regelkreisnummer'];
        }

?>

Ich hoffe ihr versteht worauf ich hinaus möchte. Und schon mal danke im voraus. :slight_smile:

delay(899000);

Was sagt uns das?

Und du fragst nur auf ein Zeichen ab.

Und noch viel mehr Fehler im Code. Schau dir mal die Beispiele dazu an.

Hallo,
von dem Delay weiß ich bisher das es eine Wartezeit ist, bis sich die Schleife wiederholt.

Ich habe den Code noch mal verändert, habe Sachen die sich doppeln entfernt und die Wartezeit verkürzt. Zu dem hab ich fest gestellt das Client.available wohl false ist weil er nämlich keine Ausgabe tätigt.

Ich bin bereits seit 4 Tagen auf der Suche nach einem Beispiel an dem ich das verstehen kann, aber es gibt wohl nicht viel, was darauf abzielt Daten vom Server an den Arduino zusenden.

#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // MAC-ADRESSE eingeben!
 byte ip[] = { 192, 168, 12, 90 }; // IP-Adresse eingeben!
 byte gateway[] = { 192, 168, 12, 1 }; // Gateway eingeben!
 byte subnet[] = { 255, 255, 255, 0 };
 byte server[] = {192, 168, 12, 1}; // IP des Servers eingeben
 EthernetClient client;
 char host[] = "192.168.12.1"; // DOMAIN eingeben!
 char url[] = "/arduino_take_data.php"; // Pfad zur PHP-Datei eingeben
 char c;

 int PowerLED = 3; // Power LED

void setup()
 {
 pinMode(PowerLED, OUTPUT);
 Serial.begin(9600); // für Debug-Ausgaben
 Serial.println("Programm gestartet…");
digitalWrite(PowerLED, HIGH);
 Ethernet.begin(mac, ip, gateway, subnet);
 delay(5000); // warten, bis LAN gestartet
 }

void loop()
 {
 digitalWrite(PowerLED, LOW);
 Daten_Anfragen();
 Daten_Empfangen();
 delay(900);
 digitalWrite(PowerLED, HIGH);
 delay(9000);
 client.stop();
 client.flush();
 }

void Daten_Anfragen()
 {
 if (client.connect(server, 80)) // Verbindung zum Server aufbauen
 {    
  Serial.print("Verbunden...sende Daten...");
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(host);
    client.println();
    Serial.println("fertig!");
 }
else
 {
 Serial.println(" ***** Verbindungsaufbau nicht möglich *****");
 }
 }

void Daten_Empfangen()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
  Serial.println("Server echo:");
  char c = client.read();
  Serial.print(c);
  }
}

Schau mal in die Beispiele Deiner IDE unter Ethernet. Da gibt es z.B. einen Webclient.

Gruß Tommy

Hallo,
ich hab im Internet doch noch ein Beispiel gefunden, welches ich auf meine Bedürfnisse ändern konnte.

trozdem vielen Dank für eure Hilfe :slight_smile:

/*
  DHCP-based IP printer
 
 This sketch uses the DHCP extensions to the Ethernet library
 to get an IP address via DHCP and print the address obtained.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 12 April 2011
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>


// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
byte ip[] = { 192, 168, 12, 90 }; // IP-Adresse eingeben!
byte gateway[] = { 192, 168, 12, 1 }; // Gateway eingeben!
byte subnet[] = { 255, 255, 255, 0 };
byte server[] = {192, 168, 12, 1};
char host[] = "192.168.12.1"; // DOMAIN eingeben!
char url[] = "/arduino_take_data.php"; // Pfad zur PHP-Datei eingeben

int x = 0; //variable for looping
char dataStr[50]; //create array to store the response. for example : SomeValue1=0 
char c;

float Temperatur = 0;

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

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

  // start the Ethernet connection:
 Ethernet.begin(mac, ip, gateway, subnet);

  Serial.println();Serial.println("connecting...");

  Temperatur = 34;
  //pinMode(7, OUTPUT);
  
  String data;
  data+="";
  data+="data=123";
  data+="&submit=Submit"; // Submitting data
  
  if (client.connect("192.168.12.1",80)) 
  {
 Serial.print("Verbunden…sende Daten…");
 client.print("GET ");
 client.print(url);
 client.print("?TEMP=");
 client.print(Temperatur);
 client.println(" HTTP/1.1");
 client.print("Host: ");
 client.println(host);
 client.println();
 Serial.print("fertig!");
  }
  delay(2000);
  Serial.println("Response: ");
}

void loop()
{  
  while (client.connected() || client.available()) 
  {
    c = client.read(); //read first character
    while (c != '<'){ //while < character is not coming yet, keep reading character
      c = client.read();
    }
    c = client.read(); //read the '<' character, but not storing in array
    while (c != '>'){ //while > character is not coming yet,
      dataStr[x] = c; //store character in array
      c = client.read(); //read next character
      x++; //incrementing index array
    }
    printdata(); //print the character that has been captured by array at Serial Monitor
  } 
  client.stop();  //stop connection
}

void printdata() {
  for (x=0;x<50;x++){
    Serial.print(dataStr[x]);
  }
}

An dem Sketch wirst du noch viel Freude haben, wenn du ihn in deinen integrieren willst.