Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
elektronik:dht11_sensor_mit_arduino_ethernet_shield_und_thingspeak [2016/02/08 22:31] – Kapitel über ThingSpeak octoateelektronik:dht11_sensor_mit_arduino_ethernet_shield_und_thingspeak [2016/02/12 22:13] – [Software] Satzbau octoate
Zeile 1: Zeile 1:
 ====== DHT11 Sensor mit Arduino Ethernet Shield und ThingSpeak ====== ====== DHT11 Sensor mit Arduino Ethernet Shield und ThingSpeak ======
  
-Da mein Rondostat HR20E, ein automatisches Heizkörperthermostat, unter der Woche einen Ausfall hatte und abends einen Raum mit sommerlichen 30°C vorgefunden habe, habe ich mir ein kleines Projekt zusammengestellt, mit dem ich die aktuellen Messwerte ins Internet stellen kann, um zu kontrollieren, ob das Thermostat mal wieder spinnt. Die Wahl für den Datendienst fiel relativ schnell auf [[http://www.thingspeak.com|ThingSpeak]], da hier eine gute Arduino Unterstützung vorhanden ist.+Da mein Rondostat HR20E, ein automatisches Heizkörperthermostat, unter der Woche einen Ausfall hatte und ich abends einen Raum mit sommerlichen 30°C vorgefunden habe, habe ich mir ein kleines Projekt zusammengestellt, mit dem ich die aktuellen Messwerte ins Internet stellen kann, um zu kontrollieren, ob das Thermostat mal wieder spinnt. Die Wahl für den Datendienst fiel relativ schnell auf [[http://www.thingspeak.com|ThingSpeak]], da hier eine gute Arduino Unterstützung vorhanden ist.
  
 In meiner Hardware-Grabbelkiste habe ich außerdem einen DHT11 Temperatur- und Luftfeuchtigkeitssensor gefunden, der mit 5V betrieben wird und damit direkt an den Arduino angeschlossen werden kann, was den Aufbau natürlich vereinfacht. Ein Arduino Ethernet Shield stellt die Verbindung zum Internet her. In meiner Hardware-Grabbelkiste habe ich außerdem einen DHT11 Temperatur- und Luftfeuchtigkeitssensor gefunden, der mit 5V betrieben wird und damit direkt an den Arduino angeschlossen werden kann, was den Aufbau natürlich vereinfacht. Ein Arduino Ethernet Shield stellt die Verbindung zum Internet her.
 +
 +Das Ergebnis könnte auf der ThingSpeak Seite dann bspw. so aussehen:
 +
 +{{:elektronik:dht11_mit_thingspeak.png?600|}}
  
 ===== Hardware ===== ===== Hardware =====
-Die Hardware ist aus den bereits genannten Gründen nichts besonderes. Das Arduino Ethernet Shield wird einfach nur auf den Arduino UNO aufgesteckt und das war es schon. Den DHT11 Sensor verbindet man dann noch mit +5V, GND und - in meinem Fall - mit Pin 7 des Ethernet Shields. Die Folgende Fritzing Skizze zeigt das ganz schön.+Die Hardware ist aus den bereits genannten Gründen nichts besonderes. Das Arduino Ethernet Shield wird einfach nur auf den Arduino UNO aufgesteckt und das war es schon. Den DHT11 Sensor verbindet man dann noch mit +5V, GND und - in meinem Fall - mit Pin 7 des Ethernet Shields. Die folgende Fritzing Skizze zeigt das ganz schön.
  
-{{:elektronik:arduino_dht11_mit_thingspeak.png|}}+{{:elektronik:arduino_dht11_mit_thingspeak.png?600|}}
  
 ===== Software ===== ===== Software =====
-Die Software basiert im Prinzip aus drei Komponenten:+Die Software besteht im Prinzip aus drei Teilen:
   * Ethernet Shield initialisieren   * Ethernet Shield initialisieren
   * DHT11 Sensor ansprechen   * DHT11 Sensor ansprechen
Zeile 76: Zeile 80:
 Die ThingSpeak Bibliothek kann man glücklicherweise über "Sketch-Bibliothek einbinden" in die Umgebung integrieren. Dazu einfach den entsprechenden Menüpunkt in der Arduino IDE aufrufen und "Bibliotheken verwalten" aufrufen. In dem "Bibliotheksverwalter" Fenster kann man in der Suche dann "ThingSpeak" eingeben und die entsprechende Bibliothek dann installieren. Die ThingSpeak Bibliothek kann man glücklicherweise über "Sketch-Bibliothek einbinden" in die Umgebung integrieren. Dazu einfach den entsprechenden Menüpunkt in der Arduino IDE aufrufen und "Bibliotheken verwalten" aufrufen. In dem "Bibliotheksverwalter" Fenster kann man in der Suche dann "ThingSpeak" eingeben und die entsprechende Bibliothek dann installieren.
  
 +{{:elektronik:thingspeak_bibliothek_in_arduino_ide_einbinden.png|}}
  
 Um die Bibliothek im Sketch verwenden zu können, muss auch hier ein Include hinzugefügt werden: Um die Bibliothek im Sketch verwenden zu können, muss auch hier ein Include hinzugefügt werden:
Zeile 103: Zeile 108:
 } }
 </code> </code>
 +
 +
 +===== Der komplette Sketch =====
 +
 +Das war es dann auch schon. Abschließend folgt noch der komplette Sketch, der neben der oben beschriebenen Programmlogik zusätzlich auch noch eine halbwegs vernünftige Debugausgabe über das serielle Interface des Arduinos enthält. Evtl. hilft euch das ja bei einem eigenen kleinen Projekt mit der ThingSpeak API weiter.
 +
 +<code c>
 +#include <dht.h>
 +#include "ThingSpeak.h"
 +
 +// Use wired ethernet shield
 +#include <SPI.h>
 +#include <Ethernet.h>
 +
 +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
 +IPAddress ip(192, 168, 200, 200);
 +IPAddress myDns(192, 168, 200, 1);
 +IPAddress gateway(192, 168, 200, 1);
 +IPAddress subnet(255, 255, 255, 0);
 +EthernetClient client;
 +
 +unsigned long myChannelNumber = 12345;
 +const char * myWriteAPIKey = "XXYYXXYYXXYYXXYY";
 +
 +// use DHT library
 +#define DHT11_PIN 7
 +
 +dht DHT;
 +
 +void setup() {
 +  Serial.begin(115200);
 +  Serial.println("DHT TEST PROGRAM ");
 +  Serial.print("LIBRARY VERSION: ");
 +  Serial.println(DHT_LIB_VERSION);
 +  Serial.println();
 +  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
 +
 +  // initialize Ethernet Shield
 +  Ethernet.begin(mac, ip, myDns, gateway, subnet);
 +
 +  // initialize ThingSpeak client
 +  ThingSpeak.begin(client);
 +}
 +
 +void loop() {
 +  // READ DATA
 +  Serial.print("DHT11, \t");
 +  int chk = DHT.read11(DHT11_PIN);
 +  switch (chk)
 +  {
 +    case DHTLIB_OK:  
 +    Serial.print("OK,\t"); 
 +    break;
 +    case DHTLIB_ERROR_CHECKSUM: 
 +    Serial.print("Checksum error,\t"); 
 +    break;
 +    case DHTLIB_ERROR_TIMEOUT: 
 +    Serial.print("Time out error,\t"); 
 +    break;
 +    default: 
 +    Serial.print("Unknown error,\t"); 
 +    break;
 +  }
 +  
 +  float humidity = DHT.humidity;
 +  float temperature = DHT.temperature;
 +  
 +  // DISPLAY DATA
 +  Serial.print(humidity,1);
 +  Serial.print(",\t");
 +  Serial.println(temperature,1);
 +
 +  // publish to ThingSpeak
 +  // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
 +  // pieces of information in a channel.  Here, we write to field 1.
 +
 +  // only publish if everything was ok
 +  if (chk == DHTLIB_OK)
 +  {
 +    ThingSpeak.setField(1,temperature);
 +    ThingSpeak.setField(2,humidity);
 +    ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
 +    delay(20000); // ThingSpeak will only accept updates every 15 seconds.
 +  }
 +  else
 +  {
 +    delay(1000);
 +  }
 +}
 +</code>
 +
elektronik/dht11_sensor_mit_arduino_ethernet_shield_und_thingspeak.txt · Zuletzt geändert: 2016/02/12 22:17 von octoate
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0