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);
}
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
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);
}