Gestion de température et de PH pour piscine avec afficheur LS1602 I2C

Bonjour,

Je débute et je ne comprend pas pourquoi mon petit programme bug

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // Start serial communication for debugging purposes
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
}

void loop(void){ 
  // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
  sensors.requestTemperatures(); 
  
  Serial.print("Celsius temperature: ");
  // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
  Serial.print(sensors.getTempCByIndex(0)); 
 // Serial.print(" - Fahrenheit temperature: ");
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

La compilation et le téléversement passe bien mais l'affichage sur le moniteur serie donne :
PE : 14.06.20
191 -> Celsuis temperature : -127.00-196.60

??

Capteur de température : DS18B20 Cable Capteur de Température Numérique TO92-55
Cablé avec résistance de 4,7kOhm
Sur Arduino Uno R3

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ Je l'ai déplacé vers le forum francophone pour vous pour cette fois...

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”


montrez nous un schéma de câblage

Le fil rouge de la sonde de température est sur la borne : 5V
Le fil noir de la sonde de température est sur la borne : GND
Le fil jaune de la sonde de température est en serie avec une résistance de 4,7 kO pour ensuite être raccordé sur la borne 4 et en // sur le 5V

comme ça
image

pas comme cela

OK merci beaucoup

Bonjour,

J'avance doucement mais surement :wink:
Après quelques erreurs, j'arrive enfin à visuliser la température sur l'application IDE.
Bien sur mon objectif est d'afficher cete température sur mon LS 1602 I2C.
Pour ce faire j'ai intégré les bibliotheques :"Wire.h" et"LiquidCrystal_I2C.h"

Après, je n'arrive pas à finir mon code pour afficher ma température.
J'ai essayé d'initialiser mon LCD en ajoutant dans Setup :
lcd.init();
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Hello,world!");
lcd.setCursor(4,2) ;
lcd.print("victoire") ;
delay(1000) ;
lcd.cursor_off() ;
lcd.blink_off() ;

Mais j'obtiens le message suivant : error: 'class LiquidCrystal_I2C' has no member named 'init'
lcd.init();
^~~~

exit status 1

Compilation error: 'class LiquidCrystal_I2C' has no member named 'init'


/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
 

/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 7;

LiquidCrystal_I2C lcd(0x27, 16,2); // Initialise le module 1602 I2C

 /* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
  READ_OK,  // Lecture ok
  NO_SENSOR_FOUND,  // Pas de capteur
  INVALID_ADDRESS,  // Adresse reçue invalide
  INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
 
 
/**
 * Fonction de lecture de la température via un capteur DS18B20.
 */
byte getTemperature(float *temperature, byte reset_search) {
  byte data[9], addr[8];
  // data[] : Données lues depuis le scratchpad
  // addr[] : Adresse du module 1-Wire détecté
  
  /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
  if (reset_search) {
    ds.reset_search();
  }
 
  /* Recherche le prochain capteur 1-Wire disponible */
  if (!ds.search(addr)) {
    // Pas de capteur
    return NO_SENSOR_FOUND;
  }
  
  /* Vérifie que l'adresse a été correctement reçue */
  if (OneWire::crc8(addr, 7) != addr[7]) {
    // Adresse invalide
    return INVALID_ADDRESS;
  }
 
  /* Vérifie qu'il s'agit bien d'un DS18B20 */
  if (addr[0] != 0x28) {
    // Mauvais type de capteur
    return INVALID_SENSOR;
  }
 
  /* Reset le bus 1-Wire et sélectionne le capteur */
  ds.reset();
  ds.select(addr);
  
  /* Lance une prise de mesure de température et attend la fin de la mesure */
  ds.write(0x44, 1);
  delay(800);
  
  /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
 
 /* Lecture du scratchpad */
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
   
  /* Calcul de la température en degré Celsius */
  *temperature = ((data[1] << 8) | data[0]) * 0.0625; 
  
  // Pas d'erreur
  return READ_OK;
}
 
/** Fonction setup() **/
void setup() {

  /* Initialisation du port série */
  Serial.begin(9600); 
 }
 
 
/** Fonction loop() **/
void loop() {
  float temperature;
   
  /* Lit la température ambiante à ~1Hz */
  if (getTemperature(&temperature, true) != READ_OK) {
    Serial.println(F("Erreur de lecture du capteur"));
    return;
  }

  /* Affiche la température */
  Serial.print(F("Temperature : "));
  Serial.print(temperature, 2);
  Serial.write(176); // Caractère degré
  Serial.write('C');
  Serial.println();
}

Il y a au moins deux bibliothèques qui s’appellent LiquidCrystal_I2C et une utilise begin() et l’autre init() ➜ vous avez sans doute téléchargé la mauvaise, regardez les exemples de votre bibliothèque pour voir comment ils font l’initialisation.

Dans l’absolu au lieu d’utiliser cette bibliothèque je vous recommande hd44780 - Arduino Reference

Merci j-M-L

En effet avec begin je n'ai plus de message de défaut dans la console.
Maintenant lorsque je téléverse mon code dans mon Uno le LS1602 n'affiche rien.
J'ai du faire une ou plusieurs érreurs dans mon programme.

/**
 * Exemple de code pour lire un unique capteur DS18B20 sur un bus 1-Wire.
 */
 
/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
 

/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 7;

LiquidCrystal_I2C lcd(0x27, 16,2); // Initialise le module 1602 I2C

 /* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
  READ_OK,  // Lecture ok
  NO_SENSOR_FOUND,  // Pas de capteur
  INVALID_ADDRESS,  // Adresse reçue invalide
  INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
 
 
/**
 * Fonction de lecture de la température via un capteur DS18B20.
 */
byte getTemperature(float *temperature, byte reset_search) {
  byte data[9], addr[8];
  // data[] : Données lues depuis le scratchpad
  // addr[] : Adresse du module 1-Wire détecté
  
  /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
  if (reset_search) {
    ds.reset_search();
  }
 
  /* Recherche le prochain capteur 1-Wire disponible */
  if (!ds.search(addr)) {
    // Pas de capteur
    return NO_SENSOR_FOUND;
  }
  
  /* Vérifie que l'adresse a été correctement reçue */
  if (OneWire::crc8(addr, 7) != addr[7]) {
    // Adresse invalide
    return INVALID_ADDRESS;
  }
 
  /* Vérifie qu'il s'agit bien d'un DS18B20 */
  if (addr[0] != 0x28) {
    // Mauvais type de capteur
    return INVALID_SENSOR;
  }
 
  /* Reset le bus 1-Wire et sélectionne le capteur */
  ds.reset();
  ds.select(addr);
  
  /* Lance une prise de mesure de température et attend la fin de la mesure */
  ds.write(0x44, 1);
  delay(800);
  
  /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
 
 /* Lecture du scratchpad */
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
   
  /* Calcul de la température en degré Celsius */
  *temperature = ((data[1] << 8) | data[0]) * 0.0625; 
  
  // Pas d'erreur
  return READ_OK;
}
 
/** Fonction setup() **/
void setup() {
  
  /* Initialisation du port série */
  Serial.begin(9600); 


lcd.begin();
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Temperature :");
lcd.setCursor(4,2) ;
lcd.print("temperature") ;
delay(1000) ;
lcd.cursor_off() ;
lcd.blink_off() ;
 }
 
 
/** Fonction loop() **/
void loop() {
  float temperature;
   
  /* Lit la température ambiante à ~1Hz */
  if (getTemperature(&temperature, true) != READ_OK) {
    Serial.println(F("Erreur de lecture du capteur"));
    return;
  }

  /* Affiche la température */
  Serial.print(F("Temperature : "));
  Serial.print(temperature, 2);
  Serial.write(176); // Caractère degré
  Serial.write('C');
  Serial.println();

  lcd.noDisplay();
   delay(1000);
   lcd.display();
   delay(1000);
}

Peut être que ton affichage a une autre adresse que 0x27, ce peut être 0x3F.

Essaies ça:
LiquidCrystal_I2C lcd(0x3F, 16,2); // Initialise le module 1602 I2C

Si non, utilises un scanner i2C pour déterminer l'adresse de ton affichage. S'il ne t'affiche aucune adresse, tu as un problème de câblage.

Cordialement
jpbbricole

1 Like

Tester la valeur rendue par

j'utilise la bibliothèque hd44780 comme je l'ai dit plus haut, elle est de bien meilleure qualité. mais de mémoire je crois que begin() répond true si ça s'est bien passé

1 Like

Bon effectivement l'adresse est bien 0x3F contrairement à ce qui est dit sur le site commercant.
J'avance doucement et maintenant j'affiche Temp : mais pas la température.

Mon code modifié :

/**
 * Exemple de code pour lire un unique capteur DS18B20 sur un bus 1-Wire.
 */
 
/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
 

/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 7;

LiquidCrystal_I2C lcd(0x3F, 16,2); // Initialise le module 1602 I2C

 /* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
  READ_OK,  // Lecture ok
  NO_SENSOR_FOUND,  // Pas de capteur
  INVALID_ADDRESS,  // Adresse reçue invalide
  INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
 
 
/**
 * Fonction de lecture de la température via un capteur DS18B20.
 */
byte getTemperature(float *temperature, byte reset_search) {
  byte data[9], addr[8];
  // data[] : Données lues depuis le scratchpad
  // addr[] : Adresse du module 1-Wire détecté
  
  /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
  if (reset_search) {
    ds.reset_search();
  }
 
  /* Recherche le prochain capteur 1-Wire disponible */
  if (!ds.search(addr)) {
    // Pas de capteur
    return NO_SENSOR_FOUND;
  }
  
  /* Vérifie que l'adresse a été correctement reçue */
  if (OneWire::crc8(addr, 7) != addr[7]) {
    // Adresse invalide
    return INVALID_ADDRESS;
  }
 
  /* Vérifie qu'il s'agit bien d'un DS18B20 */
  if (addr[0] != 0x28) {
    // Mauvais type de capteur
    return INVALID_SENSOR;
  }
 
  /* Reset le bus 1-Wire et sélectionne le capteur */
  ds.reset();
  ds.select(addr);
  
  /* Lance une prise de mesure de température et attend la fin de la mesure */
  ds.write(0x44, 1);
  delay(800);
  
  /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
 
 /* Lecture du scratchpad */
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
   
  /* Calcul de la température en degré Celsius */
  *temperature = ((data[1] << 8) | data[0]) * 0.0625; 
  
  // Pas d'erreur
  return READ_OK;
}
 
/** Fonction setup() **/
void setup() {
  
  /* Initialisation du port série */
  Serial.begin(9600); 


lcd.begin();
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.setCursor(4,2) ;
lcd.print("temperature, 2") ;
delay(5000) ;
lcd.cursor_off() ;
lcd.blink_off() ;
 }
  
/** Fonction loop() **/
void loop() {
  float temperature;
   
  /* Lit la température ambiante à ~1Hz */
  if (getTemperature(&temperature, true) != READ_OK) {
    Serial.println(F("Erreur de lecture du capteur"));
    return;
  }

  /* Affiche la température */
  Serial.print(F("Temperature : "));
  Serial.print(temperature, 2);
  Serial.write(176); // Caractère degré
  Serial.write('C');
  Serial.println();

  lcd.noDisplay();
   delay(1000);
   lcd.display();
   delay(1000);
}

Si j'ai bien compris la variable température s'appelle : température, 2 (enfin je pense).

Merci à vous deux pour votre aide et surtout votre compréhension de mon faible niveau :wink: Maintenant, lorsque j'ai quité les bancs de l'école, l'informatique n'existait pas encore et mes lecons d'automatisme étaient de l'algèbre de Boole et du plan contact :slight_smile:

Bonjour jclaudej

Pas tout à fait, la variable température contient la valeur mesurée, de type float, c'est à dire avec chiffres après la virgule. Le ,2 veut dire à afficher avec 2 chiffres après la virgule.

Attention,
lcd.print("temperature, 2") ; affichera le texte entre les guillemets tel quel.
lcd.print(temperature, 2); affichera la valeur de température avec 2 chiffres après la virgule.

Je t'ai mis ton programme "un peu arrangé" :wink:
J'ai mis les lignes que j'estimais inutiles, en remarques.
Si la température est < 5 degrés, l'affichage clignote (c'est pour le fun :grinning:)

Le programme:

/**
* Exemple de code pour lire un unique capteur DS18B20 sur un bus 1-Wire.
*/

/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
#include "Wire.h"
#include "LiquidCrystal_I2C.h"


/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 7;

LiquidCrystal_I2C lcd(0x3F, 16,2); // Initialise le module 1602 I2C

/* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
	READ_OK,  // Lecture ok
	NO_SENSOR_FOUND,  // Pas de capteur
	INVALID_ADDRESS,  // Adresse reçue invalide
	INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);


/**
* Fonction de lecture de la température via un capteur DS18B20.
*/
byte getTemperature(float *temperature, byte reset_search) {
	byte data[9], addr[8];
	// data[] : Données lues depuis le scratchpad
	// addr[] : Adresse du module 1-Wire détecté
	
	/* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
	if (reset_search) {
		ds.reset_search();
	}
	
	/* Recherche le prochain capteur 1-Wire disponible */
	if (!ds.search(addr)) {
		// Pas de capteur
		return NO_SENSOR_FOUND;
	}
	
	/* Vérifie que l'adresse a été correctement reçue */
	if (OneWire::crc8(addr, 7) != addr[7]) {
		// Adresse invalide
		return INVALID_ADDRESS;
	}
	
	/* Vérifie qu'il s'agit bien d'un DS18B20 */
	if (addr[0] != 0x28) {
		// Mauvais type de capteur
		return INVALID_SENSOR;
	}
	
	/* Reset le bus 1-Wire et sélectionne le capteur */
	ds.reset();
	ds.select(addr);
	
	/* Lance une prise de mesure de température et attend la fin de la mesure */
	ds.write(0x44, 1);
	delay(800);
	
	/* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
	ds.reset();
	ds.select(addr);
	ds.write(0xBE);
	
	/* Lecture du scratchpad */
	for (byte i = 0; i < 9; i++) {
		data[i] = ds.read();
	}
	
	/* Calcul de la température en degré Celsius */
	*temperature = ((data[1] << 8) | data[0]) * 0.0625;
	
	// Pas d'erreur
	return READ_OK;
}

/** Fonction setup() **/
void setup() {
	
	/* Initialisation du port série */
	Serial.begin(9600);


	lcd.begin();

	//lcd.cursor_on();
	//lcd.blink_on();
	lcd.backlight();
	lcd.setCursor(0,0);
	//lcd.print("Temp:");
	//lcd.setCursor(4,2) ;
	//lcd.print("temperature, 2") ;
	//delay(5000) ;
	//lcd.cursor_off() ;
	//lcd.blink_off() ;
}

/** Fonction loop() **/
void loop() {
	float temperature;
	
	/* Lit la température ambiante à ~1Hz */
	if (getTemperature(&temperature, true) != READ_OK) {
	Serial.println(F("Erreur de lecture du capteur"));
	return;
	}
	/* Affiche la température */
	Serial.print(F("Temperature : "));
	Serial.print(temperature, 2);
	Serial.write(176); // Caractère degré
	Serial.write('C');
	Serial.println();

	lcd.setCursor(0,0);
	lcd.print("Temp:");
	lcd.print(temperature, 2);

	if (temperature < 5)     // Si < que 5 degrés, clignotement
	{
		lcd.noDisplay();
		delay(1000);
		lcd.display();
	}
	delay(1000);
}

A+
Cordialement
jpbbricole

Merci beaucoup :slight_smile:
Mes prochaines étapes :
Après réception d'un capteur de PH,compléter le code pour lire cette valeur.
Et si j'y arrive intégrer un module Wifi type ESP8266 Wifi j'espère pouvoir réccupérer ces données en réseau avec en finalité de les consulter sur mon smartphone. Le chemin va être long :slight_smile:

la console série supporte l'UTF 8 ansi que l'IDE donc vous pouvez mettre directement à la place

Serial.println("°C");

(sinon sur un LCD1602 habituel, ce serait lcd.write(223); et pas 176 - le LCD ne connait pas l'UTF8 et a une table plutôt limitée de caractères)

hello
peut être changer le titre par un autre qui se rapporte au problèmes traités :smiley:

:+1: merci

Bonjour,

Je continu avec mon projet et aujourd'hui avec l'aide d'un tuto sur le site (ATmega328p + ESP8266 WIFI tutorial) j'ai enfin réussi à téléverser mon programme Arduino Uno vers un UNO R3 + WiFi ATmega328P + ESP8266.
J'ai juste supprimer la bibliothèque "dummy.h" et cela fonctionne aussi bien qu'avec le Uno original.
Pourquoi ce choix, parce que cette carte doit pouvoir me permettre de transférer mes données de température en wifi vers un hébergement.
Maintenant reste à programmer celle-ci pour cette fonction.
Lorsque que j'ai téléverser mon programme dans celle-ci, j'ai sélectionné une carte Arduino Uno avec les dip 3 et 4 sur On.
Si j'ai bien compris, pour configurer la partie WiFi je devrai choisir une carte ESP8266 avec les dip 5-6-7 sur On.
Ce qui voudrait dire que je dois injecter deux programmes différents dans cette carte :crazy_face:
Quid de la relation entre ces deux programmes ?

Je continu a chercher parce que dans l'immédiat les seuls tutos trouvés sur YouTube sont d'un indien en langue anglaise mais à la sauce indienne sans sous titrage :mask:

Bonjour,

Je suis passé sur un ESP32 et le programme fonctionne bien.

Mon programme :slight_smile:

/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "WiFi.h"


const char* ssid = "Mon ssid";
const char* password = "Mon MDP";


/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 14;

LiquidCrystal_I2C lcd(0x3F, 16,2); // Initialise le module 1602 I2C

/* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
	READ_OK,  // Lecture ok
	NO_SENSOR_FOUND,  // Pas de capteur
	INVALID_ADDRESS,  // Adresse reçue invalide
	INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);


/**
* Fonction de lecture de la température via un capteur DS18B20.
*/
byte getTemperature(float *temperature, byte reset_search) {
	byte data[9], addr[8];
	// data[] : Données lues depuis le scratchpad
	// addr[] : Adresse du module 1-Wire détecté
	
	/* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
	if (reset_search) {
		ds.reset_search();
	}
	
	/* Recherche le prochain capteur 1-Wire disponible */
	if (!ds.search(addr)) {
		// Pas de capteur
		return NO_SENSOR_FOUND;
	}
	
	/* Vérifie que l'adresse a été correctement reçue */
	if (OneWire::crc8(addr, 7) != addr[7]) {
		// Adresse invalide
		return INVALID_ADDRESS;
	}
	
	/* Vérifie qu'il s'agit bien d'un DS18B20 */
	if (addr[0] != 0x28) {
		// Mauvais type de capteur
		return INVALID_SENSOR;
	}
	
	/* Reset le bus 1-Wire et sélectionne le capteur */
	ds.reset();
	ds.select(addr);
	
	/* Lance une prise de mesure de température et attend la fin de la mesure */
	ds.write(0x44, 1);
	delay(800);
	
	/* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
	ds.reset();
	ds.select(addr);
	ds.write(0xBE);
	
	/* Lecture du scratchpad */
	for (byte i = 0; i < 9; i++) {
		data[i] = ds.read();
	}
	
	/* Calcul de la température en degré Celsius */
	*temperature = ((data[1] << 8) | data[0]) * 0.0625;
	
	// Pas d'erreur
	return READ_OK;
}

/** Fonction setup() **/
void setup() {
	
	/* Initialisation du port série */
	Serial.begin(115200);


	lcd.begin();

	//lcd.cursor_on();
	//lcd.blink_on();
	lcd.backlight();
	lcd.setCursor(0,0);
	//lcd.print("Temp:");
	//lcd.setCursor(4,2) ;
	//lcd.print("temperature, 2") ;
	//delay(5000) ;
	//lcd.cursor_off() ;
	//lcd.blink_off() ;

     Serial.begin(115200);
    delay(1000);

    WiFi.mode(WIFI_STA); //Optional
    WiFi.begin(ssid, password);
    Serial.println("\nConnecting");

    while(WiFi.status() != WL_CONNECTED){
        Serial.print(".");
        delay(100);
    }

    Serial.println("\nConnected to the WiFi network");
    Serial.print("Local ESP32 IP: ");
    Serial.println(WiFi.localIP());
}

/** Fonction loop() **/
void loop() {
	float temperature;
	
	/* Lit la température ambiante à ~1Hz */
	if (getTemperature(&temperature, true) != READ_OK) {
	Serial.println(F("Erreur de lecture du capteur"));
	return;
	}
	/* Affiche la température */
	Serial.print(F("Temperature : "));
	Serial.print(temperature, 2);
	Serial.write(176); // Caractère degré
	Serial.write('C');
	Serial.println();

	lcd.setCursor(0,0);
	lcd.print("Temperature:");
	lcd.print(temperature, 2);

	if (temperature < 5)     // Si < que 5 degrés, clignotement
	{
		lcd.noDisplay();
		delay(10000);
		lcd.display();
	}
	delay(10000);
}`

Par contre je n'arrive pas à me connecter à l'ESP32 via l'adresse IP renvoyée.
Fin de semaine, j'installerai Home Assistant sur ma Freebox Delta (après avoir reçu de la RAM) et ensuite j'essaierai de configurer mon ESP32 via la plateforme ESPHome.

@ suivre...........

C'est clair qu'avec ceci (delay), la connexion n'a aucune chance d'aboutir :

	if (temperature < 5)     // Si < que 5 degrés, clignotement
	{
		lcd.noDisplay();
		delay(10000);
		lcd.display();
	}
	delay(10000);

Utiliser millis() à la place de delay() serait plus judicieux.

Deuxièmement il n'y a aucun code de gestion d'une éventuelle connexion HTTP !

Concernant la gestion de la connexion j'essai de comprendre => https://github.com/PhilippeSimier/Esp32/tree/master/04_Wifi_Station

void initWiFi() {
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    Serial.print("Connecting to WiFi ..");
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print('.');
        delay(1000);
    }
    Serial.println(""); // affichage des paramètres 
    Serial.println("WiFi connecté");
    Serial.print("192.168.1.2 : "); // ***Adresse renvoyé par le moniteur serie***
    Serial.println(WiFi.localIP());
    Serial.print("Adresse IP de la gateway : "); // ***Adresse local de ma box***
    Serial.println(WiFi.gatewayIP());
    Serial.print("Adresse IP du DNS : "); // ***Adresse IP du Freebox server***
    Serial.println(WiFi.dnsIP());
}

Ensuite si je remplace delay => millis uniquement à cet emplacement la compilation ce passe mal :wink: