[Résolu] Problème LCD avec ST7789v et DHT11

Bonjour,

J'ai un problème avec l'affichage de valeur d'un capteur DHT11 sur un LCD 240*320 avec le controleur ST7789V. Lorsque j'affiche les valeurs du DHT dans le moniteur série, aucun problème. Mais dès que j'active l'écran, le capteur me sort "NAN" comme valeur pour la T° et l'humidité et j'ai une erreur qui s'affiche quand je téléverse le programme.

Je vous met en pièce joint mon code et le screenshot du moniteur série et de l'erreur. Les deux premières valeurs dans le moniteur sont sans l'écran et les deux d'après sont dès que j'active l'écran.

 #include "DHT.h" //librairie capteurs DHT
 #include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

//DHT11
#define DHTPIN 12 //broche data du DHT11
#define DHTTYPE DHT11 //définition du type de capteur DHT
//Ecran
#define TFT_CS        10
#define TFT_RST        8// Or set to -1 and connect to Arduino RESET pin
#define TFT_DC         7

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); //Objet écran avec broches en paramètres

DHT dht(DHTPIN, DHTTYPE); //objet de type DHT avec la broche et le type de capteur en paramètre
 
 void setup() {

  Serial.begin(9600);

  dht.begin(); //init du capteur DHT
  //Ecran
  tft.init(240, 320); // Init ST7789 320x240
}

void loop() {
  //Récupère la température et l'humidité du capteur DHT et les affiche sur le moniteur série et attends 10 sec avant de recommencer
  Serial.println("T° = " + String(dht.readTemperature())+" °C");
  Serial.println("H = " + String(dht.readHumidity())+" %");
  delay(10000);
}

erreur st7789

Vous pouvez essayer ce tutoriel: Arduino with DHT11 Sensor and ST7789 TFT Display - Simple Projects

Merci @bidrohini, je vais essayer ça tout de suite. Malgré mes recherches depuis 2 jours, je n'avait trouvé aucun article ou tuto qui traitait de l'utilisation des deux ensemble :sweat_smile:

Merci @bidrohini pour le tuto, j'arrive à afficher des valeurs sur l'écran sauf que les deux valeurs sont à 0 au lieu de "NAN". Je ne comprends pas d'où vient le problème. Voilà mon nouveau code.

#include <DHT.h> //librairie capteurs DHT
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789

//Ecran
#define TFT_CS        10
#define TFT_RST        8// Or set to -1 and connect to Arduino RESET pin
#define TFT_DC         7
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); //Objet écran avec broches en paramètres

//DHT11
#define DHTPIN 12 //broche data du DHT11
#define DHTTYPE DHT11 //définition du type de capteur DHT
DHT dht11(DHTPIN, DHTTYPE); //objet de type DHT avec la broche et le type de capteur en paramètre

//float p = 3.1415926;
 
 void setup() {
  //Ecran
  tft.init(240, 320, SPI_MODE0); // Init ST7789 320x240
  tft.fillScreen(ST77XX_BLACK);

  tft.setTextWrap(false);                        // turn off text wrap option
  tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK);  // set text color to green and black background
  tft.setTextSize(3);           // text size = 3
  tft.setCursor(15, 40);        // move cursor to position (15, 27) pixel
  tft.print("TEMPERATURE:");
  tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);  // set text color to yellow and black background
  tft.setCursor(43, 140);    // move cursor to position (15, 27) pixel
  tft.print("HUMIDITY:");
  tft.setTextSize(4);

  Serial.begin(9600);
  //Serial.print(F("Hello! ST77xx TFT Test"));

  dht11.begin(); //init du capteur DHT
  
}

char _buffer[7];

void loop() {
  delay(5000);
  
  int Temp = dht11.readTemperature() * 10;
  int Humi = dht11.readHumidity() * 10;

  tft.setTextColor(ST77XX_RED, ST77XX_BLACK);  // set text color to red with black background
  if(Temp < 0)    // if temperature < 0
    sprintf(_buffer, "-%02u.%1u", (abs(Temp)/10)%100, abs(Temp) % 10);
  else            // temperature >= 0
    sprintf(_buffer, " %02u.%1u", (Temp/10)%100, Temp % 10);
  tft.setCursor(26, 71);
  tft.print(_buffer);
  tft.drawCircle(161, 77, 4, ST77XX_RED);  // print degree symbol ( ° )
  tft.drawCircle(161, 77, 5, ST77XX_RED);
  tft.setCursor(170, 71);
  tft.print("C");
 
  // print humidity (in %)
  tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);  // set text color to cyan and black background
  sprintf(_buffer, "%02u.%1u %%", (Humi/10)%100, Humi % 10);
  tft.setCursor(50, 171);
  tft.print(_buffer);

  Serial.print("T° ");
  Serial.print(Temp);
  Serial.println(" °C");
}

Bonjour, j'ai trouvé la solution pour ceux que ça intéresserait. J'ai trouvé un nouveau code qui fonctionne après plusieurs essais. Je le met juste après.

#include <DHT.h> //librairie capteurs DHT
#include <Adafruit_GFX.h> // Librairie graphique adafruit
#include <Adafruit_ST7789.h> //librairie pour ST7789

//Ecran
#define TFT_CS        10
#define TFT_RST        8 // Ou mettre -1 et connecter sur le pin RESET de l'arduino
#define TFT_DC         7
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); //Objet écran avec broches en paramètres

//DHT11
#define DHTPIN 2 //broche data du DHT11
#define DHTTYPE DHT11 //définition du type de capteur DHT
DHT dht11(DHTPIN, DHTTYPE); //objet de type DHT avec la broche et le type de capteur en paramètre
 
 void setup() {
  
  Serial.begin(9600); //démarrage du moniteur série à 9600 bauds
  
  dht11.begin(); //init du capteur DHT
  
  //Ecran
  tft.init(240, 320, SPI_MODE0); //init de l'écran en 240*320. Mettre SPI_MODE0 si broche CS présente sinon SPI_MODE2
  tft.setRotation(0); //écran en mode portrait normal, 1 pour paysage, 2 pour portrait renversé, 3 pour paysage renversé
  tft.setTextWrap(false); //désactivation de l'adaptation du texte
  tft.fillScreen(ST77XX_BLACK); //couleur de l'écran
}

void loop() {
  delay(1000);
  
  int temp = dht11.readTemperature(); //lecture de la température
  int humi = dht11.readHumidity();  // lecture de l'humidité

  tft.setCursor(35, 10); //placement du curseur
  tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK); //couleur du texte
  tft.setTextSize(4); //taille du texte
  tft.print("T: ");
  tft.print(temp);
  tft.drawCircle(165, 15, 4, ST77XX_GREEN); //cercle des degrés
  tft.drawCircle(165, 15, 5, ST77XX_GREEN);
  tft.setCursor(174, 10);
  tft.print("C");

  tft.setCursor(60,60);
  tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
  tft.setTextSize(3);
  tft.print("H: ");
  tft.print(humi);
  tft.print("%");

  //impression des températures dans le moniteur série pour comparer les valeurs avec l'écran pendant les tests. A retirer pour le programme définitif
  Serial.print("T° : ");
  Serial.print(temp);
  Serial.println(" °C");
  Serial.print("H : ");
  Serial.print(humi);
  Serial.println(" %");

  delay(19000);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.