INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ausgelesene Daten in eine Datenbank schreiben
16.06.2015, 10:07
Beitrag #1
Ausgelesene Daten in eine Datenbank schreiben
Hallo zusammen,

ich bin ein eher Unerfahrener in Sachen Arduino und komme bei einem Problem nicht weiter.

Ich habe ein Programm geschrieben, dass mittels eines NTC die Raumtemperatur angibt.
Diese Daten möchte ich nun in eine MySQL Datenbank übertragen, jedoch verzweifle ich an der Ausführung.

Ich habe auch schon gefühlt sämtliche Seiten und Videos bei Youtube gecheckt...

Code:
#include <math.h>         //loads the more advanced math functions

void setup() {            //This function gets called when the Arduino starts
  Serial.begin(9600);   //This code sets up the Serial port at 115200 baud rate
  pinMode(0, INPUT);
}

double Thermister(int RawADC) {  //Function to perform the fancy math of the Steinhart-Hart equation
  double Temp;
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
  Temp = Temp - 273.15;              // Convert Kelvin to Celsius

  return Temp;
}

void loop() {             //This function loops while the arduino is powered
  analogRead(A0);  // Auslesen des Analogpins A0
  int val;                //Create an integer variable
  double temp;            //Variable to hold a temperature value
  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port
  Serial.println(val);
  delay(2000);            //Wait one second before we do it again
}
das ist der Code zum Auslesen...

Nun weiß ich leider nicht wie es weitergeht..kann mir jemand helfen?

Vielen vielen Dank...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2015, 10:15
Beitrag #2
RE: Ausgelesene Daten in eine Datenbank schreiben
Das hast du nicht zufällig gesehen?

http://www.arduinoforum.de/arduino-Threa...-und-MySQL
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2015, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2015 10:26 von hougy.)
Beitrag #3
RE: Ausgelesene Daten in eine Datenbank schreiben
Ja schon gesehen, sind aber leider andere Sensoren und ich muss das auf einen Server meiner Uni schreiben und das funktioniert alles irgendwie nicht, wenn ich dieses skript schreibe..

Code:
<!DOCTYPE html>
<html>
<head>
    <title>Temperaturmessung NTC Info</title>
    <meta charset="utf-8" />
</head>
<body>
    <h1>Aufnahme mit dem Arduino </h1>
    <h2>NTC Abfrage</h2>
    
    <?php
    mysql_connect('localhost', 'karstenw','karstenw') or die(mysql_error());
    mysql_select_db('mydb_karstenw') or die(mysql_error());
    
    $sql = "SELECT * FROM Temp ORDER BY Datum DESC";
    
    $query = mysql_query($sql) or die(mysql_error());

    
    echo '<table border=1>';
        echo '<tr>';
            echo '<th>ID</th>';
            echo '<th>Datetime</th>';
            echo '<th>Temp. in °C</th>';
            echo '<th>Temp in DEZ</th>';
        echo '<tr>';
        while($fetch = mysql_fetch_assoc($query))        {
            echo '<tr>';
                echo '<td>'. $fetch ['ID']. '</td>';
                echo '<td>'. $fetch ['Datetime']. '</td>';
                echo '<td>'. $fetch ['Temp. in °C']. '</td>';
                echo '<td>'. $fetch ['Temp in DEZ']. '</td>';
            echo '</tr>';
        }
    echo '</table>';
    ?>

</body>
</html>

Hier mal mein php skript, mit dem ich die daten einzeigen lassen will.
Dieses Skript hat mit dem Raspberry Pi funktioniert..muss man beim Arduino etwas anders machen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2015, 11:54
Beitrag #4
RE: Ausgelesene Daten in eine Datenbank schreiben
Hi,
fuer das Schreiben auf die Datenbank sind die Sensoren doch voellig egal. Ich wuerde das ganze sowieso erst einmal ohne irgendwelche Sensor-Abfragen versuchen. D.h. erstmal soweit kommen, dass Du irgendwelche hart-codierten Werte in eine Tabelle schreiben kannst.
Wie das dann am besten geht, kommt starkm darauf an, wie der Arduino angebunden ist.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2015, 14:47
Beitrag #5
RE: Ausgelesene Daten in eine Datenbank schreiben
Ich habe jetzt eine Datenbank erstellt und mein "Grund"ausleseprogramm funktioniert nun auch..

jetzt kommt das Problem mit dem Senden bzw. Auslesen der Daten und Speichern in eine Datenbank.

Code:
#include <math.h>         //loads the more advanced math functions
/********************************************************************************​*******************************************            
  PROJEKT: Temperaturlogger                                                                                                 *
  Beschreibung:  Temperaturwerte von 2 ds1820 Temperatursensoren werden an ein php-Script gesendet,                         *
  dass diese Daten in eine MySQL-Datenbank schreibt,                                                                        *
                                                                                                                            *
                                                                                                                            *
  Folgende Werte müssen angepasst werden                                                                                    *
  --------------------------------------------------------------------------------------------------------------------------*
  Intervall = Zeitraum in welchen Abständen die Temperaturdaten vom Arduino zur Datenbank übertragen werden sollen,         *
  mac[] = MAC-Adresse des Ethernet Shields                                                                                  *
  ip[] = IP-Adresse über die der Arduino erreichbar sein soll.                                                              *
  server[] = IP-Adresse des Servers auf den die Daten übertragen werden sollen. herauszufinden mit ping www.domain.de       *
  host[] = Name der Domain zu der die Verbindung aufgebaut werden soll                                                      *
  url[] = Pfad und Name der Datei die für den Upload der übergebenen Daten zur Datenbank zuständig ist.                     *
  key[] = Kennwort dass mit dem Kennwort in der php-Datei übereinstimmen muss (Sicherheitsaspekt)                           *
********************************************************************************​*********************************************/

#include <SPI.h>
#include <Ethernet.h>             // library for ethernet functions




//ETHERNET-SETTINGS
byte mac[]     = { 0x90, 0xA2, 0xDA, 0x0E, 0x0B, 0x76 };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 0, 2 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 0, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 0, 16 };                     // IP-Adresse des Servers

EthernetClient client;
char host[]    = "192.168.0.16";                      // Domain
char url[]     = "/var/www/info5home.php";           // Pfad zur PHP-Datei
char c;                                                     // Variable für Rückgabe des Servers

long Interval  = 1;                                        // Upload-Interval in Minuten


int sensorValue = analogRead(A0);
double temp;


void setup()
{
  temp=Thermister(sensorValue);
  pinMode(0, INPUT);
  delay(1000);

  Serial.begin(9600);
  Serial.flush();
  delay(200);

  Serial.println("Arduino Temperatur");
  Serial.println("Ethernet initialisieren...");  

  Ethernet.begin(mac, ip);
  Interval = Interval * 1000 * 60;                            // Das in Minuten angegebene Interval in Millisekunden umrechnen
  delay(1000);                                                // warten, bis Ethernet gestartet

  //Sensoren abfragen
  // sensors.begin();
  Serial.println("Temperatur-Sensoren ermitteln...");

  }



double Thermister(int RawADC) {  //Function to perform the fancy math of the Steinhart-Hart equation
  double Temp;
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
  Temp = Temp - 273.15;              // Convert Kelvin to Celsius


void loop();
{
  analogRead(A0);  // Auslesen des Analogpins A0
  int val;                //Create an integer variable
  double temp;            //Variable to hold a temperature value
  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port
  Serial.println(val);
  delay(1000);            //Wait one second before we do it again
  

  Serial.print("temp: ");
  Serial.println(temp);

  //Daten_senden(temp);                                 // Temperaturdaten an Server übertragen

  delay(700);

  byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
  client.flush();

  delay(Interval);
}
void Daten_senden(float temp);
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?temp=");
    Serial.print("?temp=");
    client.print(temp);
    Serial.println(temp);
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }}}

Bis zum Ende hin kommt kein Fehler...jedoch in allerletzter Sekunde kommt das hier.. weiß jemand, was ich nun machen kann?

Code:
core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2015, 14:51
Beitrag #6
RE: Ausgelesene Daten in eine Datenbank schreiben
...das ist der ";" nach in der Zeile, die mit "void loop" beginnt.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2015, 16:00 (Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2015 16:28 von hougy.)
Beitrag #7
RE: Ausgelesene Daten in eine Datenbank schreiben
Ok jetzt hab ich die fehlende Klammer gefunden..

Code:
void Daten_senden(float temp);
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?temp=");
    Serial.print("?temp=");
    client.print(temp);
    Serial.println(temp);
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }}}

nun kommt leider dieser Fehler..

Code:
NTC_Abfrage:113: error: expected unqualified-id before '{' token

Gibt es die Funktion void Daten_senden überhaupt oder muss ich die irgendwie umbenennen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2015, 16:29
Beitrag #8
RE: Ausgelesene Daten in eine Datenbank schreiben
(19.06.2015 16:00)hougy schrieb:  Hab ich gemacht..

Code:
#include <math.h>         //loads the more advanced math functions
/********************************************************************************​*******************************************            
  PROJEKT: Temperaturlogger                                                                                                 *
  Beschreibung:  Temperaturwerte von 2 ds1820 Temperatursensoren werden an ein php-Script gesendet,                         *
  dass diese Daten in eine MySQL-Datenbank schreibt,                                                                        *
                                                                                                                            *
                                                                                                                            *
  Folgende Werte müssen angepasst werden                                                                                    *
  --------------------------------------------------------------------------------------------------------------------------*
  Intervall = Zeitraum in welchen Abständen die Temperaturdaten vom Arduino zur Datenbank übertragen werden sollen,         *
  mac[] = MAC-Adresse des Ethernet Shields                                                                                  *
  ip[] = IP-Adresse über die der Arduino erreichbar sein soll.                                                              *
  server[] = IP-Adresse des Servers auf den die Daten übertragen werden sollen. herauszufinden mit ping www.domain.de       *
  host[] = Name der Domain zu der die Verbindung aufgebaut werden soll                                                      *
  url[] = Pfad und Name der Datei die für den Upload der übergebenen Daten zur Datenbank zuständig ist.                     *
  key[] = Kennwort dass mit dem Kennwort in der php-Datei übereinstimmen muss (Sicherheitsaspekt)                           *
********************************************************************************​*********************************************/

#include <SPI.h>
#include <Ethernet.h>             // library for ethernet functions




//ETHERNET-SETTINGS
byte mac[]     = { 0x90, 0xA2, 0xDA, 0x0E, 0x0B, 0x76 };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 0, 2 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 0, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 0, 16 };                     // IP-Adresse des Servers

EthernetClient client;
char host[]    = "192.168.0.16";                      // Domain
char url[]     = "/var/www/info5home.php";           // Pfad zur PHP-Datei
char c;                                                     // Variable für Rückgabe des Servers

long Interval  = 1;                                        // Upload-Interval in Minuten


int sensorValue = analogRead(A0);
double temp;


void setup()
{
  temp=Thermister(sensorValue);
  pinMode(0, INPUT);
  delay(1000);

  Serial.begin(9600);
  Serial.flush();
  delay(200);

  Serial.println("Arduino Temperatur");
  Serial.println("Ethernet initialisieren...");  

  Ethernet.begin(mac, ip);
  Interval = Interval * 1000 * 60;                            // Das in Minuten angegebene Interval in Millisekunden umrechnen
  delay(1000);                                                // warten, bis Ethernet gestartet

  //Sensoren abfragen
  // sensors.begin();
  Serial.println("Temperatur-Sensoren ermitteln...");

  }



double Thermister(int RawADC) {  //Function to perform the fancy math of the Steinhart-Hart equation
  double Temp;
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
  Temp = Temp - 273.15;              // Convert Kelvin to Celsius


void loop()  
  {
  analogRead(A0);  // Auslesen des Analogpins A0
  int val;                //Create an integer variable
  double temp;            //Variable to hold a temperature value
  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port
  Serial.println(val);
  delay(1000);            //Wait one second before we do it again
  

  Serial.print("temp: ");
  Serial.println(temp);

  //Daten_senden(temp);                                 // Temperaturdaten an Server übertragen

  delay(700);

  byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
  client.flush();

  delay(Interval);
}
void Daten_senden(float temp);
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?temp=");
    Serial.print("?temp=");
    client.print(temp);
    Serial.println(temp);
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }}}

jetzt kommt der Fehler

Code:
NTC_Abfrage:77: error: a function-definition is not allowed here before '{' token
NTC_Abfrage:138: error: expected `}' at end of input

habe schon überall versucht Klammern zu setzen..aber er will einfach nicht -.-


Hi,

schau dir man die Funktion Double Thermistor an ,

da hat am Ende ein } gefehlt. Übrigens kannst Du Dich hinter die erste
geschweifte Klammer des Blockes stellen. (Siehe Anhang) Er zeigt dann an, wie das "Gegenstück" zum Block ist ! Übrigens brauchst Du ; nicht direkt hinter die Funktion zu schreiben , geht auch ohne !


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Daten Visualisieren MeisterQ 12 529 01.12.2016 19:36
Letzter Beitrag: MeisterQ
  Data Logger Daten auf SD Card schreiben Crichton 12 262 22.11.2016 18:32
Letzter Beitrag: Crichton
  I2C Daten übertragen Gandalf 3 209 04.11.2016 13:20
Letzter Beitrag: hotsystems
  Daten über USB verarbeiten Felix91 10 318 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.531 01.09.2016 14:17
Letzter Beitrag: Clubsport
  Serial Monitor ASCII 1 schreiben BennIY 11 574 01.08.2016 16:42
Letzter Beitrag: Mathias
  Daten an mysql diode1990 24 1.293 31.07.2016 10:29
Letzter Beitrag: Gandalf
  NRF24L01,Empfangene Daten auswerten Marc2014 9 512 30.07.2016 19:34
Letzter Beitrag: rkuehle
  Fehlermeldung das eine reimundko 3 305 08.06.2016 08:56
Letzter Beitrag: hotsystems
  Serielle Schnittstelle - Daten empfangen Datatom 8 772 22.05.2016 18:10
Letzter Beitrag: avoid

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste