Go Down

Topic: Mehrere DHT an einem Arduino (Read 21818 times) previous topic - next topic

Der_Arne

Hallo mal wieder

ich habe zwischenzeitlich endlich das Display erhalten und bin etwas am experimentieren damit.

Den Ursprünglichen Sketch habe ich nochmal neu geschrieben inklusive der Änderungen mit den DHTs.

Eigentlich sollte es nun kein Problem sein mit dem Auslesen der Werten und anzeigen über den Serial Monitor hat es auf funktioniert.
Beim der Kompilierung gab es jedenfalls keine Fehlermeldung, das Display regiert aber leider nicht.....
Mit dem BeispielSketch reagiert es also sollte es keine Probleme mit der Verkabelung sein.

Hier mein Sketch



Code: [Select]
// 4 DHT22 an einem Mega 2560 angezeit auf 1.8 Zoll TFT Adafruit_ST7735

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>    // Adafruit Grafik-Bibliothek
#include <Adafruit_ST7735.h>
#include <dht.h>

//DHT #X an Pin X
#define DHT1_PIN 2
#define DHT2_PIN 3
#define DHT3_PIN 4
#define DHT4_PIN 5

//TFT Display
#define sclk 13    //PIN 9 vom Display
#define mosi 11    //PIN 8
#define cs   10    //PIN 10
#define dc   9     //PIN 7
#define rst  8     //PIN RESET

// Setup der Bibliothek (kein SPI)
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst, mosi, sclk);

// Initialisieren der DHTs
dht DHT1;   
dht DHT2;
dht DHT3;
dht DHT4;


void setup (void) {

  tft.initR(INITR_BLACKTAB);  // TFT-Chip initialisieren

}
void loop () {

  tft.fillScreen(ST7735_RED);     //Bildschirm "schwarz" zeichnen
  tft.setTextSize(2);             // Schriftgroesse
  tft.setTextWrap(true);          // Text wird an Zeilenende umgebrochen
  tft.setCursor (24,4);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  delay(1000);                      // eine Sekunde warten
  DHT1.read22(DHT1_PIN);            //DHT1 wird ausgelesen
  tft.print(DHT1.humidity, 1);      // DHT1 Luftfeuchte wird ausgelesen und angezeigt
  tft.print ("%      ");            // %-Zeichen plus Platzhalter
  tft.print(DHT1.temperature, 1);  // DHT1 Temp wird ausgelesen und angezeigt
  tft.print("C ");                  // C wird angezeigt

  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (44,4);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_BLACK);  // Textfarbe 
  DHT2.read22(DHT2_PIN);            //DHT2 wird ausgelesen
  tft.print(DHT2.humidity, 1);      // DHT2 Luftfeuchte wird ausgelesen und angezeigt
  tft.print ("%      ");            // %-Zeichen plus Platzhalter
  tft.print(DHT2.temperature, 1);  // DHT2 Temp wird ausgelesen und angezeigt
  tft.print("C ");                  // C wird angezeigt

  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (64,4);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT3.read22(DHT3_PIN);            //DHT3 wird ausgelesen
  tft.print(DHT3.humidity, 1);      // DHT3 Luftfeuchte wird ausgelesen und angezeigt
  tft.print ("%      ");            // %-Zeichen plus Platzhalter
  tft.print(DHT3.temperature, 1);  // DHT3 Temp wird ausgelesen und angezeigt
  tft.print("C ");   

  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (84,4);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT4.read22(DHT4_PIN);            //DHT4 wird ausgelesen
  tft.print(DHT4.humidity, 1);      // DHT4 Luftfeuchte wird ausgelesen und angezeigt
  tft.print ("%      ");            // %-Zeichen plus Platzhalter
  tft.print(DHT4.temperature, 1);  // DHT4 Temp wird ausgelesen und angezeigt
  tft.print("C ");   


  delay(10000);              //10Sekunden warten
 
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);                   
 
  //nach dem dreimaligen Blinken des Displays wird es wieder Rot und
  // die Werten werden erneut ausgelesen
  // jeder DHT wird ca. alle 20Sekunden ausgelesen und "erwärmt" sich nicht unnötig

}




und der Code für das Beispiel

Code: [Select]
// Grafiktest 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)



#define sclk 13
#define mosi 11
#define cs   10
#define dc   9
#define rst  8

#include <Adafruit_GFX.h>    // Adafruit Grafik-Bibliothek
#include <Adafruit_ST7735.h> // Adafruit ST7735-Bibliothek
#include <SPI.h>


Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup

void setup(void) {
 
  tft.initR(INITR_BLACKTAB);   // ST7735-Chip initialisieren

}

void loop() {

  // Bildschirm mit Farbe fuellen
  // fillScreen(farbe);
  tft.fillScreen(ST7735_BLACK);

  delay(2000); // 2 Sekunden warten
 
  // Fontgroesse setzen
  // setTextSize(groesse);
  tft.setTextSize(2);
 
  // Schrift umbrechen?
  // setTextWrap(true);   true=Ja, false=Nein
  tft.setTextWrap(true);
 
  // Textposition setzen
  // setCursor(x,y);
  tft.setCursor(24,4);

  // Textfarbe setzen
  // setTextColor(farbe);
  tft.setTextColor(ST7735_WHITE);
 
  // Text ausgeben
  // print(text);
  tft.print("Test");

  delay(2000); // 2 Sekunden warten
 
 
  // Gesamtes Display invertieren?
  // invertDisplay(true);   true=Ja, false=Nein
  tft.invertDisplay(true);
 
  delay(1000); // 1 Sekunde warten
 
  // Gesamtes Display invertieren?
  // invertDisplay(false);   true=Ja, false=Nein
  tft.invertDisplay(false);

  delay(1000); // 1 Sekunde warten
}





Ich denke ich werde auch noch etwas mit den Positionen der Schrift sowie der Größe experimentieren müssen wenn ich mal etwas angezeigt bekomme...


Vielleicht habt ihr ja einen Tipp für mich  wieso das Display nicht reagiert...


Grüße der Arne

Der_Arne

Hallo nochmal


kann man auch ein Hintergrundbild bei diesen TFT´s laden ohne eine SD Karte zu nutzten?


Grüße der Arne

michael_x


kann man auch ein Hintergrundbild bei diesen TFT´s laden ohne eine SD Karte zu nutzten?

Klar, der Flash Speicher ist gross genug...

Der_Arne

Hallo zusammen


damit ich hier nicht nur als Fragender bekannt werden möchte hier nun meine Lösung für das ganze Problem.
Ich habe es zwar noch nicht mit "meinem" Sketch geschafft aber ich finde auch keinen Unterschied zu dem Beispiel Sketch, in diesen habe ich meinen Code aber eingefügt und nun funktioniert es.

Anbei habe ich mich gefragt wie lang die Datenleitungen sein dürfen getestet habe ich mit einem 0,5 Querschnitt und ca. 80m Leitung auf Rolle Unterschiede zu den Werten konnte ich nicht feststellen.
Ich hatte 4 DHTs nebeneinander von der Temperaturanzeige unterscheiden sie Sich um 0,3°C bei der Feuchtigkeit sind es 3%. Wie genau die Werte kann ich noch nicht sagen das werde ich die Woche auf Arbeit testen da habe ich ein noch ein Messgerät.

Nächster Schritt wäre vielleicht das einfügen einer Uhr, eines Hintergrundbildes (dies würde mich sehr interessieren) oder die Möglichkeit das sich die Anzeige "automatisch" aktualisiert ohne das jedesmal der Bildschirm neu geschrieben wird.


Okay hier nun der Code

Code: [Select]



#include <dht.h>
#include <Wire.h>

#define sclk 13
#define mosi 11
#define cs   10
#define dc   9
#define rst  8


//DHT #X an Pin X
#define DHT1_PIN 2
#define DHT2_PIN 3
#define DHT3_PIN 4
#define DHT4_PIN 5

#include <Adafruit_GFX.h>    // Adafruit Grafik-Bibliothek
#include <Adafruit_ST7735.h> // Adafruit ST7735-Bibliothek
#include <SPI.h>



Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup

dht DHT1;   
dht DHT2;
dht DHT3;
dht DHT4;

void setup(void) {
 
  tft.initR(INITR_BLACKTAB);   // ST7735-Chip initialisieren

}

void loop() {

 
  tft.fillScreen(ST7735_RED);     //Bildschirm "Rot" zeichnen
  tft.setTextSize(1);             // Schriftgroesse
  tft.setTextWrap(true);          // Text wird an Zeilenende umgebrochen
  tft.setCursor (8,4);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT1.read22(DHT1_PIN);            //DHT1 wird ausgelesen
  tft.setCursor (4,20);
  tft.print("   RH     Temperatur");
  delay(1000);                      // eine Sekunde warten
  tft.setCursor (42,35);
  tft.print(" X D 0 ");
  tft.setCursor (10,46);
  tft.print(DHT1.humidity, 1);      // DHT1 Luftfeuchte wird ausgelesen und angezeigt die Stelle nach dem Komma gibt Dezimalstellen an
  tft.print (" %     ");            // %-Zeichen plus Platzhalter
  tft.print(DHT1.temperature, 1);  // DHT1 Temp wird ausgelesen und angezeigt
  tft.write(247); // das °-Zeichen
  tft.print("C ");                  // C wird angezeigt

  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (42,62);
  tft.print(" X E 0 ");
  tft.setCursor (10,73);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT2.read22(DHT2_PIN);            //DHT2 wird ausgelesen
  tft.print(DHT2.humidity, 1);      // DHT2 Luftfeuchte wird ausgelesen und angezeigt
  tft.print (" %     ");            // %-Zeichen plus Platzhalter
  tft.print(DHT2.temperature, 1);  // DHT2 Temp wird ausgelesen und angezeigt
  tft.write(247); // das °-Zeichen
  tft.print("C ");                  // C wird angezeigt

  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (42,89);
  tft.print(" X F 0 ");
  tft.setCursor (10,100);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT3.read22(DHT3_PIN);            //DHT3 wird ausgelesen
  tft.print(DHT3.humidity, 1);      // DHT3 Luftfeuchte wird ausgelesen und angezeigt
  tft.print (" %     ");            // %-Zeichen plus Platzhalter
  tft.print(DHT3.temperature, 1);  // DHT3 Temp wird ausgelesen und angezeigt
  tft.write(247); // das °-Zeichen
  tft.print("C ");   


  delay(1000);                      // 1 Sekunde warten
  tft.setCursor (42,116);
  tft.print(" X G 0 ");
  tft.setCursor (10,127);            // Position des ersten Buchstabens
  tft.setTextColor(ST7735_GREEN);  // Textfarbe 
  DHT4.read22(DHT4_PIN);            //DHT4 wird ausgelesen
  tft.print(DHT4.humidity, 1);      // DHT4 Luftfeuchte wird ausgelesen und angezeigt
  tft.print (" %     ");            // %-Zeichen plus Platzhalter
  tft.print(DHT4.temperature, 1);  // DHT4 Temp wird ausgelesen und angezeigt
  tft.write(247); // das °-Zeichen
  tft.print("C ");   


  delay(5000);              //5Sekunden warten
 
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);
  tft.invertDisplay(true);      //Display invertietren
  delay(1000);
  tft.invertDisplay(false);      //Display invertietren
  delay(1000);                   
 
  //nach dem dreimaligen Blinken des Displays wird es wieder Rot und
  // die Werten werden erneut ausgelesen
  // jeder DHT wird ca. alle 20Sekunden ausgelesen und "erwärmt" sich nicht unnötig

}




Falls jemand den unterschied zu einen Sketch gefunden bin ich dankbar für einen Tipp ich fand meinen etwas mehr "aufgeräumt"


Grüße der Arne

Der_Arne

Achso was ich noch vergessen habe


Als ich mich informiert habe wie man den DHT anschließt hießt es immer das der PIN 3 frei bleiben kann. Ich hatte mich bei einem DHT versehen und PIN3 auf masse gelegt und hatte anschließend schon einen Wert auf dem TFT obwohl auch noch kein Wiederstand zwischen Pin1 und PIN2 war.

Nur so als Info.


Grüße der Arne

Eifel-Peter

Hallo Arne
du wolltest wissen wo dein Fehler ist,
sch dir mal zeile 23 an , da sollte es heissen "Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup"
bei dir steht was anderes.
gruß Peter

Trixi

Quote
da sollte es heissen "Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup"


Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup

Mhmmm.....
Dum spiro, spero - if you find my posting helpful, please click my Karma :)

Eifel-Peter

Hallo A-R.Ty
wass heißt Mhmmmm?

Trixi

#38
Oct 20, 2013, 03:39 pm Last Edit: Oct 20, 2013, 03:44 pm by A.R.Ty Reason: 1
Naja, ich sehe keinen Unterschied zwischen dem was er und was Du geschrieben hattest  ;)

@der-Arne:
Quote
Als ich mich informiert habe wie man den DHT anschließt hießt es immer das der PIN 3 frei bleiben kann. Ich hatte mich bei einem DHT versehen und PIN3 auf masse gelegt und hatte anschließend schon einen Wert auf dem TFT obwohl auch noch kein Wiederstand zwischen Pin1 und PIN2 war

Sicherlich kommen auch ohne 4,7k Werte, aber nicht dir richtigen  ;)

Wenn Du auf das DHT(11)-Gehäuse blickst (Beinchen unten) ist der 3. von links frei.
Die ersten beiden werden mit je einem 4,7k WS verbunden (Vcc und DATA), das ganz rechte 4. Beinchen ist dann GND.

Betreibe auch mehrere davon gleichzeitig, läuft ohne Probleme  XD
Dum spiro, spero - if you find my posting helpful, please click my Karma :)

Eifel-Peter

Hallo A.R.Ty
arne schreibt in seinem Sketch "Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst, mosi, sclk);"
und im Beispielkode steht         "Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst); 

siehst du jetzt den Unterschied?

Gruß
Peter

Trixi

Ich bin ja nun schon bisschen was älter, aber an der Optik habe ich noch nüscht  :smiley-eek:  XD

in diesem http://forum.arduino.cc//index.php?topic=186278.msg1407721#msg1407721 Posting (seinem letzten mit Code auf das ich mich bezog) steht:
Code: [Select]
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup

Dein Verbessungsvorschlag war:
Code: [Select]
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);  // Display-Bibliothek Setup

Oder meinen wir beide was Anderes irgendwie ?  XD

Dum spiro, spero - if you find my posting helpful, please click my Karma :)

Eifel-Peter

Hallo A.R.Ty
ich beziehe mich auf den Post vom 25.09. und nicht auf den vom 27.9.

Trixi

XD XD XD  Also nicht auf den, in dem er schon den richtigen Code gepostet hatte  XD XD XD
Dum spiro, spero - if you find my posting helpful, please click my Karma :)

Der_Arne

Hallo

Ich habe den unterschied auch erst beim vierten schauen gesehen.

Getestet habe ich dies noch nicht. Bin grade schwer in den Vorbereitungen zu einer größeren Seefahrt.

Zu dem Hinweis:

Naja, ich sehe keinen Unterschied zwischen dem was er und was Du geschrieben hattest  ;)

@der-Arne:
Quote
Als ich mich informiert habe wie man den DHT anschließt hießt es immer das der PIN 3 frei bleiben kann. Ich hatte mich bei einem DHT versehen und PIN3 auf masse gelegt und hatte anschließend schon einen Wert auf dem TFT obwohl auch noch kein Wiederstand zwischen Pin1 und PIN2 war

Sicherlich kommen auch ohne 4,7k Werte, aber nicht dir richtigen  ;)

Wenn Du auf das DHT(11)-Gehäuse blickst (Beinchen unten) ist der 3. von links frei.
Die ersten beiden werden mit je einem 4,7k WS verbunden (Vcc und DATA), das ganz rechte 4. Beinchen ist dann GND.

Betreibe auch mehrere davon gleichzeitig, läuft ohne Probleme  XD


Ich habe die DHT 22er, ich hatte die Bemerkung mit PIN 3 und GND in einem englischen Forum gelesen da war von dem Widerstand keine Rede und durch einen bescheidenden Zufall getestet.

Aber wie gesagt das Projekt ist derzeitig etwas ruhig sobald ich auf See bin wird es wieder aufleben.

Grüße der Arne

Trixi

Ahoi,

gute Fahrt und allzeit eine Handbreit Wasser unter dem Kiel  :D
Dum spiro, spero - if you find my posting helpful, please click my Karma :)

Go Up