/*******************************************************
* Web-Telemetrie www.Telmetrie.Center
*
* 20.09.2016 DL8MA
*
* - Arudino
* - Ethernet-Shield an LAN mit Internetzugang angeschlossen
* - Dallas (Maxim) Temperatursensoren DS 18x20 an 1-Wire-Bus
*
* Visiualisierung der Messdaten: http://telemetrie.center/messwerte.php?liste&c=testkanal
*
*/
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
int zaehler = 0;
int anzahlSensoren = 0;
int gestartet = 0;
String str = "";
String parameter="";
int maxSensorAnzahl = 5; // wird momentan noch auf Telemetrie.Center auf 5 begrenzt
// Telemetrie.Center
String url = "www.telemetrie.center";
char server[] = "www.Telemetrie.center";
String kanal = "Testkanal"; // Kanal-Name muss auf Telemetrie.Center eingerichtet sein
String token = "tc-token"; // Token muss auf Telemetrie.Center eingerichtet sein
unsigned long zeitStempel = 0;
unsigned long zeitSpanne = 60000; // zeitlicher Abstand zwischen den Messungen (in ms)
// sollte > 15000 ms sein
// 1-Wire:
#define ONE_WIRE_BUS 3 // Port für 1-Wire-Bus definieren
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */
// Ethernet:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 177);
EthernetClient client;
void setup() {
Serial.begin(9600);
sensors.begin();
anzahlSensoren = dallasSensors(); // Anzahl der Sensoren am 1-Wire-Bus holen
sensors.setResolution(TEMP_12_BIT);
}
void loop() {
if( ( ( millis() - zeitStempel ) >= zeitSpanne ) or gestartet == 0 ) { // für Zeitsteuerung
gestartet = 1;
zeitStempel = millis();
int i;
parameter = "";
for( i = 0; i < anzahlSensoren; i++ ) { // Schleife über die Sensoren
sensors.requestTemperatures();
Serial.print( "Sensor " ); // Temperaturwert holen +
Serial.print( i ); // auf seriellem Monitor ausgeben
Serial.print( " " );
Serial.print(sensors.getTempCByIndex( i ) );
Serial.print(" Grad Celsius");
Serial.println();
parameter += "&v" + String( i + 1 ) + "=" + String( sensors.getTempCByIndex( i ) ); // Parameterstring für Telemetrie.Center
}
if (Ethernet.begin(mac) == 0) { // Webverbindung aufbauen
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 80)) {
Serial.println("connected");
str = "GET /api.php?u=" + kanal + "&t=" + token + parameter + " HTTP/1.1";
client.println( str );
Serial.println( str );
str = "Host:" + url;
client.println( str );
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
if (client.available()) {
char c = client.read();
Serial.print(c);
}
Serial.println("disconnecting.");
client.stop();
Serial.println();
}
}
/********************************************************************
* Anzahl der Sensoren am 1-Wire-Bus ermitteln
*
* 20.09.2016 DL8MA
*/
int dallasSensors(void) {
byte i, zaehler=0;
byte addr[8];
while(ourWire.search(addr)) {
zaehler++;
if ( OneWire::crc8( addr, 7) != addr[7]) {
return( -1 );
}
}
ourWire.reset_search();
if( zaehler > maxSensorAnzahl )
zaehler = 5;
return( zaehler );
}