/* Connecting Everyday Things – Things: Temperatur & Luftfeuchte (DHT22) Der Arduino SENDET alle 2 Sekunden: temp:23.4,feuchte:45.2 und EMPFÄNGT Befehle wie: luefter:180 (0–255, PWM an D9) In "Things": Protokoll "Text (eigener Sketch)", 9600 Baud. Tipp: Bei Verbindungen den Eingangsbereich selbst eintragen, z. B. 20–30 °C. Bibliothek: Werkzeuge → Bibliotheken verwalten → "DHT sensor library" (Adafruit) (die Frage nach "Adafruit Unified Sensor" mit Ja beantworten) Aufbau: DHT22 VCC → 5V DHT22 DATA → D2 (+ 10 kΩ von D2 nach 5V; bei 3-Pin-Modulen schon eingebaut) DHT22 GND → GND LED → D9 → 220 Ω → LED (+), LED (–) → GND Lüfter → nur über Transistor/MOSFET-Modul an D9, nie direkt! */ #include DHT dht(2, DHT22); // Datenpin D2, Sensortyp DHT22 (für DHT11: DHT11) const int LUEFTER = 9; // PWM-Pin für LED oder Lüfter String eingang = ""; void setup() { Serial.begin(9600); // muss zur Baudrate in Things passen dht.begin(); pinMode(LUEFTER, OUTPUT); } void loop() { // --- Messen und senden: alle 2 Sekunden (schneller kann der DHT22 nicht) --- // Kein delay(): so kann der Arduino zwischendurch Befehle annehmen. static unsigned long zuletzt = 0; if (millis() - zuletzt >= 2000) { zuletzt = millis(); float t = dht.readTemperature(); // °C float h = dht.readHumidity(); // % if (!isnan(t) && !isnan(h)) { // nur gültige Messungen senden Serial.print("temp:"); Serial.print(t, 1); Serial.print(",feuchte:"); Serial.println(h, 1); } } // --- Befehle von Things empfangen (eine Zeile pro Befehl) --- while (Serial.available()) { char c = Serial.read(); if (c == '\n') { befehl(eingang); eingang = ""; } else if (c != '\r' && eingang.length() < 40) eingang += c; } } void befehl(String zeile) { int trenner = zeile.indexOf(':'); if (trenner < 1) return; String name = zeile.substring(0, trenner); int wert = zeile.substring(trenner + 1).toInt(); if (name == "luefter") analogWrite(LUEFTER, constrain(wert, 0, 255)); // Eigene Befehle hier ergänzen: else if (name == "summer") { … } }