Arduinoscripte

Code 1: Analoger Sensor und DHT22

Abfrage diverser Sensoren und Upload zum Server

// Netzwerverbindung nach: https://gist.github.com/SergXIIIth/1628715

#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>


// Verbindungsdaten für die Netzwerkkarte
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern!!!!
IPAddress ip(192,168,178,140);  // IP-Adresse ändern!!!!
byte gateway[] = { 192, 168, 178, 1 }; 
byte subnet[] = { 255, 255, 255, 0 };

// Verbindungsdaten des Servers:
IPAddress server(136,243,78,203); // IP-Adresse von www.info-checker.de
EthernetClient client;


// Sachen für den CO2 - Sensor
SoftwareSerial SerialCom (A2,A3); // für CO2-Sensor
byte addArray[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des CO2 Sensors
byte zeroArray[] = { 0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};  // Befehl zum Reset des COS2 Sensors
char dataValue[9];
String dataString = "";
long zeit;
int i=0;

  
// Sachen für den DHT - Sensor (Luftfeuchtigkeit und Temperatur    
#define DHTPIN 2    // Anschluss am digitalen PIN2     
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22
DHT dht(DHTPIN, DHTTYPE);

static char t_str[15]; // zur Umwandlung der Messwerte von float to String
static char h_str[15]; // zur Umwandlung der Messwerte von float to String

// Sachen für den analogen Sensor  
int MessPin = A5;  //analoger Eingang 
int Messwert = 0; 


void connect(){
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
  
  dtostrf(h,4, 2, h_str);  // Wandelt den float Wert h in einen String h_str um.
  dtostrf(t,4, 2, t_str);  // Wandelt den float Wert t in einen String t_str um.
  Messwert = analogRead(MessPin); // Analogen Port auslesen
   delay(1000);
  // Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("DHT22 konnte nicht ausgelesen werden");
  } 
  

  if (client.connect(server, 80)) {  
  // Serial.println("Server verbunden."); 
  
  // vergebe eine eindeutige Beschreibung für deine Messung
    String beschreibung="DEADBEEFED";   
  // beschreibe deine Eingänge
   String info="Analog_Luftfeuchtigkeit_Temperatur(DHT22)";
  // url hier werden die Daten an das PHP-Script übergeben
   String url = "GET /raumklima/MesswertAbspeichern.php?beschreibung="+beschreibung+"&info="+info+"&wert1="+String(Messwert)+"&wert2="+h_str+"&wert3="+t_str+" HTTP/1.1";
    client.println(url);
    client.println("Host: www.info-checker.de");
    client.println("Connection: close"); // beendet die Verbindung
    client.println(); 
    // Serial.println("ok"); // falls Verbindung geklappt hat.
	  } 
	  else {
	    Serial.println("connection failed");
	}
}

void setup() {
	Serial.begin(9600);  
	Serial.print("Setup LAN ... ");
	// give the Ethernet shield a second to initialize:
	delay(1000);
	Ethernet.begin(mac, ip);
	Serial.println("ok");
	delay(1000);       
	connect();  	
}

void loop(){
// die folgenden Zeilen verursachen die Ausgabe der Serverantwort auf dem SeriellenMonitor 
// brauchen wir nur zur Fehlersuche bei Problemen 
// if (client.available()) {
//     char c = client.read();
//    Serial.print(c);
//  }

  // if the server's disconnected, stop the client:  
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    delay(3000);
    connect();
  }	
}
Code 2: amaloger Sensor, DHT22 und Feinstaub (SDS011)

Abfrage vom KTY-81-222; DHT22 und SDS011 und upload zum Server

// Netzwerverbindung nach: https://gist.github.com/SergXIIIth/1628715

#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>

// Sachen für den Feinstaubsensor
#define LEN 9
unsigned char incomingByte = 0;
unsigned char buf[LEN];
int PM2_5Val = 0;
int PM10Val = 0; 



// Verbindungsdaten für die Netzwerkkarte
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern!!!!
IPAddress ip(192,168,178,140);  // IP-Adresse ändern!!!!
byte gateway[] = { 192, 168, 178, 1 }; 
byte subnet[] = { 255, 255, 255, 0 };

// Verbindungsdaten des Servers:
IPAddress server(136,243,78,203); // IP-Adresse von www.info-checker.de
EthernetClient client;


// Sachen für den CO2 - Sensor
SoftwareSerial SerialCom (A2,A3); // für CO2-Sensor
byte addArray[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des CO2 Sensors
byte zeroArray[] = { 0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};  // Befehl zum Reset des COS2 Sensors
char dataValue[9];
String dataString = "";
long zeit;
int i=0;

  
// Sachen für den DHT - Sensor (Luftfeuchtigkeit und Temperatur    
#define DHTPIN 2    // Anschluss am digitalen PIN2     
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22
DHT dht(DHTPIN, DHTTYPE);

static char t_str[15]; // zur Umwandlung der Messwerte von float to String
static char h_str[15]; // zur Umwandlung der Messwerte von float to String

// Sachen für den analogen Sensor  
int MessPin = A5;  //analoger Eingang 
int Messwert = 0; 


void connect(){
  // zuerst den Feinstaubsensor auslesen
   int i;
   unsigned char checksum;
     // send data only when you receive data:
     if (Serial.available() > 0) {
       // read the incoming byte:
       incomingByte = Serial.read();
         if (incomingByte == 0xAA) {
           Serial.readBytes((char *) buf, LEN);
           if ((buf[0] == 0xC0) && (buf[8] == 0xAB)) {
             for (i=1; i<=6; i++) {
               checksum = checksum + buf[i];
             }
             if (checksum == buf[7]) {
                 PM2_5Val=((buf[2]<<8) + buf[1])/10;
                 PM10Val=((buf[4]<<8) + buf[3])/10;
    //             Serial.print("PM2.5: ");
    //             Serial.print(PM2_5Val);
    //             Serial.println(" ug/m3");

   //              Serial.print("PM10 : ");
   //              Serial.print(PM10Val);
   //              Serial.println(" ug/m3");
   //              Serial.println();
             }
             else {
                 Serial.println("checksum Error");
             }
         }
         else {
             Serial.println("frame error");
         }
     }
 } 
  
  // DHT 22 auslesen
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
  
  dtostrf(h,4, 2, h_str);  // Wandelt den float Wert h in einen String h_str um.
  dtostrf(t,4, 2, t_str);  // Wandelt den float Wert t in einen String t_str um.
  Messwert = analogRead(MessPin); // Analogen Port auslesen
   delay(1000);
  // Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
  //if (isnan(t) || isnan(h)) 
  //{
  //  Serial.println("DHT22 konnte nicht ausgelesen werden");
  //} 
  

  if (client.connect(server, 80)) {  
  // Serial.println("Server verbunden."); 
  
  // vergebe eine eindeutige Beschreibung für deine Messung
    String beschreibung="2018_12_12_Test1";   
  // beschreibe deine Eingänge
   String info="Analog_Luftfeuchtigkeit_Temperatur(DHT22)_PM2.5_PM10";
  // url hier werden die Daten an das PHP-Script übergeben
  // hier die Variablen noch abändern, wahrscheinlich für den CO2-Wert und evtl. noch ein Wert
  String wert6 = "..";
  String wert7 = "..";
   String url = "GET /raumklima/MesswertAbspeichern.php?beschreibung="+beschreibung+"&info="+info+"&wert1="+String(Messwert)+"&wert2="+h_str+"&wert3="+t_str+"&wert4="+PM2_5Val+"&wert5="+PM10Val+"&wert6="+wert6+"&wert7="+wert7+" HTTP/1.1";
    client.println(url);
    client.println("Host: www.info-checker.de");
    client.println("Connection: close"); // beendet die Verbindung
    client.println(); 
    // Serial.println("ok"); // falls Verbindung geklappt hat.
	  } 
	  else {
	    Serial.println("connection failed");
	}
}

void setup() {
	Serial.begin(9600);  
	Serial.print("Setup LAN ... ");
	// give the Ethernet shield a second to initialize:
	delay(1000);
	Ethernet.begin(mac, ip);
	Serial.println("ok");
	delay(1000);       
	connect();  	
}

void loop(){
// die folgenden Zeilen verursachen die Ausgabe der Serverantwort auf dem SeriellenMonitor 
// brauchen wir nur zur Fehlersuche bei Problemen 
//if (client.available()) {
//     char c = client.read();
  //  Serial.print(c);
//  }

  // if the server's disconnected, stop the client:  
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    delay(180000); // 180 Sekunden
    connect();
  }	
}
Code 3: Analog; Luftfeuchtigkeit, Temperatur; Feinstaub; CO2 und upload zum Server

Analog; Luftfeuchtigkeit, Temperatur; Feinstaub; CO2 und upload zum Server

// Netzwerverbindung nach: https://gist.github.com/SergXIIIth/1628715
 
#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
 
// Sachen für den Feinstaubsensor
#define LEN 9
unsigned char incomingByte = 0;
unsigned char buf[LEN];
int PM2_5Val = 0;
int PM10Val = 0; 
 
 
 
// Verbindungsdaten für die Netzwerkkarte
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern!!!!
IPAddress ip(192,168,178,140);  // IP-Adresse ändern!!!!
byte gateway[] = { 192, 168, 178, 1 }; 
byte subnet[] = { 255, 255, 255, 0 };
 
// Verbindungsdaten des Servers:
IPAddress server(136,243,78,203); // IP-Adresse von www.info-checker.de
EthernetClient client;
 
 
// Sachen für den CO2 - Sensor
SoftwareSerial SerialCom (A2,A3); // für CO2-Sensor
byte addArray[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des CO2 Sensors
byte zeroArray[] = { 0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};  // Befehl zum Reset des COS2 Sensors
char dataValue[9];
String dataString = "";
long zeit;
int i=0;
 
   
// Sachen für den DHT - Sensor (Luftfeuchtigkeit und Temperatur    
#define DHTPIN 7    // Anschluss am digitalen PIN2     
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22
DHT dht(DHTPIN, DHTTYPE);
 
static char t_str[15]; // zur Umwandlung der Messwerte von float to String
static char h_str[15]; // zur Umwandlung der Messwerte von float to String
 
// Sachen für den analogen Sensor  
int MessPin = A0;  //analoger Eingang 
int Messwert = 0; 
 
 
void connect(){
  delay(1000);
  // zuerst den Feinstaubsensor auslesen
   int i;
   unsigned char checksum;
     // send data only when you receive data:
     if (Serial.available() > 0) {
       // read the incoming byte:
       incomingByte = Serial.read();
         if (incomingByte == 0xAA) {
           Serial.readBytes((char *) buf, LEN);
           if ((buf[0] == 0xC0) && (buf[8] == 0xAB)) {
             for (i=1; i<=6; i++) {
               checksum = checksum + buf[i];
             }
             if (checksum == buf[7]) {
                 PM2_5Val=((buf[2]<<8) + buf[1])/10;
                 PM10Val=((buf[4]<<8) + buf[3])/10;
                 Serial.print("PM2.5: ");
                 Serial.print(PM2_5Val);
                 Serial.println(" ug/m3");
 
                 Serial.print("PM10 : ");
                 Serial.print(PM10Val);
                 Serial.println(" ug/m3");
                 Serial.println();
             }
             else {
                 Serial.println("checksum Error");
             }
         }
         else {
             Serial.println("frame error");
         }
     }
 } 
   delay(1000);
  // DHT 22 auslesen
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
   
  dtostrf(h,4, 2, h_str);  // Wandelt den float Wert h in einen String h_str um.
  dtostrf(t,4, 2, t_str);  // Wandelt den float Wert t in einen String t_str um.
  Serial.print(h_str);
  Serial.println(" %H20");
  Serial.print(t_str);
  Serial.println(" °C");

 
  // Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("DHT22 konnte nicht ausgelesen werden");
  } 
 // ANlog auslesen
  Messwert = analogRead(MessPin); // Analogen Port auslesen
  delay(1000);
 
   
 // CO2 auslesen
  SerialCom.write(addArray, 9);
  SerialCom.readBytes(dataValue, 9);
  int resHigh = (int) dataValue[2];
  int resLow  = (int) dataValue[3];
  int pulse = (256*resHigh)+resLow;
  dataString = String(pulse);
  Serial.print(dataString);
  Serial.println(" CO2 ppm");
  //
  delay(1000); 
  if (client.connect(server, 80)) {  
   Serial.println("Server verbunden."); 
   
  // vergebe eine eindeutige Beschreibung für deine Messung
    String beschreibung="2018_12_29_Test1";   
  // beschreibe deine Eingänge
   String info="Analog_Luftfeuchtigkeit_Temperatur(DHT22)_PM2.5_PM10";
  // url hier werden die Daten an das PHP-Script übergeben
  // hier die Variablen noch abändern, wahrscheinlich für den CO2-Wert und evtl. noch ein Wert
  String wert6 = dataString;
  String wert7 = "..";
   String url = "GET /raumklima/MesswertAbspeichern.php?beschreibung="+beschreibung+"&info="+info+"&wert1="+String(Messwert)+"&wert2="+h_str+"&wert3="+t_str+"&wert4="+PM2_5Val+"&wert5="+PM10Val+"&wert6="+wert6+"&wert7="+wert7+" HTTP/1.1";
    client.println(url);
    client.println("Host: www.info-checker.de");
    client.println("Connection: close"); // beendet die Verbindung
    client.println(); 
     Serial.println("Verbindung zum Server ok"); // falls Verbindung geklappt hat.
      } 
      else {
        Serial.println("connection failed");
    }
}
 
void setup() {
    Serial.begin(9600);  
    Serial.print("Setup LAN ... ");
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Ethernet.begin(mac, ip); 
    Serial.println("Netzwerk ok");
    delay(1000);
    SerialCom.begin(9600);
    delay(1000);
    connect();      
}
 
void loop(){
// die folgenden Zeilen verursachen die Ausgabe der Serverantwort auf dem SeriellenMonitor 
// brauchen wir nur zur Fehlersuche bei Problemen 
if (client.available()) {
     char c = client.read();
     Serial.print(c);
  }
 
  // if the server's disconnected, stop the client:  
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    delay(120000); // 120 Sekunden
    connect();
  } 
}

Aufgaben

  1. Markiere alle Datentypen. Recherchiere im Internet, welchen Bereich diese abdecken.
  2. Markiere alle Stellen, die für die Netzwerkverbindung notwendig sind.
  3. Welche Bedeutung hat Serial.println()? Können wir darauf verzichten, oder sind diese dennoch sinnvoll? Streiche alle Stellen an, welche für Serial.println() notwendig sind.
  4. In welcher Variablen wird die Luftfeuchtigkeit abgespeichert? Verfolge im Skript den Weg dieser Variablen vom „Einlesen“ bis zum „Wegschicken“ an den Server.
  5. Welche Teile sind individuell für deine Messung und sollten bzw. müssen verändert werden?
  6. Vergleiche das Script mit dem Script, welches zum Auslesen des CO2- Sensors benutzt wird. Wo, wann und wie wird der CO2-Messwert gelesen. In welcher Variablen wird er abgespeichert?   

PHP - Skripte

PHP-Script zur Messwertspeicherung

PHP - Skript zum Einlesen

<?php

$pdo = new PDO('mysql:host=localhost;dbname=**DB_Name*', '**Username**', '**Passwort***');

/* Verbindungsdaten
Host: ***
Datenbankname: ***
User: ***
Passwort: ***
*/

// GET Werte einlesen
if(isset($_GET['wert1'])) {$wert1 = $_GET['wert1'];
} else {$wert1 ="-------";}

if(isset($_GET['wert2'])) {$wert2 = $_GET['wert2'];
} else {$wert2 ="-------";}

if(isset($_GET['wert3'])) {$wert3 = $_GET['wert3'];
} else {$wert3 ="-------";}

if(isset($_GET['wert4'])) {$wert4 = $_GET['wert4'];
} else {$wert4 ="-------";}

if(isset($_GET['wert5'])) {$wert5 = $_GET['wert5'];
} else {$wert5 ="-------";}

if(isset($_GET['wert6'])) {$wert6 = $_GET['wert6'];
} else {$wert6 ="-------";}

if(isset($_GET['wert7'])) {$wert7 = $_GET['wert7'];
} else {$wert7 ="-------";}

if(isset($_GET['beschreibung'])) {$beschreibung = $_GET['beschreibung'];
} else {$beschreibung ="-------";}

if(isset($_GET['info'])) {$info = $_GET['info'];
} else {$info ="-------";}
    


// Eintrag in die Datenbank //   
$sql ="INSERT INTO `1` (`id`, `wert1`, `wert2`, `wert3`, `wert4`, `wert5`, `wert6`, `wert7`, `beschreibung`, `info`, `zeit`) VALUES (NULL, '".$wert1."', '".$wert2."', '".$wert3."', '".$wert4."', '".$wert5."', '".$wert6."', '".$wert7."', '".$beschreibung."', '".$info."', CURRENT_TIMESTAMP);";
$pdo->query($sql);

?>

<!DOCTYPE html>
<html lang="de">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
Werte in Datenbank eingetragen.
</body>
</html>
PHP-Script zur tabellarischen Messwertdarstellung

PHP - Skript zur Darstellung

<?php
$pdo = new PDO('mysql:host=localhost;dbname=***', '***', '***');
/* Verbindungsdaten
Host: localhost:3306
Datenbankname: ***
User: ***
Passwort: ***
*/


// GET Werte einlesen
if(isset($_GET['messung'])) {$beschreibung = $_GET['messung'];
	} else {$beschreibung ="";}
?>

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta http-equiv="expires" content="0">
     <meta http-equiv="refresh" content="30">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Raumklima</title>

	<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
    <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css" />

    <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML'></script>
  
<style> <!--eigene Styles: besser in extra Datei / Hier nur zum Test--> 
    h1 { 
       background-color: green;
       color: white;
    }
    p {
    	text-align: left; 
    	color: black;
    }
     body {
	background-color: #CCC;
    }
    .col-sm-8{
	background-color: red;
    }
	
	
	a {text-decoration: none;}
	
		
    </style>
  </head>
 
  <body>
  <!-- Navigation -->
 
<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>                        
      </button>
      <a class="navbar-brand zumachen" href="#">Raumklima</a>
    </div>
    <div class="collapse navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li><a href="#" class="zumachen">Messwerte</a></li>
  
        
		  
		  <li class="dropdown">
          <a class="dropdown-toggle" data-toggle="dropdown" href="#">Sensoren<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="index.php#CO2" class="zumachen">CO2-Sensor</a></li>
            <li><a href="index.php#Luftfeuchtigekeit" class="zumachen">Luftfeuchtigkeit </a></li>
            <li><a href="index.php#Feinstaub" class="zumachen">Feinstaub</a></li>
			    <li><a href="index.php#Temperatur" class="zumachen">Temperatur</a></li>
          </ul>
        </li>
		  
	    <li><a href="#netzwerk" class="zumachen">Netzwerktechnik</a></li>
        <li class="dropdown">
          <a class="dropdown-toggle" data-toggle="dropdown" href="#">Internettechnik<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="index.php#bootstrap" class="zumachen">HTML & Bootstrap</a></li>
			  <li><a href="index.php#bootstrap" class="zumachen">SVG</a></li>
            <li><a href="index.php#javscript" class="zumachen">Javascript </a></li>
            <li><a href="index.php#php-mysql" class="zumachen">PHP und mySQL</a></li>
          </ul>
        </li>

      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#" class="zumachen"><span class="glyphicon glyphicon-user"></span> Kontakt</a></li>
        <li><a href="#" class="zumachen"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
      </ul>
    </div>
  </div>
</nav>
 
   
 
<!--  START -->
<div class="container">        
		<!--Überschrift: #Anker -->
		<h2>Messwerte:</h2>
		
<!-- Beginn des Formulars -->
<div class="col-xs-12 col-sm-6 col-md-6">
<form name="Messung"   method="GET"> 	
	
<div class="form-group">

<select class="form-control" id="messung" name ="messung">	
	<?php
		$sql ="SELECT DISTINCT `beschreibung` FROM `1` ";
			foreach ($pdo->query($sql) as $row) {
				echo"<option value=\"".$row['beschreibung']."\">".$row['beschreibung']."</option>";
			}
		?>
	
</select>
</div><!--Ende der FormGroup  -->
	<!-- beide Buttons -->
<button type="reset" class="btn col-4  btn-primary">Zurücksetzen</button>
<button type="submit" class="btn col-4 btn-primary">Absenden</button>
</form>
</div>
	<!-- Ende des Formulars-->
	
	

<?php
// schon oben vorhanden : $pdo = new PDO('mysql:host=localhost;dbname=***', '***', '**');


if($beschreibung ==""){
$sql= "SELECT * FROM `1` ORDER BY `id` DESC LIMIT 1000";
}
else {
$sql= "SELECT * FROM `1` where `beschreibung`='".$beschreibung."' ORDER BY `id` DESC LIMIT 1000";
}
echo "<table class=\"table table-striped table-bordered\">";
echo "<tr>";
 echo " <th>id</th><th>Wert 1 </th><th> Wert 2 </th><th> Wert 3 </th><th> Wert 4 </th><th> Wert 5 </th><th> Wert 6 </th><th> Wert 7 </th><th> Beschreibung </th><th> Info</th><th> Zeit</th>";
 echo "</tr>";
foreach ($pdo->query($sql) as $row) {
   echo "<tr>";	
 echo "<td>".$row['id']."</td><td>".$row['wert1']."</td><td>".$row['wert2']."</td><td>".$row['wert3']."</td><td>".$row['wert4']."</td><td>".$row['wert5']."</td><td>".$row['wert6']."</td><td>".$row['wert7']."</td><td>".$row['beschreibung']."</td><td>".$row['info']."</td><td>".$row['zeit']."</td>";
	echo "</tr>";
}
echo "</table>";



?>		

	 
	  
      	  
</div> <!-- ende des Containers der Panel Group-->

<style>
    .faqHeader {
        font-size: 27px;
        margin: 20px;
    }

    .panel-heading [data-toggle="collapse"]:after {
        font-family: 'Glyphicons Halflings';
        content: "\e072"; /* "play" icon */
        float: right;
        color: #F58723;
        font-size: 18px;
        line-height: 22px;
        /* rotate "play" icon from > (right arrow) to down arrow */
        -webkit-transform: rotate(-90deg);
        -moz-transform: rotate(-90deg);
        -ms-transform: rotate(-90deg);
        -o-transform: rotate(-90deg);
        transform: rotate(-90deg);
    }

    .panel-heading [data-toggle="collapse"].collapsed:after {
        /* rotate "play" icon from > (right arrow) to ^ (up arrow) */
        -webkit-transform: rotate(90deg);
        -moz-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        -o-transform: rotate(90deg);
        transform: rotate(90deg);
        color: #454444;
    }
</style>

<script>
$('.zumachen' ).click(function() {
        $('#myNavbar').collapse('hide');
    });
</script>
 
 
 </body></html>

Sensoren

CO2-Sensor

Tutorial

Anleitung, wie man den CO2 - Sensor über UART anschließen kann:

http://domoticx.com/arduino-co2-sensor-mh-z14/

CO2-Messung und upload zum Server

/*
  Vorlage: Web client 
 */
// und: http://domoticx.com/arduino-co2-sensor-mh-z14/
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
SoftwareSerial SerialCom (A2,A3);
byte addArray[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des Sensors
byte zeroArray[] = { 0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};  // Befehl zum Reset des Sensors
char dataValue[9];
String dataString = "";
long zeit;
int i=0;
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern
//byte server[] = { 192, 168, 178, 34 }; // IP -  Adresse des Servers 
char server[] = "www.roboter-im-unterricht.de";    // name address for Google (using DNS)
 
IPAddress ip(192,168,178,100);      //  IP - Adresse des Arduino // wird nur benötigt, wenn DHCP nicht geht.
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetClient client;
 
void setup() {
  Serial.begin(9600);
  SerialCom.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("MH-Z14 C02 Sensor Test Code");
  Serial.println("------------------------------------");
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip, gateway, subnet); 
    Serial.println("connecting...");    
  }
  delay(1000); 
  SerialCom.write(zeroArray, 9);
  delay(1000); 
}
 
void loop(){
  delay(60000); // Abfrage alle 60 Sekunden 
  // CO2 Abfragen
  SerialCom.write(addArray, 9);
  SerialCom.readBytes(dataValue, 9);
  int resHigh = (int) dataValue[2];
  int resLow  = (int) dataValue[3];
  int pulse = (256*resHigh)+resLow;
  zeit = millis();  // Zeit in Millisekunden nach Start   
  Serial.println("Zeit: "+ String(zeit)+" Messwert: " +String(pulse)); 
  if (client.connect(server, 80)) {
    Serial.println("Server verbunden.");   
    String url = "GET /Projekt/MesswertAbspeichern.php?zeit="+String(zeit)+"&messwert="+String(pulse)+" HTTP/1.1";
    client.println(url);
    client.println("Host: www.roboter-im-unterricht.de");
    client.println("Connection: close");
    client.println(); 
  } 
  else {
    Serial.println("Aufruf hat nicht geklappt.");
  }
  client.stop();
  client.flush();
}
DHT22-Abfrage

DHT 22 Luftfeuchtigkeit und Temperatur

#include "DHT.h"
 
#define DHTPIN 2     
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22
 
DHT dht(DHTPIN, DHTTYPE);
 
void setup() 
{
  Serial.begin(9600); 
  Serial.println("DHT22 - Test!");
 
  dht.begin();
}
 
void loop() 
{
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
   delay(1000);
  // Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("DHT22 konnte nicht ausgelesen werden");
  } 
  else
  {
    Serial.print("Luftfeuchte: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatur: "); 
    Serial.print(t);
    Serial.println(" C");
  }
}
Feinstaubsensor PM Sensor SDS011

Feinstaubsensor PM Sensor SDS011

http://opengeiger.de/Feinstaub/FeinstaubDatenLogger.pdf

Leider ist da ein kleiner Fehler im Script (siehe oben)

Wie die Abfrage (mit dem UART- Protokoll) funktioniert wird im Datenblatt des Sensors erklärt.

Über Sinn und Unsinn einen billigen Sensor zu verwenden hat sich das das Landesamt für Umwelt, Messungen und Naturschutz Baden-Württemberg Gedanken gemacht: Messungen mit dem Feinstaubsensor SDS011 Ein Vergleich mit einem eignungsgeprüften Feinstaubanalysator 

 

HTML und SVG Darstellung

Darstellung mit HTML und SVG

SVG Grafiken

Mit Hilfe von SVG  kann man die Messwerte darstellen. 

Ein Tutorial findet man unter https://www.w3schools.com/graphics/svg_intro.asp

oder bei http://thenewcode.com/1173/Web-Developer-Reading-List-SVG

HTML

<html>

<head>
</head>
<body>
<h2> Messwerte</h2>
<img width="600" height="600" src="bild.svg">
</body>
</html>

SVG

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
 
 
 <!-- horizontal -->
    <line x1="0" y1="0" x2="600" y2="0" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="50" x2="600" y2="50" style="stroke:black;stroke-width:1;" />
    <line x1="0" y1="100" x2="600" y2="100" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="150" x2="600" y2="150" style="stroke:black;stroke-width:1;" />
    <line x1="0" y1="200" x2="600" y2="200" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="250" x2="600" y2="250" style="stroke:black;stroke-width:1;" />
    <line x1="0" y1="300" x2="600" y2="300" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="350" x2="600" y2="350" style="stroke:black;stroke-width:1;" />
    <line x1="0" y1="400" x2="600" y2="400" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="450" x2="600" y2="450" style="stroke:black;stroke-width:1;" />
    <line x1="0" y1="500" x2="600" y2="500" style="stroke:black;stroke-width:2;" />
    <line x1="0" y1="550" x2="600" y2="550" style="stroke:black;stroke-width:1;" />
	<line x1="0" y1="600" x2="600" y2="600" style="stroke:black;stroke-width:1;" />
 
<!-- vertikal--> 
   <line x1="0" y1="0" x2="0" y2="600" style="stroke:black;stroke-width:1;" />
    <line x1="100" y1="0" x2="100" y2="600" style="stroke:black;stroke-width:1;" />
   <line x1="200" y1="0" x2="200" y2="600" style="stroke:black;stroke-width:1;" />
   <line x1="300" y1="0" x2="300" y2="600" style="stroke:black;stroke-width:1;" />
   <line x1="400" y1="0" x2="400" y2="600" style="stroke:black;stroke-width:1;" />
   <line x1="500" y1="0" x2="500" y2="600" style="stroke:black;stroke-width:1;" />
   <line x1="600" y1="0" x2="600" y2="600" style="stroke:black;stroke-width:1;" />
   
   
  
   <polyline  points="0,0 10,10 20,40 30,50 40,62 50,70 60,80 400,500 450,10 600,600"
           style="stroke:black;stroke-width:3;fill:none" />
	
		
  
</svg>