Zweimal DHT22 Sensor verwenden?
Hallo,
ich baue gerade eine Art "Wetterstation" mit meinem Arduino dazu verwende ich zweimal den DHT22 um die Temperatur und Luftfeuchtigkeit innen und außen zu messen. Ich habe nun das Problem, dass ich einen Befehl (Fett gedruckt) nicht einfach doppelt verwenden kann. Was macht dieser Befehl ? Wie kann ich einfach beide Sensoren verwenden?
Danke im Voraus!
Code:
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
int pinDHT22in = 8;
int pinDHT22out = 9;
int Sensorwert;
const uint8_t rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
SimpleDHT22 dht22(pinDHT22in);
void setup(){
Serial.begin(115200); // Damit unsere Werte später im seriellen Monitor angezeigt werden können, legen wir zuerst die Baudrate 9600 fest.
pinMode( 0 , INPUT); // Pin 0 dient nun als Input
lcd.begin(20, 4); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 4 Zeilen.
lcd.clear();
}
void loop()
{
Sensorwert = analogRead(0); // Zuerst wird der Wert (gas) am Pin A0 ausgelesen...
Serial.print("Der erfasste Wert lautet : ");
Serial.println(Sensorwert, DEC); //... und anschließend im seriellen Monitor als Dezimalzahl ausgegeben.
Serial.println();
lcd.setCursor(0, 0);
lcd.print("Messwert (gas): ");
lcd.print(Sensorwert);
delay(1000);
float temperature = 0;
float humidity = 0;
int err = SimpleDHTErrSuccess;
if((err=dht22.read2(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess){
lcd.setCursor(0, 1);
lcd.print("Read DHT22 failed, err=");
lcd.print(err);
delay(2000);
return;
}
lcd.setCursor(0, 1);
lcd.print("Temp(in): ");
lcd.print((float)temperature);
lcd.print(" *C");
lcd.setCursor(0, 2);
lcd.print("Luftfeuchte: ");
lcd.print((float)humidity);
lcd.print("%");
delay(2500); // DHT22 sampling rate is 0.5HZ.
delay(1000);
}
3 Antworten
gibt sogar ein Example für Zwei Sensoren..
https://github.com/winlinvip/SimpleDHT/blob/master/examples/TwoSensorsDefault/TwoSensorsDefault.ino
Musst halt umschreiben für DHT22
Jeder Sensor wurde ja an einen unterschiedlichen Pin angeschlossen, daher musst du auch jedes mal einen anderen Pin anschließen.
Weshalb sind dort unterschiedliche in und out-Pins angegeben? Der Sensor hat doch nur einen Datenpin, +3,3V und GND. Sind das die Pins für den Außen- und dem Innensensor?
Du musst jeden Sensor einzeln mit seinem entsprechenden Pin am Anfang initialisieren. (Wahrscheinlich mit: SimpleDHT22 dht22a(pinDHT22in); und SimpleDHT22 dht22b(pinDHT22out);)
dht22a.read2(&temperatureA, &humidityA, NULL)
dht22b.read2(&temperatureB, &humidityB, NULL)
Weshalb heißt die Funktion "read2"?
Kauf dir lieber die HTU21D (werden über I2C angesprochen), die habe ich bei Aliexpress ab 1€ bekommen und sie sind viel genauer als die DHT22 Sensoren. Man kann auch 4 Adressen einstellen um mehrere Sensoren an den I2C Bus anschließen zu können.
Hallo,
eigentlich musst du nichts anderes machen wie ALLE code-zeilen (incl. variablen, excl. include) wo dht22-lib benutzt wird jeweils für innen und für aussen schreiben.
EIn Beispiel für Trennung zwischen in und out =
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
int pinDHT22i = 8;
int pinDHT22o = 9;
int Sensorwert;
const uint8_t rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
SimpleDHT22 dht22i(pinDHT22i);
SimpleDHT22 dht22o(pinDHT22o);
... irgendwo im loop:
float tempi = 0;
float humi = 0;
float tempo = 0;
float humo = 0;