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
Newbie sucht geeignete Literatur ?
05.12.2014, 12:13
Beitrag #1
Newbie sucht geeignete Literatur ?
Hallo

ich möchte mir hier eine Aquariumsteuerung aufbauen die von einer Mysql-db sich Daten holt und dort abspeichert.
Dazu verwende ich
- Arduino Mega
- Ethernet-shield
- DTH22 sensoren
- PH Messsonden mit
- PH Circuit-shield

den mysql_connector verwende ich von Chuck Bell

Wie die DB und die Datenfelder zu gestalten ist weiss ich (habe früher mal mit mysql und PHP etwas programmiert).

Da nun jedoch alles in C zu programmieren ist muss ich bestimmte Dinge dazulernen.

Ich habe einen Beispielcode von Cuck-Bell für Temp-sensoren die in die Mysql-db geschrieben werden.

Und hier fängt das Problem für mich an. Wieso bestimmte Dinge dort zerlegt werden kapiere ich nicht so recht.

Nun suche ich eine Literatur oder Online-Seite auf der mir solche Programmiertechniken gut und simple erklärt werden.

Kennt jemand eine gute Online-Hilfe oder Online-Tutorial?
Wäre für Tipps und Links sehr dankbar.

Hier ein Beispielcode der funktioniert.
mit Hinweisen wo ich meine Kapier-Probleme habe Sad

/**
Sensor Networks Example Arduino DHT22 Sensor

This project demonstrates how to receive sensor data from
a DHT22 sensor saving the samples in a MySQL
database.

It uses an Arduino with an Ethernet shield installed.
*/
#include <SPI.h>
#include <Ethernet.h>
#include <sha1.h>
#include "mysql.h"
#include <DHT22.h>

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(192, 168, 2, 102);
char user[] = "root";
char password[] = "xyz";

Connector my_conn; // The Connector/Arduino reference

#define DHT22_PIN 8 // DHT2 data is on pin 7
#define read_delay 5000 // 5 seconds
DHT22 myDHT22(DHT22_PIN); // DHT22 instance

void read_data() {
DHT22_ERROR_t errorCode;

errorCode = myDHT22.readData();
switch(errorCode)
{
case DHT_ERROR_NONE:
char buf[128];
sprintf(buf, "INSERT INTO dht22_test.temp_humid VALUES (NULL, %hi.%01hi, %i.%01i)",
myDHT22.getTemperatureCInt()/10, // wieso wird hier die Temp zerlegt ???
abs(myDHT22.getTemperatureCInt()%10), // wieso wird hier die Temp zerlegt ???
myDHT22.getHumidityInt()/10, // hier die gleiche Frage
myDHT22.getHumidityInt()%10); // und hier
my_conn.cmd_query(buf);

// wenn ich hier nun einen zweite Insertanweisung einfpgen würde/möchte kracht es schon
z.B.

const char INSERT_DATA[] = "INSERT INTO test_arduino.temps VALUES
(%s, NULL)";
float value_read = myDHT22.getTemperatureCInt();
char query[64];
char temperature[10];
dtostrf(value_read, 1, 1, temperature);
sprintf(query, INSERT_DATA, temperature);



Serial.println("Data read and recorded.");
break;
case DHT_ERROR_CHECKSUM:
Serial.print("check sum error ");
Serial.print(myDHT22.getTemperatureC());
Serial.print("C ");
Serial.print(myDHT22.getHumidity());
Serial.println("%");
break;
case DHT_BUS_HUNG:
Serial.println("BUS Hung ");
break;
case DHT_ERROR_NOT_PRESENT:
Serial.println("Not Present ");
break;
case DHT_ERROR_ACK_TOO_LONG:
Serial.println("ACK time out ");
break;
case DHT_ERROR_SYNC_TIMEOUT:
Serial.println("Sync Timeout ");
break;
case DHT_ERROR_DATA_TIMEOUT:
Serial.println("Data Timeout ");
break;
case DHT_ERROR_TOOQUICK:
Serial.println("Polled too quick ");
break;
}
}

void setup() {
Ethernet.begin(mac_addr);
Serial.begin(115200);
delay(1000);
Serial.println("Connecting...");
if (my_conn.mysql_connect(server_addr, 3306, user, password))
delay(500);
else
Serial.println("Connection failed.");
}

void loop() {
delay(read_delay);
read_data();
}


Das mir hier noch die absoluten Grundlagen fehlen ist mir bewusst.
Ich muss also von ganz vorne anfangen suche aber einen guten Einstieg der sich auch auf Datentypen von Flieskommazahlen und z.B. Zeitangaben spezialisiert.
Wenn das überhaupt möglich ist.

Viele Grüße und Danke

Sepp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2014, 14:43
Beitrag #2
RE: Newbie sucht geeignete Literatur ?
Hi,
ich denke nicht, dass Du sowas findest. Vielleicht steht im "Kernighan Ritchie" was drin. Ansonsten Google mal nach "sprintf"...
Das Zerlegen der Werte macht er wahrscheinlich, um ganz genau die Darstellung mit genau einer Nachkommastelle hinzubekommen. Eigentlich müsste das mit sprintf auch eleganter gehen. Manchmal sind aber die Implementierung der Standard-C-Funktionen beim Arduino nicht ganz so mächtig wie normalerweise. Vielleicht kann das Arduino-sprintf nicht alles, was normalerweise mit floats geht.
Wenn Du sagst, dass es kracht: Was passiert denn genau?
Gruß,
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
05.12.2014, 16:19
Beitrag #3
RE: Newbie sucht geeignete Literatur ?
Hallo Thorsten,

ich möchte mal kurz schilder was ich wie bis jetzt versuchte.
Ich habe mir ein paar kompatible Sensoren zum Arduino gekauft.
DHT22 (Raumluft) und DS18b20 (Wasser) sowie das PH Circuit (an diese soll eine ph-sonde)
RTC DS1307 sowie Abstandssensoren HC-SR04 für Wasserstand.
sowie ein Relay-Board zur Schaltung der Beleuchtung und Strömungspumpen.

Ich habe erstmal alles mit dem sample-sketches probiert und dann am Steckbrett zusammengesteckt.
Hat wunderbar funktioniert...

Mittlerweile habe ich ein kleines Webfrontend mit einer mysql-db dahinter in die ich Werte eintragen kann (wie Schaltzeiten und max/min-temps des wassers) )

Ursprünglich hatte ich ein php-script dazwischen und habe die Wete mittels http an die DB gesendet und dort auch geholt.
Das war mir viel zu umständlich und nun verwende ich den mysql-connector.
Speicherbedarf so hoffe ich sind mir relativ, da ich dann im Falle eines Falles lieber ein mit noch mehr Flash-Speicher ausgestattes Board nehme.
Mir ist der Komfort es alles in der Arduino-IDE programmieren zu können viel lieber als wenn ich jedesmal ein php-scrtipt anpassen muss und bei Flieskommazahlen in der Übermittlung dann auch noch Probleme bekomme.

Da ich mich an die DHT lib gewöhnt hatte, wundert mich es nun wieso Chuck Bell in seinen Beispielskrpits hier die DHT22 Lib nimmt in der ich wohl umständlich die Wette zerpflücken muss.

Beim DHT sample script da reicht mir das

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();


if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);

}

ich dachte hier eigentlich ich könnte das in variable übergeben und diese dann zum Abspeichern in die DB verwenden.
Das wäre für mich als Newbie noch einigermaßen nachvollziehbar

Funktionen etc. kenne ich noch aus PHP (auch wenn das schon soooo lange her ist).
In meinem Programm und dieser Aquasteuerung muss ich eh zig-funktionen einbauen.

Was aber diese Zusammensetzung des Mysqlstrings bedeutet mit den
"INSERT INTO dht22_test.temp_humid VALUES (NULL, %hi.%01hi, %i.%01i)",
myDHT22.getTemperatureCInt()/10,
abs(myDHT22.getTemperatureCInt()%10),
myDHT22.getHumidityInt()/10,
myDHT22.getHumidityInt()%10);

%hi.%01hi und %i.&01i
das muss ich noch unbedingt mir irgendwo anhand Beispiele rauslesen.
ich kann mir ads nur so erklären
%hi = erster Wert der Zerlegung , aber was und wieso das so gemacht wird.. phooo 100000'ende ?????

ich versuche mal ein script zu schreiben und es dann hier zu posten.

vielleicht hast Du ja schonmal eine Idee wo man das mit den Werteübergaben in Form von % nachvollziehen kann bzw. man es etwas erklärt bekommt.

Grüße Sepp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2014, 16:55
Beitrag #4
RE: Newbie sucht geeignete Literatur ?
Hi,
wie ich schon gesagt habe, Google mal nach "sprintf c++".
Gruß,
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
05.12.2014, 18:52
Beitrag #5
RE: Newbie sucht geeignete Literatur ?
Hallo,

ja habe ich schon gemacht, vor dem zerlegen von Strings hatte ich mich damals bei meinem php-hobby schon gedrückt Sad

habe mir aber gerade mal das Buch

Beginning Sensor Networks with Arduino and Raspberry Pi

aus dem Netz gezogen...
da geht es um diesen mysql_connector und viele andere Dinge, jetzt wird mir schon einiges klarer

Danke für die Tipps nochmals

Grüße Sepp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Absoluter Newbie blebbens 2 605 03.09.2015 22:00
Letzter Beitrag: Home38
  passt das so? anfänger sucht rat Gerüst 2 946 17.11.2014 20:48
Letzter Beitrag: rkuehle
  Einsteiger sucht Rat Dietmar 7 3.045 31.10.2013 23:42
Letzter Beitrag: sven1277

Gehe zu:


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