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:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino mit DS18B20 und MySQL
12.01.2014, 14:28
Beitrag #1
Arduino mit DS18B20 und MySQL
Hallo Leute,
der Titel sagt schon was aus. Ich habe einen Uno und 10 Temp-Sensoren vom Typ DS18B20. Nun möchte ich diese 10 Sensoren auslesen und auf einer SQL-Datenbank ablegen. Da habe ich mal intensiv recherchiert und mir dann folgenden Sketch aufgespielt:

/****************************
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 http://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
#include <DallasTemperature.h> // library for temperature sensors
#include <OneWire.h> // library for the onewire bus

OneWire ds(7); // pin für Temperatursensoren

//DeviceAdressen der einzelnen ds1820 Temperatursensoren.
DeviceAddress sensor1 = { 0x28, 0x2D, 0x6D, 0x3C, 0x5, 0x0, 0x0, 0x70 };
DeviceAddress sensor2 = { 0x28, 0xE2, 0x86, 0x3C, 0x5, 0x0, 0x0, 0x61 };

//ETHERNET-SETTINGS
byte mac[] = { 0x88, 0x87, 0x17, 0x87, 0xD6, 0x67 }; // MAC-Adresse des Arduino
byte ip[] = { 192, 168, 178, 28 }; // IP-Adresse des Arduino
//byte gateway[] = { 192, 168, 178, 1 }; // Gateway
//byte subnet[] = { 255, 255, 255, 0 }; // SubNet
byte server[] = { 95, 143, 172, 134 }; // IP-Adresse des Servers

EthernetClient client;
char host[] = "ihrewaesche.de"; // Domain
char url[] = "/ARDUINO/Temperatur/SaveTempToMySQL.php"; // Pfad zur PHP-Datei
char key[] = "MEINPASSWORT123"; // Kennwort aus PHP-Datei
char c; // Variable für Rückgabe des Servers

long Interval = 60; // Upload-Interval in Minuten
DallasTemperature sensors(&ds);
int numSensors; // Variable zum speichern der Anzahl der Temperatur-Sensoren

void setup()
{
delay(1000);

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

Serial.println("Arduino TemperaturLogger");
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...");

numSensors = sensors.getDeviceCount(); // Anzahl der angeschlossenen Sensoren in numSensors speichern

if(numSensors > 0) // Es wurde mindestens 1 Sensor gefunden
{
Serial.print(numSensors);
Serial.println( " Temperatur-Sensoren gefunden.");
}
else // Es wurde kein Sensor gefunden
{
Serial.println("Keine Temperatur-Sensoren gefunden.");
}
}

void loop()
{
float temp1 = getTemperature(sensor1); // Temperatur von Sensor 1 ermitteln
float temp2 = getTemperature(sensor2); // Temperatur von Sensor 2 ermitteln

Serial.print("Temp1: ");
Serial.println(temp1);
Serial.print("Temp2: ");
Serial.println(temp2);

Daten_senden(temp1, temp2); // 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);
}

/******************************
*
Daten an Server schickenn *
*
*******************************/
void Daten_senden(float T1, float T2)
{
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("?T1=");
Serial.print("?T1=");
client.print(T1);
Serial.println(T1);
client.print("&T2=");
Serial.print("&T2=");
client.print(T2);
Serial.println(T2);
client.print("&key=" + String(key));
Serial.print("&key=" + String(key));
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 *****");
}
}

/*************************************
*
Temperatur der Sensoren auslesen *
*
*************************************/
void writeTimeToScratchpad(byte* address)
{
ds.reset();
ds.select(address);
ds.write(0x44,1);
delay(1000);
}

void readTimeFromScratchpad(byte* address, byte* data)
{
ds.reset();
ds.select(address);
ds.write(0xBE);
for (byte i=0;i<9;i++)
{
data[i] = ds.read();
}
}

float getTemperature(byte* address)
{
int tr;
byte data[12];

writeTimeToScratchpad(address);

readTimeFromScratchpad(address,data);

tr = data[0];

if (data[1] > 0x80)
{
tr = !tr + 1; //two's complement adjustment
tr = tr * -1; //flip value negative.
}

int cpc = data[7];
int cr = data[6];

tr = tr >> 1;

return tr - (float)0.25 + (cpc - cr)/(float)cpc;
}



Die Ip / MAC - Eingaben habe ich natürlich in meinem Sinne verändert.

Dann wollte ich mal testen, ob der meine Sensoren findet und was passiert? Er findet sie, doch die Temperaturen stimmen nicht. Kurz überlegt, warum zeigt er in Fahrenheit an, aber das ist es nicht.
Der Sketch ist nicht für meine DS18 B 20 sondern für die DS18 S 20. Nun, dachte ich, stellste den mal schnell um, doch ich bekomme es nicht hin.

Könnt ihr mir dabei ein wenig zur Hand gehen?Blush

Gruß
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2014, 15:29
Beitrag #2
RE: Arduino mit DS18B20 und MySQL
Hallo Micha,

hast du mal ein Beispiel was er ausgibt?

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2014, 19:23
Beitrag #3
RE: Arduino mit DS18B20 und MySQL
(12.01.2014 15:29)rkuehle schrieb:  Hallo Micha,

hast du mal ein Beispiel was er ausgibt?

Grüße Ricardo

Hallo Ricardo,

im serial Monitor gibt er z. B. statt 22,42° C, die Temperatur mit 54,73 aus.

Mir ging es ja nur im Moment darum, zu überprüfen, wie er die Sensoren erkennt, und welche Temperatur er ausgibt. Und genau da beißt es sich immo.Angry

Gruß
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2014, 20:57
Beitrag #4
RE: Arduino mit DS18B20 und MySQL
Hallo Michael,

mit
ds.write(0x44,1);
wird ja die Konvertierung in Celcius angestoßen.
Hier: http://tushev.org/articles/arduino/item/...nd-arduino
steht dazu, dass dies jedoch nur funktioniert, wenn die Sensoren nicht parasitär versorgt werden.
Wie sieht es bei deiner Schaltung aus?

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2014, 21:17
Beitrag #5
RE: Arduino mit DS18B20 und MySQL
(12.01.2014 20:57)rkuehle schrieb:  Hallo Michael,

mit
ds.write(0x44,1);
wird ja die Konvertierung in Celcius angestoßen.
Hier: http://tushev.org/articles/arduino/item/...nd-arduino
steht dazu, dass dies jedoch nur funktioniert, wenn die Sensoren nicht parasitär versorgt werden.
Wie sieht es bei deiner Schaltung aus?

Grüße Ricardo

Tja, ich habe die parasitär angeschlossen weil das so einfach ist. Muß ich mal versuchen anders an zu schliessen. Wobei, auslesen und auf einem Display ausgeben geht. Und wenn ich den Uno als Webserver benutze klappt das auch parasitär. Muß doch möglich sein, das in diesen Sketch einzubauen, verdammt verdammt.

Ich werde da mal das Datenblatt hinzu ziehen müssen, wie ich das verkabeln muss.

Ich check das mal eben und melde mich.

Danke und Grüße

Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2014, 22:19
Beitrag #6
RE: Arduino mit DS18B20 und MySQL
Hallo Ricardo,

so kurz anders verkabelt und dann den Sketch neu durchlaufen lassen.

Das Ergebnis: 1. Sensor = 69,73 2. Sensor = 69,68

Nahe zusammen, aber deutlich über der Zimmertemp. hier im Wohnzimmer Sad


Nun verstehe ich gar nichts mehr.

Gruß
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2014, 07:19
Beitrag #7
RE: Arduino mit DS18B20 und MySQL
Hallo Michael,

du schreibst
Zitat:Wobei, auslesen und auf einem Display ausgeben geht. Und wenn ich den Uno als Webserver benutze klappt das auch parasitär.
Jetzt bin ich etwas verwirrt. Du möchtest damit sagen, dass die Ausgabe auf dem Webserver und LCD richtig ist, im SerialMonitor jedoch nicht?
Wenn ja, kann es wohl nur mit den jeweils für die Ausgabe benutzten Variablen zu tun haben.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2014, 07:37
Beitrag #8
RE: Arduino mit DS18B20 und MySQL
Hallo Ricardo,

da habe ich mich völlig falsch ausgedrückt, sorry echt.

Als Webserver und mit Ausgabe am LCD geht, jedoch mit anderen Sketchen. Mit Diesem hier doch nicht, das hatte ich nie mit eingebaut. Das würde ich auch nicht hin bekommen. Soweit bin ich noch nicht, dazu reicht mein Wissen einfach noch nicht.

Gruß
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino+Ethernet+RFID+MySQL RonSH 12 654 13.10.2016 22:32
Letzter Beitrag: Tommy56
Lightbulb LED Thermometer über WS2812b LED und Dallas DS18B20 Wampo 2 1.728 15.03.2015 17:45
Letzter Beitrag: Wampo
Star ATTINY85 mit DS18B20 Temperatursensor und echtem Analogausgang ardu_arne 0 4.146 07.01.2015 21:28
Letzter Beitrag: ardu_arne
  Arduino Neuling: Zugeklappten Laptop mit Arduino aufwecken + Kiste aufklappen? Ikearegal 2 2.518 02.02.2014 07:59
Letzter Beitrag: Ikearegal

Gehe zu:


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